Reputation: 229
I have this code allow user to enter age and gender of children and then insert them to DB. when I echo the variables. I can get all values from user because user can enter more than one child. However, when I want to insert into DB, it will insert only the data of last children
e.g.: if user inter two children one with age: 3 gender M and second age 5 gender F, the second values only will be inserted
$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));
}
Upvotes: 1
Views: 119
Reputation: 311348
You execute the query once, after the for
loop is done. Move the execution into the loop. This works well with a prepared statement, which will also improve your program's security:
$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);
}
}
Upvotes: 3
Reputation: 1
Change your code like this
**
$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";
}
**
Upvotes: 0