我有这个代码允许用户输入孩子的年龄和性别,然后将他们插入到数据库中。当我回显变量时。我可以从user获取所有值,因为user可以输入多个子项。但是,当我想要插入到DB中时,它将只插入最后一个子项的数据
例如:如果用户对年龄为3性别M的两个孩子和第二个年龄为5性别F的孩子感兴趣,则仅插入第二个值
$age=$_POST['age'];
$gender=$_POST['gender'];
for($i=0;$i<count($gender);$i++)
{
if($age[$i]!="" && $gender[$i]!="")
{
echo $age[$i];
echo $gender[$i];
$query = "INSERT INTO `children`(`age` , `gender`)VALUES('$age[$i]' , '$gender[$i]')";
}
}
$result = mysqli_query($connection, $query);
//echo $result;
echo "<pre>";
if (!$result)
{
die("Query Faile". mysqli_errno($connection));
}
发布于 2018-06-09 21:43:04
在for
循环完成之后,您只需执行一次查询。将执行转移到循环中。这与准备好的语句很好地配合使用,这也将提高程序的安全性:
$stmt =
mysqli_prepare($connection, "INSERT INTO `children` (`age`, `gender`) VALUES (?, ?)");
for($i = 0; $i < count($gender); $i++)
{
if($age[$i]!="" && $gender[$i]!="")
{
mysqli_stmt_bind_param($stmt, "ds", $age[$i], $gender[i]);
mysqli_stmt_execute($stmt);
}
}
发布于 2018-06-09 21:52:27
像这样修改你的代码
**
$stmt =
mysqli_prepare($connection, "INSERT INTO `children` (`age`, `gender`) VALUES (?, ?");
$res = false;
$count = 0;
for($i = 0; $i < count($gender); $i++)
{
if($age[$i] != "" && $gender[$i] != "")
{
mysqli_stmt_bind_param($stmt, "ds", $age[$i], $gender[i]);
if(mysqli_stmt_execute($stmt)){
++$count;
$res= true;
}
}
}
if(!$res){
echo "Failed after ".$count." Data added";
}else{
echo "Job Done";
}
**
https://stackoverflow.com/questions/50774853
复制相似问题