使用一次查询更新 mysql table 自动生成的表单中的值
Update mysql table with one query the values from an automated generated form
我使用 $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();
}
您可以为 多个 输入赋予相同的名称并使用 []
以便使用 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();
}
我使用 $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();
}
您可以为 多个 输入赋予相同的名称并使用 []
以便使用 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();
}