【问题标题】:Array not being parsed correctly数组未正确解析
【发布时间】:2018-11-29 14:20:47
【问题描述】:

解析数组时遇到问题..

这是来自 $_GET var 的转储

Array
(
    [perm0] => Array
        (
            [0] => View
            [1] => Add
            [2] => Edit
            [3] => Delete
            [4] => Export
        )

    [perm1] => Array
        (
            [0] => View
            [1] => Add
            [2] => Export
        )

    [add] => 
)

当我尝试使用 foreach 插入数据库时​​,它只插入第一项。 我需要根据 perm[] 值添加数字,例如 perm0、perm1 等

这是我的代码

$i = 0;
$id = 0;
     foreach($_GET['perm'.$i] as $permission)
        {
           do {
                $perms = implode(":",$_GET['perm'.$i]);
                mysqli_query($dbc,"INSERT INTO `permissions` (`mid`,`uid`,`permissions`) VALUES ('$id','99','$perms')");
                echo mysqli_error($dbc);    
              } while(strpos($permission, $i) !== false);
          $id++;
          $i++;
        }

我原以为这会很简单,所以我不知道为什么会遇到问题

【问题讨论】:

  • [from cmets] “还有其他表单字段因此不起作用,因此 $_GET['perm'.$i]” - 可以通过命名以不同的方式形成字段……name="perm[0][]"name="perm[1][]",然后您会在$_GET['perm'] 中获得一个多维数组,您可以遍历该数组,而无需自己组装正确的访问密钥。

标签: php arrays


【解决方案1】:

问题是你总是只看第一项,你的陈述......

foreach($_GET['perm'.$i] as $permission)

只会拾取perm0 项目,即使您在循环中增加$i

相反,此代码循环遍历所有 $_GET 值,检查它们是否是 permN 值,然后插入该值。我还转换为准备好的语句以增加一定程度的安全性...

$i = 0;
$insert = mysqli_prepare ($dbc,"INSERT INTO 
            `permissions` (`mid`,`uid`,`permissions`) 
             VALUES (?,'99',?)");
foreach ( $_GET as $key => $param ) {
    if ( $key == "perm$i" ) {
        $perms = implode(":",$param);
        mysqli_stmt_bind_param ($insert, "is", $i, $perms);
        mysqli_execute($insert);
        $i++;
    }
}

因为我很难测试这个,如果你有问题请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 2013-04-18
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2016-11-25
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多