我有这个代码允许用户输入孩子的年龄和性别,然后将它们插入到DB中。当我回应变量。我可以从用户获取所有值,因为用户可以输入多个孩子。但是,当我想插入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));
}
答案 0 :(得分:3)
在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);
}
}
答案 1 :(得分:0)
像这样更改你的代码
**
$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";
}
**