删除和更新不使用多个复选框的语句

时间:2012-01-24 16:06:18

标签: php mysql sql-delete

简介:

根据查询,我有多个动态生成的复选框。每个复选框的值是来自查询行之一的字符串;

表单提交后,运行另一个脚本(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());
}

我仍然不知道为什么其他方式不起作用,所以如果有人有机会解释,那就太棒了!

2 个答案:

答案 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();

转义它