简介:
基于查询,我有多个动态生成的复选框。每个复选框的值都是查询行中的一个字符串;
表单提交后,将运行另一个脚本(del.php)。此脚本获取检查过的复选框数组,并循环这些复选框,以便运行另外两个查询,即delete和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());
}我仍然不知道为什么其他方式不工作,所以如果有人有机会解释,这将是太棒了!
发布于 2012-01-24 16:22:52
如果在for循环中添加一些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());
}发布于 2012-01-24 16:09:28
尝试保护自己不受SQL注入:http://php.net/manual/en/security.database.sql-injection.php,您能不能输出准确生成的SQL查询,这可能是因为SQL字符串没有转义。
尝试用mysql_real_escape_string()转义它;
https://stackoverflow.com/questions/8990019
复制相似问题