php mysql中数据输入错误

时间:2017-01-06 11:01:03

标签: php html mysql

我在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&agrave; <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>";
?>

1 个答案:

答案 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