数组未正确解析

时间:2018-11-29 14:20:47

标签: php arrays

解析数组时出现问题。

这里是$ _GET变量的转储

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

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

    [add] => 
)

当我尝试使用foreach插入db时,它仅插入第一项。 我需要根据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++;
        }

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

1 个答案:

答案 0 :(得分:0)

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

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++;
    }
}

由于我很难对此进行测试,如果您有任何问题,请告诉我。