Проблемы с использованием JSON для получения данных из базы данных PHP - PullRequest
0 голосов
/ 17 июня 2020

Я делаю эту систему базы данных гарантии на продукт как небольшой обучающий проект в качестве новой веб-разработки. У меня много проблем с одним из последних больших инструментов, которые я хотел бы иметь. Это кнопка в каждой строке, при нажатии на которую открывается модальное всплывающее окно и текстовое поле с исходным комментарием, установленным в качестве значения. Когда пользователь завершает добавление или изменение комментария, нажимается другая кнопка, и она обновляется (я уверен в этой части).

Эта проблема связана с получением фактического комментария. Я использую аналогичный проект, найденный в Интернете, в качестве руководства. Они использовали JSON для вызова функции php для извлечения данных и установки значений текстового поля для данных. Я попробовал этот подход, и ничего не помогло. Я попытался изменить код, почитать подробнее о JSON, поигрался с другими проектами, и это не сработало. Я также попытался использовать метод onclick и передать параметры на фактической стороне кнопки, но это тоже не сработало. И когда я имею в виду, что это не сработало, я имею в виду, что в журнале консоли было 0 ошибок, поэтому я не уверен, где искать исправления.

Я заставил функцию работать при удалении типа данных: ' JSON ', но поле никогда не было установлено на значение.

Вот несколько блоков кода для справки. Да, это беспорядочно, и да, я знаю, что он подвержен атакам на переходы.

В таблице php файл для создания кнопки для каждого продукта.

if ($row['WarrStatus'] == 'ACTIVE') {
    echo '<td><button type="button" class="deleteRow" id="'.$id.'" >Delete</button></td>
          <td><button type="button" class="updateRow" id="'.$id.'" >Update</button></td>
          <td><button type="button" class="resolveRow" id="'.$id.'" >Resolve</button></td>';
}

Это - это функция js при нажатии кнопки updateRow , выполняется

$(".updateRow").click(function() {
    var item_id = $(this).attr("id");  

    $.ajax({  
            url:"Actions/fetch.php",  
            method:"POST",  
            data:{item_id:item_id},  
            dataType:"json",  

            success: function(data) {   
                document.getElementById("CommentBox") = data.comments //Comments = the data retrieved
                 modal.style.display = "block"; //Display the modal 
            }  
       });  
  });

Это выборка. php для получения данных json.

if(isset($_POST["item_id"])) {  
      $query = "SELECT comment FROM inspection.product WHERE TransactionID = '".$_POST["item_id"]."'";  
      $result = mysqli_query($conn, $query);  
      $row = mysqli_fetch_array($result);  
      echo json_encode($row); 
 }  
 ?>

и, наконец, это модально.

<div id="myModal" class="modal" 
    <div class="modal-content" 
    <span class="close">&times;</span>
    <h2>Update a Comment</h2>
    <p id="CustDetails">You are now editing ...</p>
    <form method="POST">
        <input type ="text" class="CommentBox" id="CommentBox" value=""></input>
        <button class="updateCommentbtn" id="updateCommentbtn" value="">Update</button>
    </form>
    </div>
</div>

Вот что отображается

Таблица для пользователя

Подводя итог, моя проблема заключается в том, что при нажатии кнопки «Обновить» данные не извлекаются с помощью JSON или любых других методов, и я не уверен, почему это так. Любая помощь будет оценена!

Ответы [ 2 ]

3 голосов
/ 17 июня 2020

Ваша проблема связана с этой строкой в ​​вашей Javascript функции успеха

document.getElementById("CommentBox") = data.comments

Измените это на:

document.getElementById("CommentBox").value  = data.comments
2 голосов
/ 17 июня 2020

Здесь есть по крайней мере несколько проблем.

  1. PHP не будет неявно анализировать JSON в суперглобальном POST. Это будет работать только для данных формы (вы можете изменить свой запрос AJAX на передачу данных формы или обновить свой PHP для анализа JSON). Это означает, что ваша проверка isset($_POST["item_id"]) всегда будет возвращать false.
  2. В обработчике успеха для запроса AJAX вы присваиваете строковое значение элементу DOM. Скорее всего, это не то, что вам нужно. Вероятно, вы захотите установить innerHtml элемента. Поскольку вы имеете дело (предположительно) с текстом и уже используете jQuery, просто введите $("#CommentBox").text(data.comments);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...