我有一系列来自一个MySQL表的复选框:
<?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和策略的名称。这在一定程度上是因为将会有越来越多的“策略”,因此它们需要存储在数据库中。这是我目前使用的代码:
<?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;’)
有人知道怎么解决这个问题吗?或者是更好的方法呢?
提前感谢!
发布于 2009-06-25 17:29:15
试试这个:
$query ="INSERT INTO sslink (study_id, strategyname) VALUES ('".$_GET['id']. "', '" .$strategy. "')";发布于 2009-06-25 17:30:33
未定义的索引表明未设置$_POST“‘strategy”。你可以做一个健全的检查,以确保你的表单有它吗?而且,回显一下实际的查询会更好。
发布于 2009-06-25 19:27:30
您有两个彼此无关的错误:
通知:未定义的索引:第66行的/casestudyform.php中的策略
也就是说,提交表单时没有选中任何策略复选框。在尝试引用该键之前,您应该测试它是否存在。
if (array_key_exists('strategy', $_POST)) ...错误:您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解要在第1行值('1',‘N;’)附近使用的正确语法
这是一个SQL解析错误。您已经将INSERT语句中的列用单引号括起来。在SQL中,单引号分隔字符串常量,而不是列名。
如果需要分隔列名(因为它们包含SQL关键字、空格、特殊字符等),则应该在MySQL中使用反引号,在ANSI SQL中使用双引号。
还要注意SQL注入。不要假设HTTP请求参数只包含整数或友好字符串。在SQL中使用这些值之前,对它们执行Filter或escape操作。addslashes()函数不是一个很好的防止SQL注入的解决方案。
$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')";https://stackoverflow.com/questions/1045160
复制相似问题