如何解决使用一个查询从自动生成的表单中的值更新mysql表
我使用$ 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();
}
解决方法
您可以为 mutliple 输入赋予相同的名称,并使用[]
,以便可以使用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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。