Неверный ответ JSON при попытке отправить данные из формы в файл действия - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь создать систему посещаемости студентов.

  1. Я успешно реализовал таблицу вида спереди, в которой будут отображаться все даты, для которых были сделаны записи посещаемости.
  2. Я также успешно реализовал функцию «Добавить посещаемость», в которой новая запись посещаемости берется для студентов класса

Теперь я пытаюсь создать функцию «Редактировать запись посещаемости» для каждого ряда. То есть для каждой указанной 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">&times;</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 не читается должным образом. Может здесь кто-нибудь помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...