通过一个查询自动生成的表单中的值来更新mysql表

Update mysql table with one query the values from an automated generated form

提问人:Florin 提问时间:8/30/2020 最后编辑:Arghya SadhuFlorin 更新时间:8/30/2020 访问量:58

问:

我使用 $i++ 在 WHILE 中自动生成以下表单。

<form method="POST" id="form" >
<input type="text" name="id1" value="1"  />
<input type="text" name="q1" value="5"  />
<input type="text" name="a1" value="p" />

<input type="text" name="id2" value="4"  />
<input type="text" name="q2" value="3"  />
<input type="text" name="a2" value="t" />

<input type="text" name="id3" value="8"  />
<input type="text" name="q3" value="7" />
<input type="text" name="a3" value="z" />

.....................

</form>

我使用以下命令将值插入mysql:

$id1=$_POST['id1'];
$q1=$_POST['q1'];
$a1=$_POST['a1'];

$query = "UPDATE table SET answer = '$a1' WHERE question = '$q1' and id= '$id1'";
mysqli_query($con,$query) or die(mysqli_error());

$id2=$_POST['id2'];
$q2=$_POST['q2'];
$a2=$_POST['a2'];

$query = "UPDATE table SET answer = '$a2' WHERE question = '$q2' and id= '$id2'";
mysqli_query($con,$query) or die(mysqli_error());

$id3=$_POST['id3'];
$q3=$_POST['q3'];
$a3=$_POST['a3'];

$query = "UPDATE table SET answer = '$a3' WHERE question = '$q3' and id= '$id3'";
mysqli_query($con,$query) or die(mysqli_error());

..........................

它工作得很好,但是我怎么能只用一个查询和 WHILE 或 foreach 插入值? 我试着这样做,但有些不对劲:

$stmt = $this->mysqli->prepare("UPDATE table SET answer=? WHERE question=? and id =?");
    foreach ($_POST['id'] as $i => $n){
            $stmt->bind_param("sss", $n, $_POST['question'][$i], $_POST['answer'][$i], $id);
            $stmt->execute();
        }
php jquery mysqli foreach while循环

评论

1赞 Dharman 8/30/2020
警告:您对 SQL 注入持开放态度,并且应该使用参数化的预准备语句,而不是手动构建查询。它们由 PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,您仍然面临数据损坏的风险逃跑是不够的!

答:

1赞 Swati 8/30/2020 #1

您可以为多个输入指定相同的名称,并使用 0,1..etc 访问它。因此,您的表单将如下所示:[]

<form method="POST" id="form" >
<input type="text" name="id[]" value="1"  />
<input type="text" name="question[]" value="5"  />
<input type="text" name="answer[]" value="p" />

<input type="text" name="id[]" value="4"  />
<input type="text" name="question[]" value="3"  />
<input type="text" name="answer[]" value="t" />

.....................

</form>

然后在您的 php 页面中访问相同的内容,如下所示:

 $id= isset($_POST['id']) ? $_POST['id'] : "" ;//get post datas
 $question= isset($_POST['question']) ? $_POST['question'] : "" ;
 $answer= isset($_POST['answer']) ? $_POST['answer'] : "" ;
 $stmt = $this->mysqli->prepare("UPDATE table SET answer=? WHERE question=? and id =?");
  //loop through ids 
   foreach ($id as $key=>$value){
   //answer[0],answer[1]..
         $stmt->bind_param("sss", $answer[$key], $question[$key], $value);
         $stmt->execute();
  }

评论

0赞 Florin 8/30/2020
问题是我正在使用 AJAX 更新表,但它不起作用。谢谢。
0赞 Swati 8/31/2020
您的表格是如何提交的?什么在这里不起作用..?你能详细说明一下吗?