首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/MySQL中的多个动态生成的复选框

PHP/MySQL中的多个动态生成的复选框
EN

Stack Overflow用户
提问于 2009-06-25 17:21:10
回答 3查看 2.7K关注 0票数 0

我有一系列来自一个MySQL表的复选框:

代码语言:javascript
复制
<?php
    $result = mysql_query("SELECT * FROM strategies");
    if (!$result) {
    die("Database query failed: " . mysql_error());
    }
while($row = mysql_fetch_array($result)) {
    $strategylist = $row['name'];
    $strategyname = htmlspecialchars($row['name']);
    echo '<input type="checkbox" name="strategy[]" value="' . $strategylist . '" />' . $strategyname;
}
?>

我希望能够将多个“策略”存储到"studies“表中的每一行,因此我采用了另一个表(sslink)来存储研究的id和策略的名称。这在一定程度上是因为将会有越来越多的“策略”,因此它们需要存储在数据库中。这是我目前使用的代码:

代码语言:javascript
复制
<?php   



if(isset($_POST['update1']))
{
  $strategy=serialize($_POST['strategy']); //line 66, where the warning is happening

   if(!get_magic_quotes_gpc())
   {
      $strategy = addslashes($strategy);
   }

   // update the article in the database
   $query ="INSERT INTO sslink('study_id', 'strategyname') VALUES ('".$_GET['id']. "', '" .$strategy. "')";

   mysql_query($query) or die('Error : ' . mysql_error());

   $cacheDir = dirname(__FILE__) . '/cache/';

   $cacheFile = $cacheDir . '_' . $_GET['id'] . '.html';

   @unlink($cacheFile);

   @unlink($cacheDir . 'index.html');

   echo "<b>Article '$title' updated</b>";

      $strategy = stripslashes($strategy);
}


?>

下面是返回的错误:

注意:未定义的索引: /casestudyform.php中的策略第66行错误:您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解正确的语法,以便在第1行使用接近''study_id',‘strategy index’)的值('1',‘N;’)

有人知道怎么解决这个问题吗?或者是更好的方法呢?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2009-06-25 17:29:15

试试这个:

代码语言:javascript
复制
$query ="INSERT INTO sslink (study_id, strategyname) VALUES ('".$_GET['id']. "', '" .$strategy. "')";
票数 1
EN

Stack Overflow用户

发布于 2009-06-25 17:30:33

未定义的索引表明未设置$_POST“‘strategy”。你可以做一个健全的检查,以确保你的表单有它吗?而且,回显一下实际的查询会更好。

票数 0
EN

Stack Overflow用户

发布于 2009-06-25 19:27:30

您有两个彼此无关的错误:

通知:未定义的索引:第66行的/casestudyform.php中的策略

也就是说,提交表单时没有选中任何策略复选框。在尝试引用该键之前,您应该测试它是否存在。

代码语言:javascript
复制
 if (array_key_exists('strategy', $_POST)) ...

错误:您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解要在第1行值('1',‘N;’)附近使用的正确语法

这是一个SQL解析错误。您已经将INSERT语句中的列用单引号括起来。在SQL中,单引号分隔字符串常量,而不是列名。

如果需要分隔列名(因为它们包含SQL关键字、空格、特殊字符等),则应该在MySQL中使用反引号,在ANSI SQL中使用双引号。

还要注意SQL注入。不要假设HTTP请求参数只包含整数或友好字符串。在SQL中使用这些值之前,对它们执行Filterescape操作。addslashes()函数不是一个很好的防止SQL注入的解决方案。

代码语言:javascript
复制
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$strategy_esc = mysql_real_escape_string($strategy);
$query ="INSERT INTO sslink(`study_id`, `strategyname`)
  VALUES ($id, '$strategy_esc')";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1045160

复制
相关文章

相似问题

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