我在html中有一个带有各种字段的表单,特别是select和textarea。通过按下按钮我创建了其他n选择和textarea(由键盘给出)。 然后我有一个php文件,将数据插入数据库。一切正常但没有正确插入textarea的数据(在文件中称为$ quantita)不接受所有顺序(对于sesmpio,如果我写1,2,5插入1,2,5)但只有一个值(如果我写的只需要1,2,5 1,1,1)。 HTML
<?php
$pro = 'sito';
$dd = mysqli_connect('localhost', 'root', '', $pro);
$re = mysqli_query ($dd,"SELECT Codice, Nome FROM prodotti");
echo"<div class='box'>";
echo"Prodotto";
echo"<select class='inse' name='po[]'>";
while($row=mysqli_fetch_array($re)){
echo"<option value=".$row['Codice'].">".$row['Nome']."</option>";
}
echo"</select>";
echo"<br>";
echo"Quantità <textarea name='qua[]' rows='1' cols='4'></textarea></div><br>";
?>
</div>
<br><button type="submit" id="ok">OK!</button><br>
</form>
PHP
<?php
$nordine = $_POST['nor'];
$datao = $_POST['dao'];
$datac = $_POST['dac'];
$quantita = $_POST['qua'];
$prodotto = $_POST['po'];
$data = 'sito';
$db = mysqli_connect('localhost', 'root', '', $data);
$result = mysqli_multi_query ($db, "INSERT INTO ordini
(Nordine,DataO,DataC)
VALUES('$nordine','$datao','$datac')");
if ($prodotto && $quantita){
foreach ($prodotto as $result1){
foreach ($quantita as $result2){
mysqli_query ($db, "INSERT INTO ordpro
(Prodotto, Ordini, Quantita)
VALUES('". mysqli_real_escape_string($db,$result1)."','$nordine','". mysqli_real_escape_string($db,$result2)."')");
}
}
}
echo"<p>Hai inserito un nuovo record <a href='ordini.php'> torna alla home </a></p>";
?>
答案 0 :(得分:0)
从我的HTML中我认为po[0]
应该与qua[0]
一起使用po[1]
应该与qua[1]
等一起使用
所以你的2个foreach循环做错了,并且每个qua
po
个
在POST或GET中使用用户提供的任何数据时,您还应该使用准备好的和paramterised语句。
使用预准备语句进行多次更新的另一个好处是,您可以准备一次并多次执行,从而减少到数据库的往返次数。此外,查询需要由MYSQL仅编译和优化一次,这使得它几乎就像使用存储过程一样。
注意:这也意味着您不再需要对用户数据使用
mysqli_real_escape_string()
。
所以循环应该像这样修改
$sql = "INSERT INTO ordpro (Prodotto, Ordini, Quantita) VALUES (?,?,?)";
$stmt = mysqli_prepare($db, $sql);
if ($prodotto && $quantita){
foreach ($prodotto as $idx => $prod){
$stmt->bind_param('sss', $prod, $nordine, $quantita[$idx]);
$stmt->execute();
}
}
注2我使用
sss
(字符串)作为所有3个变量的数据类型。您可能需要检查这是否正确并进行相应修改。可能需要将id字段更改为i