首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除和更新不使用多个复选框的语句

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

Stack Overflow用户
提问于 2012-01-24 16:06:18
回答 2查看 959关注 0票数 1

简介:

基于查询,我有多个动态生成的复选框。每个复选框的值都是查询行中的一个字符串;

表单提交后,将运行另一个脚本(del.php)。此脚本获取检查过的复选框数组,并循环这些复选框,以便运行另外两个查询,即delete和update查询。

它们不起作用!如果我尝试插入查询,它可以正常工作。但是删除和更新没有。

这是我的代码:

index.php:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
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值,而不是将字符串作为值传递给表单中的复选框。

以下是新代码:

代码语言:javascript
复制
<?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++;
}
?>

和删除查询:

代码语言:javascript
复制
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());
}

我仍然不知道为什么其他方式不工作,所以如果有人有机会解释,这将是太棒了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-24 16:22:52

如果在for循环中添加一些echo语句并注释掉查询,您将能够看到确切地发送到mysql的内容,然后您将能够更好地解决您的问题。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-01-24 16:09:28

尝试保护自己不受SQL注入:http://php.net/manual/en/security.database.sql-injection.php,您能不能输出准确生成的SQL查询,这可能是因为SQL字符串没有转义。

尝试用mysql_real_escape_string()转义它;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8990019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档