我有一系列复选框来自一个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;
}
?>
我希望能够在“研究”表的每一行存储多个“策略”,因此我使用另一个表(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);
}
?>
这是返回的错误:
注意:未定义的索引:第66行的/casestudyform.php中的策略 错误:SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在''study_id','strategyname'附近使用正确的语法。)第1行的VALUES('1','N;')'
有谁知道如何解决这个问题?还是更好的方法呢?
提前致谢!
答案 0 :(得分:1)
试试这个:
$query ="INSERT INTO sslink (study_id, strategyname) VALUES ('".$_GET['id']. "', '" .$strategy. "')";
答案 1 :(得分:0)
未定义的索引表明未设置$ _POST ['strategy']。你可以做一个完整性检查你的表格吗?此外,实际查询的回声会很好。
答案 2 :(得分:0)
您有两个彼此无关的错误:
注意:未定义的索引:第66行/casestudyform.php中的策略
正如@montooner所指出的,此通知来自PHP,因为$_POST
数组不包含'strategy'
键的值。也就是说,表单已提交,未选中策略复选框。在尝试引用密钥之前,您应该测试密钥是否存在。
if (array_key_exists('strategy', $_POST)) ...
错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在''study_id','strategyname'附近使用正确的语法。)第1行的VALUES('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')";