0

我很难将多个下拉菜单选项添加到 MySQL 数据库。我从freezecoders.com获得了以下代码

<html>
<body>
<form method="post" action="index.php">
Select your favourite game:<br/>
<select name="game[]" multiple="multiple">
<option>Football</option>
<option>Volleyball</option>
<option>Badminton</option>
<option>Cricket</option>
</select>
<input type="submit" name="submit">
</form>
</body>
</html>

<?php
if(isset($_POST['submit']))
{
$query=mysql_connect('localhost','root','');
mysql_select_db("freeze",$query);
$choice=mysql_real_escape_string($_POST['game']);
$choice1=implode(',',$choice);
mysql_query("insert into tb values('','$choice1')");
}

?>

当我运行此代码时,我不断收到mysql_real_escape_string()implode()函数相关的错误消息。

The error message are "Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in C:\WAMP\www\COSHH\test\index.php on line 8"

"Warning: implode() [function.implode]: Invalid arguments passed in C:\WAMP\www\COSHH\test\index.php on line 9" 

不幸的是,我没有使用这些功能的经验。有人可以指出我这里出了什么问题吗?我正在使用WAMP (PHP 5.3.8)Google Chrome (Version 24.0.1312.52)

4

1 回答 1

0

正如 Bart 所说,mysql_real_escape_string 适用于字符串,而不适用于数组。你$_POST['game']是一个数组的原因是因为你把它命名为game[]. 如果将名称更改为 ,则可以尝试使用一个值game

尽管我们希望代码可以使用多种选择。您可以像这样更改 PHP 代码:

<?php
if(isset($_POST['submit']))
{
    $query=mysql_connect('localhost','root','');
    mysql_select_db("freeze",$query);
    $choice = array();
    foreach($_POST['game'] as $game) {
        $choice[]=mysql_real_escape_string($game);
    }
    $choice1=implode(',',$choice);
    mysql_query("insert into tb values('','$choice1')");
}
?>

顺便问一下,你能告诉我们你的数据库结构是什么吗?将用户选择的所有值保存在一个单元格中,您似乎犯了一个大错误。它应该可以工作,但它不是在数据库中存储数据的好方法(它不符合任何数据库标准)。

编辑:

我还注意到有一种更简单的方法可以修复它(似乎编写代码的人放错了两行):

<?php
if(isset($_POST['submit']))
{
    $query=mysql_connect('localhost','root','');
    mysql_select_db("freeze",$query);
    $choice=implode(',',$_POST['game']);
    $choice1=mysql_real_escape_string($choice);
    mysql_query("insert into tb values('','$choice1')");
}
?>
于 2013-09-02T15:12:34.763 回答