Can';t使用php从html多选项表单插入mysql

Can';t使用php从html多选项表单插入mysql,php,html,mysql,option,Php,Html,Mysql,Option,我对这个很陌生,如果这是一个很简单的问题,我很抱歉。当我尝试使用多选项html表单插入mysql时,它只会插入从下拉列表中选择的最后一个选项,但会多次插入该选项 HTML 苹果 橘子 香蕉 葡萄 草莓 ` 这里是PHP <?php foreach ($_POST["fruit"] as $favourite) { $sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) VALUES ('$favo

我对这个很陌生,如果这是一个很简单的问题,我很抱歉。当我尝试使用多选项html表单插入mysql时,它只会插入从下拉列表中选择的最后一个选项,但会多次插入该选项

HTML


苹果
橘子
香蕉
葡萄
草莓


`
这里是PHP

<?php

foreach ($_POST["fruit"] as $favourite)
{
    $sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) VALUES ('$favourite','$favourite','$favourite', '$favourite');";
}

if ($conn->multi_query($sql) === TRUE)  {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>"  .  $conn->error;
}

$conn->close();
?>

在名称周围添加引号

由此:

<select name=fruit[] size="8" multiple>

为此:

<select name="fruit[]" size="8" multiple>

我发现了你的问题! 因此,实际上您正在使用
foreach
多次设置
$sql
,而只执行最后一个

就这样,

foreach ($_POST["fruit"] as $favourite)
{
$sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) 
 VALUES ('$favourite','$favourite','$favourite', '$favourite');";
}
这是完整的工作代码

<?php

foreach ($_POST["fruit"] as $favourite)
{
$sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) 
 VALUES ('$favourite','$favourite','$favourite', '$favourite');";

if ($conn->query($sql) === TRUE)  {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>"  .  $conn->error;
}
}

$conn->close();
?>

您需要在循环中运行查询或连接查询以运行一次,当前您在循环中覆盖$sql,这就是为什么您只得到最后一个警告:您对参数化查询非常开放,应该使用参数化查询,而不是像这样手动构建查询。特别是因为你根本没有逃避用户的输入!这在使用多重查询时尤为重要,因为任何人都会传递一个完整的SQL语句,该语句会擦除整个数据库。查询看起来也很奇怪。您正在为每个水果添加新行,并将所有列设置为相同的值?当您有一个查询时,绝对没有理由在此处使用
multi\u query
。这样的模式显然违反了。如果可能的话,试着将其重新构造成一对多的关系结构,因为一旦插入数据,您的数据将更容易处理。实际上,它也可以在没有引号的情况下工作。OP还说,只插入了最后一个选中的项,这意味着表单确实正确地发布了它,问题出在PHP代码中。仍然无缘无故地使用
multi_query
,现在有一个SQL注入孔,而不是一个破洞。“工作”的意思是“按本书”,而不是“可能在非常狭窄的环境下工作,并产生副作用,可能包括失去对数据库和/或公司的控制”。此代码甚至不能解决问题,它现在插入N条记录,每件事检查一条,所有记录都填充了所有列。
<?php

foreach ($_POST["fruit"] as $favourite)
{
$sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) 
 VALUES ('$favourite','$favourite','$favourite', '$favourite');";

if ($conn->query($sql) === TRUE)  {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>"  .  $conn->error;
}
}

$conn->close();
?>