Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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 复选框删除-For循环中的If语句删除错误的条目_Php_Sql_Arrays_If Statement_For Loop - Fatal编程技术网

Php 复选框删除-For循环中的If语句删除错误的条目

Php 复选框删除-For循环中的If语句删除错误的条目,php,sql,arrays,if-statement,for-loop,Php,Sql,Arrays,If Statement,For Loop,我有一个页面显示我的数据库信息。通过每个循环,都会打印一个复选框,如果选中并提交,则会删除相关条目。复选框名称为“delete[]”,包含行id的隐藏值命名为“id[]” 这是我表格的相关部分: <tr><td valign='top'> <label class='amarillo med' style='color:#C00;'>Delete Section </label> <input type='checkbox' name='de

我有一个页面显示我的数据库信息。通过每个循环,都会打印一个复选框,如果选中并提交,则会删除相关条目。复选框名称为“delete[]”,包含行id的隐藏值命名为“id[]”

这是我表格的相关部分:

<tr><td valign='top'>
<label class='amarillo med' style='color:#C00;'>Delete Section </label>
<input type='checkbox' name='delete[]' />
<input type='hidden' name='id[]' value='" . $row['about_id'] . "' />
</td></tr>

删除节
这是我的php和查询

$deleteCount = count($_POST['delete']);
for ($x = 0; $x < $deleteCount; $x++) {
if(isset($_POST['delete'][$x])) {
   $sql = 'DELETE FROM about WHERE about_id = \''.$_POST['id'][$x].'\'';
 $result = mysql_query($sql);
}
}
$deleteCount=count($\u POST['delete']);
对于($x=0;$x<$deleteCount;$x++){
如果(isset($_POST['delete'][$x])){
$sql='DELETE FROM about WHERE about\u id=\'.$\u POST['id'][$x].\'';
$result=mysql\u查询($sql);
}
}
事情就是这样

如果返回了三行,而我只想删除第三行,我会选中第三个框并单击submit。这将删除返回的第一行。同样,如果返回三行,并且我想删除第一行和第三行,那么我提交并删除前两行


对于每个选中的复选框,都会从第一行开始删除许多行。任何建议都将不胜感激。

最好且更简单的方法是使用

<input type="checkbox" name="delete[]" value="<?=$row['about_id']?>"/>
使用以下代码

<tr><td valign='top'>
<label class='amarillo med' style='color:#C00;'>Delete Section </label>
<input type='checkbox' name='delete[$row['id']]' />
<input type='hidden' name='id[$row['id']]' value='" . $row['about_id'] . "' />
</td></tr>

删除节

其中,$row['id']是行的id

也包括您的表单。所有适用的内容。问题在于
id[]
返回的内容。。包括您如何为
id
生成值,我已更新以包含表单的相关部分。作为基本安全措施,在修改数据时使用$\u POST而不是$\u GET或$\u REQUEST;这使得CSRF攻击更加困难。看,我不建议把任何建议解释得如此字面。使用$\u GET或$\u POST甚至$\u请求必须基于应用程序的要求。我们应该用另一种方法来解决CSRF问题。这只是一个例子,HTTP规范建议不要使用GET来修改数据(),因此除了使CSRF漏洞更难被利用外,这也是一个很好的做法。你是对的,这是不够的,但它极大地增加了利用的难度。我可以将此与$\u POST和$\u请求一起使用,它看起来很有魅力。非常感谢你!我感谢你的帮助。如果我这样做了,我将如何构建我的循环?
<tr><td valign='top'>
<label class='amarillo med' style='color:#C00;'>Delete Section </label>
<input type='checkbox' name='delete[$row['id']]' />
<input type='hidden' name='id[$row['id']]' value='" . $row['about_id'] . "' />
</td></tr>