简介:
根据查询,我有多个动态生成的复选框。每个复选框的值是来自查询行之一的字符串;
表单提交后,运行另一个脚本(del.php)。此脚本获取已检查的复选框数组并循环遍历它们,以便它可以运行另外两个查询,即删除和更新查询。
他们不工作!如果我尝试INSERT查询,它工作正常。但DELETE AND UPDATE不会。
这是我的代码:
的index.php:
<?php
$gettips = mysql_query('SELECT body FROM tips WHERE body!="" and approved!="yes" and approved!="no"')or die(mysql_error());
$i=0;
while($tips = mysql_fetch_array($gettips))
{ ?>
<input type="checkbox" name="checkboxes[]" value="<?php print $tips[0] ?>" />
<input type="checkbox" name="checkboxesno[]" value="<?php print $tips[0] ?>" />
<a class="names"> - <span><?php print $tips[0] ?></span></a><br />
<? $i++;
}
?>
和del.php:
foreach($_POST['checkboxes'] as $check) {
mysql_query("INSERT INTO approved (body) VALUES ('$check') ");
mysql_query("UPDATE tips SET approved='yes' WHERE body='$check'");
}
foreach($_POST['checkboxesno'] as $key) {
mysql_query("DELETE FROM tips WHERE body='$key' ")or die(mysql_error());
}
mysql_error()
不会抛出任何错误。数据库连接适用于两个文件。复选框的值是字符串。我可以通过将字符串本身而不是POST $variable
添加到查询中来删除记录。
(我也注意到我无法删除旧记录,只删除新添加的记录。)
更新:
我意识到尝试删除row='string'
不是最佳做法的记录,至少在我的情况下。因此,我没有将字符串作为值传递给表单中的复选框,而是决定给出表的id值。
这是新代码:
<?php
$gettips = mysql_query('SELECT id,body FROM tips WHERE body!="" and approved!="yes" and approved!="no"')or die(mysql_error());
$i=0;
while($tips = mysql_fetch_array($gettips))
{ ?>
<input type="checkbox" name="checkboxes[]" value="<?php print $tips[0] ?>" />
<input type="checkbox" name="checkboxesno[]" value="<?php print $tips[0] ?>" />
<a class="names"> - <span><?php print $tips[1] ?></span></a><br />
<? $i++;
}
?>
和删除查询:
foreach($_POST['checkboxes'] as $check) {
// echo "INSERT INTO approved (body) VALUES ('$check') <br>";
// echo "UPDATE tips SET approved='yes' WHERE body='$check'<br>";
mysql_query("INSERT INTO approved (body) VALUES ('$check') ");
mysql_query("UPDATE tips SET approved='yes' WHERE body='$check'");
}
foreach($_POST['checkboxesno'] as $key) {
// echo "DELETE FROM tips WHERE id=$key <br>";
mysql_query("UPDATE tips SET approved='no' WHERE id=$key");
mysql_query("DELETE FROM tips WHERE id=$key ")or die(mysql_error());
}
我仍然不知道为什么其他方式不起作用,所以如果有人有机会解释,那就太棒了!
答案 0 :(得分:1)
如果你向你的forloops添加一些echo语句并注释掉查询,你将能够看到究竟是什么发送到mysql,然后你将能够更好地解决你的问题。
foreach($_POST['checkboxes'] as $check) {
echo "INSERT INTO approved (body) VALUES ('$check') <br>";
echo "UPDATE tips SET approved='yes' WHERE body='$check'<br>";
//mysql_query("INSERT INTO approved (body) VALUES ('$check') ");
//mysql_query("UPDATE tips SET approved='yes' WHERE body='$check'");
}
foreach($_POST['checkboxesno'] as $key) {
echo "DELETE FROM tips WHERE body='$key' <br>";
//mysql_query("DELETE FROM tips WHERE body='$key' ")or die(mysql_error());
}
答案 1 :(得分:0)
尝试并保护自己免受SQL注入:http://php.net/manual/en/security.database.sql-injection.php,是否可以输出确切生成的SQL查询,这可能是因为SQL字符串未被转义。
尝试使用mysql_real_escape_string();
转义它