jquery — получает сериализованные данные в php, отправленные через ajax, и проходит через них

Я отправляю данные формы через вызов ajax в скрипт php. Я сериализую данные в ajax и на php-скрипте, который я хочу перебрать, чтобы извлечь значения.
Это мой вызов ajax

$("#submitAttendance").click(function(){
var data = $('form#attendanceForm').serialize();
$.ajax({
url: 'save-attendance.php',
method: 'post',
data: {formData: data},
success: function(data){
console.log(data);
alert(data);
}
});
});

и в attendance.php я делаю

print_r(($_POST['formData']));//prints the entire serialize data

когда я делаю это

parse_str($_POST['formData'], $searcharray);

print_r(($searcharray));//prints only last user and all radio buttons

Я хочу извлечь значения, чтобы я мог сохранить его в БД.
Это моя форма

<form action="" id="attendanceForm">
<?php
if(mysqli_num_rows($result)>0){
while($row = $result->fetch_assoc()){ ?>
<tr>
<input type="hidden" value="<?php echo($row['id']);?>">
<td><input type="text" name="name" value="<?php echo $row['fullname'];?>" readonly></td>
<td><input type="text" name="email" value="<?php echo $row['email'];?>" readonly</td>
<td><input type="text" name="class" value="<?php echo $row['class'];?>" readonly</td>
<td><input type="radio" value="present" name="<?php echo($row['id']); ?>" checked></td>
<td><input type="radio" value="absent" name="<?php echo($row['id']); ?>"></td>
</tr>


<?php }
}
?>
<input id="submitAttendance" type="button" class="btn btn-success" value="Submit Attendance" name="submitAttendance">
</form>

0

Решение

Вам нужно переименовать ваши элементы, чтобы иметь возможность публиковать массивы (то есть называть их «что угодно» + «[]» и перебирать их в PHP), например:

HTML:

<form action="" id="attendanceForm">
<?php
if(mysqli_num_rows($result)>0){
while($row = $result->fetch_assoc()){ ?>
<tr>
<input type="hidden" value="<?php echo($row['id']);?>">
<td><input type="text" name="name[]" value="<?php echo $row['fullname'];?>" readonly></td>
<td><input type="text" name="email[]" value="<?php echo $row['email'];?>" readonly</td>
<td><input type="text" name="class[]" value="<?php echo $row['class'];?>" readonly</td>
<td><input type="radio" value="present" name="<?php echo($row['id']); ?>" checked></td>
<td><input type="radio" value="absent" name="<?php echo($row['id']); ?>"></td>
</tr>


<?php }
}
?>
<input id="submitAttendance" type="button" class="btn btn-success" value="Submit Attendance" name="submitAttendance">
</form>

Позже в PHP:

foreach ($_POST["formData"]["name"] as $name)
echo "Wow, $name is a really pretty name!";

Кроме того, я не уверен, что present а также absent предназначены для того, чтобы делать и почему они должны иметь одинаковое имя (идентификатор). Вы уже публикуете идентификатор как скрытое поле, почему это должно быть сделано дважды? Один переопределяет другой (так как имена должны быть уникальными).

1

Другие решения

В дополнение к ответу @Jan я сделал следующее, чтобы получить полные данные и просмотреть их

разбирать входящие данные

parse_str($_POST['formData'], $searcharray);

затем перебрать массив

for ($i = 0 ; $i <= sizeof($searcharray) ; $i++){
$name = $searcharray['name'][$i];
$email=   $searcharray['email'][$i];
$class =  $searcharray['class'][$i];
$present=  ($searcharray['present'][$i]);
}

и мой код формы

<form action="" id="attendanceForm">
<?php
if(mysqli_num_rows($result)>0){
$i=0;
while($row = $result->fetch_assoc()){

?>
<tr>
<input type="hidden" value="<?php echo($row['id']);?>">
<td><input type="text" name="name[]" value="<?php echo $row['fullname'];?>" readonly></td>
<td><input type="text" name="email[]" value="<?php echo $row['email'];?>" readonly</td>
<td><input type="text" name="class[]" value="<?php echo $row['class'];?>" readonly</td>
<td><input type="radio" value="present" name="present[<?php echo $i; ?>]" checked></td>
<td><input type="radio" value="absent" name="present[<?php echo $i; ?>]"></td>
</tr>


<?php $i++;
}
}
?>
<input id="submitAttendance" type="button" class="btn btn-success" value="Submit Attendance" name="submitAttendance">
</form>
0

По вопросам рекламы [email protected]