Я пытаюсь создать систему посещаемости студентов.
- Я успешно реализовал таблицу вида спереди, в которой будут отображаться все даты, для которых были сделаны записи посещаемости.
- Я также успешно реализовал функцию «Добавить посещаемость», в которой новая запись посещаемости берется для студентов класса
Теперь я пытаюсь создать функцию «Редактировать запись посещаемости» для каждого ряда. То есть для каждой указанной c даты учитель сможет редактировать записи о посещаемости студентов ... Мне удалось получить данные (которые в настоящее время хранятся) из базы данных студентов на «выбранную» дату и он также отлично отображает данные ...
Просто чтобы дать представление, вот модальный, который я использую для редактирования посещаемости.
<div id = "edit_attendance_model" class = "modal fade">
<div class="modal-dialog mw-100 w-75">
<form action="post" id = "edit_attendance_form">
<div class = "modal-content">
<div class = "modal-header">
<h4 class = "modal-title">Edit Attendance Record</h4>
<button type = "button" class = "close" data-dismiss="modal">×</button>
</div>
<div class = "modal-body">
<div class ="form-group">
<div class = "row">
<label class = "col-md-4 text-right">Attendance Date</label>
<div class = "col-md-8">
<input readonly = "true" type="date" name = "edit_attendance_date" id = "edit_attendance_date" class = "form-control" />
<span id = "error_edit_attendance_date" class = "text-danger"></span>
</div>
</div>
</div>
<div class = "form-group" id = "edit_student_details">
<div class = "table-responsive">
<table id = "edit-table" class = "table table-striped table-bordered">
<thead>
<tr>
<th>Roll Number</th>
<th>Student Name</th>
<th>Attendance Status</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<div class = "modal-footer">
<input type="submit" name = "edit_attendance_submit" id = "edit_attendance_submit" class = "btn btn-success" value = "Update Attendance" />
<button type = "button" class = "btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</form>
</div>
</div>
Вот код Jquery, который берет данные (в настоящее время хранятся) из базы данных и показывает их в модальном окне.
$(document).on('click', '.edit_attendance_record', function(e){
var attendance_id = $(this).attr('id');
$.ajax({
url: "attendance_action.php",
method: "POST",
data: {attendance_id:attendance_id, action: "edit-form"},
dataType: 'json',
success: function(data)
{
$("#edit_attendance_date").val(attendance_id); // Here I assign value to attendance_date
$.each(data, function(index, value){
$("edit-table tbody").append('<input type="hidden" name = "student_id[]" value = "'+ value[0] +'">');
$("#edit-table tbody").append('<tr><td>' + value[3] + '</td><td>' + value[2] + '</td><td>' + value[1] + '</td></tr>');
});
$("#edit_attendance_model").modal('show');
}
});
});
Вот код PHP,
if (isset($_POST['action']) && $_POST['action'] == "edit-form")
{
$attendance_id = $_POST["attendance_id"];
$data = $db->get_attendance_date_record($attendance_id, $id);
echo json_encode($data);
}
И это мой код базы данных, чтобы получить данные из базы данных, используя SQL
public function get_attendance_date_record($att_date, $teacher_id)
{
$data = array();
$sql = "select a.student_id, (select name from tbl_student s where s.id = a.student_id) as name, (select username from tbl_student z where z.id = a.student_id) as username, status from junc_attendance a where att_date = :att_date and classroom_id = (select id from tbl_classroom where teacher_id = :teacher_id)";
$stmt = $this->conn->prepare($sql);
$stmt->execute(['att_date'=>$att_date, 'teacher_id'=>$teacher_id]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$number = 1;
foreach($result as $row)
{
$sub_array = array();
$sub_array[] = $row["student_id"];
if ($row["status"] == "Present")
{
$sub_array[] = '<input type="radio" name = "edit_attendance_status'.$row["student_id"].'" checked value = "Present" /><label for="Present">Present</label><input type="radio" name = "edit_attendance_status'.$row["student_id"].'" value = "Absent" /><label for="Absent">Absent</label><input type="radio" name = "edit_attendance_status'.$row["student_id"].'" value = "Leave" /><label for="Leave">Leave</label>';
}
if ($row["status"] == "Absent")
$sub_array[] = '<input type="radio" name = "edit_attendance_status<'.$row["student_id"].'" value = "Present" /><label for="Present">Present</label><input type="radio" name = "edit_attendance_status'.$row["student_id"].'" checked value = "Absent" /><label for="Absent">Absent</label><input type="radio" name = "edit_attendance_status'.$row["student_id"].'" value = "Leave" /><label for="Leave">Leave</label>';
if ($row["status"] == "Leave")
$sub_array[] = '<input type="radio" name = "edit_attendance_status'.$row["student_id"].'" value = "Present" /><label for="Present">Present</label><input type="radio" name = "edit_attendance_status'.$row["student_id"].'" value = "Absent" /><label for="Absent">Absent</label><input type="radio" name = "edit_attendance_status'.$row["student_id"].'" checked value = "Leave" /><label for="Leave">Leave</label>';
$sub_array[] = $row["name"];
$sub_array[] = $row["username"];
$data[] = $sub_array;
}
return $data;
}
Однако проблема возникает, когда я пытаюсь реализовать кнопку «Обновить посещаемость», которая должна отправить запись и обновить ее в базе данных. Я реализовал обновление посещаемости точно так же, как добавление посещаемости. Добавление посещаемости работает, а обновление посещаемости - нет, и я не могу понять почему.
Ниже приведен код Jquery для кнопки отправки в режиме редактирования посещаемости. Обратите внимание, что я уже проверил значения «Дата», а также «данные формы», и они кажутся довольно правильными.
$("#edit_attendance_form").on('submit', function(event){
event.preventDefault();
//alert($("#edit_attendance_date").val()); -> I checked it up, and it gave perfect result.
//alert($(this).serialize()); -> This also gives correct results here.
$.ajax({
url:"attendance_action.php",
method: "POST",
data: $(this).serialize()+"&action=edit_attendance",
dataType: 'json',
beforeSend: function()
{
$("#edit_attendance_submit").val("Validating....");
$("#edit_attendance_submit").attr('disabled', true);
$att = ("edit_attendance_date").val();
alert(att);
},
success:function(data)
{
$("#add_attendance_submit").val("Update Attendance");
$("#add_attendance_submit").attr('disabled', false);
if (data.success)
{
$('#message_operation').html('<div class = "alert alert-success">'+data.success+'</div>');
$('#edit_attendance_modal').modal('hide');
table.ajax.reload();
}
if (data.error)
{
if (data.error_attendance_date != '')
$("#error_attendance_date").text(data.error_attendance_date);
else
$("#error_attendance_date").text('');
}
},
error: function(e)
{
alert("Failed to update attendnace record.");
$("#add_attendance_submit").val("Update Attendance");
$("#add_attendance_submit").attr('disabled', false);
}
});
});
Это результат, который я получил, когда распечатал результат $ (это) .serialize (). Это то, что я буду отправлять всякий раз, когда нажимается кнопка «Обновить посещаемость», кажется, все в порядке ..
$ (this) .serialize () результат Edit_Attendance_Modal
Проблема возникает здесь ... Ниже приведен мой код, который фиксирует результат из формы и затем выполняет с ним действие. Всякий раз, когда я пытаюсь добавить этот код в свой файл действий, моя страница не загружается и появляется сообщение INVALID JSON RESPONSE . Код выглядит следующим образом.
if (isset($_POST['action']) && $_POST['action'] = "edit_attendance")
{
$attendance_date = '';
$error_attendance_date = '';
$output = '';
$error = 0;
$attendance_date = $_POST['edit_attendance_date'];
$student_id = $_POST['student_id'];
for ($count = 0; $count < count($student_id); $count++)
{
$attendance_status = $_POST["edit_attendance_status".$student_id[$count].""];
$s_id = $student_id[$count];
$db->iupdate_attendance_table($s_id, $attendance_status, $attendance_date, $id); // Where $id is teacher id
}
$output = array(
'success' => 'Data Updated Successfully'
);
echo json_encode($output);
}
После добавления этого кода в файл моя страница даже не загружалась ... Не показывала бы даже первую таблицу, которая показывает все записи ... Он показывает ошибку «Invalid JSON Response», и это то, как выглядит ответ из файла действия,
{"data":[["Lecture 1","2020-07-07","Tuesday","1","Edit<\/a> Delete<\/a>"],["Lecture 2","2020-07-08","Wednesday","1","Edit<\/a> Delete<\/a>"],["Lecture 3","2020-08-02","Sunday","1","Edit<\/a> Delete<\/a>"],["Lecture 4","2020-08-04","Tuesday","1","Edit<\/a> Delete<\/a>"],["Lecture 5","2020-08-05","Wednesday","3","Edit<\/a> Delete<\/a>"],["Lecture 6","2020-08-06","Thursday","1","Edit<\/a> Delete<\/a>"],["Lecture 7","2020-08-13","Thursday","3","Edit<\/a> Delete<\/a>"],["Lecture 8","2020-08-15","Saturday","2","Edit<\/a> Delete<\/a>"]]}
Notice: Undefined index: edit_attendance_date в E: \ Softwares \ XAMP \ htdocs \ school \ Teacher \ Attentionance_action. php в строке 86
Notice: Undefined index: student_id in E:\Softwares\XAMP\htdocs\school\teacher\attendance_action.php on line 87
Warning: count(): Parameter must be an array or an object that implements Countable in E:\Softwares\XAMP\htdocs\school\teacher\attendance_action.php on line 88
{"success":"Data Updated Successfully"}
Первый ответ - это простые JSON возвращенные данные, которые должны быть напечатаны при загрузке страницы ... JSON данные в порядке (также протестированы на jsonlint.com), и они также работают, если я удалю приведенный выше код из файла действий ...
Следующие две строки, я не понимаю, почему ... Дата посещения то, что отправляется, нормально (как я тестировал), также студент_id тоже должен быть в порядке ... Последняя ошибка понятна, потому что student_id не читается должным образом. Может здесь кто-нибудь помочь?