Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用复选框删除MySQL记录_Php_Mysql_Checkbox_Foreach_Sql Delete - Fatal编程技术网

在PHP中使用复选框删除MySQL记录

在PHP中使用复选框删除MySQL记录,php,mysql,checkbox,foreach,sql-delete,Php,Mysql,Checkbox,Foreach,Sql Delete,我正在尝试使用复选框删除PHP中的MySQL记录。我重复了每一句话,一切似乎都很好。变量和数组的值和格式正确 但是,当我尝试使用VAR_DUMP()回显$delete(这是delete查询)时,它显示bool(false)(这意味着它没有获得传递给它的变量$emailID的值,对吗?)。为什么? 这是单独PHP文件中的HTML部分: echo "<form action='addUser.php' method='POST'><table class='results3' al

我正在尝试使用复选框删除PHP中的MySQL记录。我重复了每一句话,一切似乎都很好。变量和数组的值和格式正确

但是,当我尝试使用
VAR_DUMP()
回显
$delete
(这是
delete
查询)时,它显示
bool(false)
(这意味着它没有获得传递给它的变量
$emailID
的值,对吗?)。为什么?

这是单独PHP文件中的HTML部分:

echo "<form action='addUser.php' method='POST'><table class='results3' align='center' cellspacing='0'>
            <tr><th class='head' id='headleft'  width='10%'></th>
                <th class='head' id='headright' colspan='4'>E-mail</th></tr>";

            while( $row = mysqli_fetch_array($sql) )
            {
                $email = $row['email'];
                $emailID = $row['emailID'];
                echo "<tr><td width='1%' class='results'><input type='checkbox' name='marked_user[]' value='$emailID'></td>
                        <td class='results' colspan='4'>" . $row['email']."</td></tr>";
            }
                echo "<td colspan='3'><input type='submit' class='button' name='deleteUser' value='Delete'></td></form>";

我认为您需要像这样连接一个字符串:

foreach($marked_user as $user => $emailID)
    {
        $emailID = (int)$emailID;
        $delete = $base -> query( "DELETE FROM tickets.allowed_users WHERE allowed_users.emailID = " . $emailID);

    }
for($i=0;$iquery(“从tickets.allowed_users中删除,其中allowed_users.emailID=”。$\u POST[“marked_user”][$i]。“”);
}
检查是否有效。如果有,请操纵输入数据,使您的代码不易受到SQL注入的攻击。

更改此代码

$delete = $base -> query( "DELETE FROM tickets.allowed_users WHERE allowed_users.emailID  = '$emailID'"); 


我无法使
foreach
工作,因此我使用
for
循环。就这样。我想我可以更多地依靠
进行
循环

if(isset($_POST['delete']))
{       
    for($i=0;$i<count($_POST['marked']);$i++)
    {
        $del_id=$_POST['marked'][$i];
        $delete = $base -> query( "DELETE FROM allowed_users WHERE emailID = '$del_id'");   
    }
    header('Location: viewTickets.php?viewType=U');
}
if(isset($\u POST['delete']))
{       
对于($i=0;$i查询(“从允许的_用户中删除,其中emailID='$del_id'));
}
标题('Location:viewTickets.php?viewType=U');
}

SQL注入漏洞。使用查询绑定,而不是直接插入用户提供的值,尤其是对于删除。您可以在块1中提供更多代码吗?我在那里看到一个结束脚本标记,几乎没有上下文。并且
$base
是正确的MySQLi对象吗?可以使用
print\r($base)进行检查
。脚本标记不属于那里。它只是放错了地方。
$base
属于处理php连接的单独文件中的一个类。我要问的代码只是我正在处理的票务系统的一部分。Block1代码就是这样。在它所属的php文件中的某个地方,我有另一个
if-isset
函数t做其他事情(插入用户)它工作得非常好。我编辑了我的代码并删除了
INSERT
语句以避免混淆,因为这些只是示例记录。我还发布了一个工作代码作为我问题的答案。我成功了。删除
-
之间的空格不会改变任何东西。我的其他查询看起来是这样的,我它工作得非常好。根据对问题的评论,此代码不安全,可能允许匿名用户在您的数据库上运行任意查询。至少,完全使用此vuln清空此表很简单。
for ($i = 0; $i < count($_POST["marked_user"]); $i++) {
 $base -> query("DELETE FROM tickets.allowed_users WHERE allowed_users.emailID = '".$_POST["marked_user"][$i]."'");
}
$delete = $base -> query( "DELETE FROM tickets.allowed_users WHERE allowed_users.emailID  = '$emailID'"); 
$delete = $base->query( "DELETE FROM tickets.allowed_users WHERE allowed_users.emailID = '$emailID'");
if(isset($_POST['delete']))
{       
    for($i=0;$i<count($_POST['marked']);$i++)
    {
        $del_id=$_POST['marked'][$i];
        $delete = $base -> query( "DELETE FROM allowed_users WHERE emailID = '$del_id'");   
    }
    header('Location: viewTickets.php?viewType=U');
}