Код SQL не имеет ошибок, но не получает данные из базы данных

Я относительно новичок в PHP и SQL. Я работаю над небольшим веб-сайтом PHP, который должен содержать функцию чата. Теперь у меня есть таблица в моей базе данных, которая называется «дружеский чат». В нем пять столбцов: получатель, отправитель, сообщение, дата, идентификатор сообщения. Столбец даты относится к типу datetime, а идентификатор сообщения - A_I. Итак, теперь я написал следующие строки PHP, чтобы вставить сообщение в базу данных. Функция DB :: содержится в файле classes / DB.php. Этот метод получения и вставки данных работал у меня каждый раз, но теперь это не так:

    
<?php   
session_start();
include 'classes/DB.php'; 
if (isset($_POST['message-submit'])) { //activation of the send-button
    if (isset($_GET['userchat'])){ //this variable gets the name of the user you want to chat with which you could selected on the previous page
    
    $message = $_POST['message']; //gets the data from the textarea
    
    $receiver_id = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$_GET['userchat'])[0]['id']);  //here i get the userid from the person i am chating to in order to be able to insert him in the friendchat table as receiver
    
    DB::query('INSERT INTO friendchat VALUES (:receiver, :sender, :message, \'\', \'\')', array(':receiver'=>$receiver_id, ':sender'=>$_SESSION['myid'], ':message'=>$_POST['message']));  //now the message,receiver, the sender, datetime and message-id will be inserted into the database
    
}else{
  echo "Unothorized access!";  //illegal access
}
}
?>

Вот код HTML-формы:

<form action = "index.php" method = "POST" class = "message-form">
      <input class = "message" type = "text" placeholder = "message" name = "message">
      <input class = "submit" type = "submit" name='message-submit' value = "Send">
      </form> //form for getting the data from the website

Поэтому, когда я запускаю код, я не получаю сообщений об ошибках или каких-либо уведомлений, но данных нет в моей базе данных. Я не могу понять, в чем может быть проблема. Кто-нибудь может мне помочь? Если вам нужна дополнительная информация, спрашивайте меня.

Базы данных обычно не выдают сообщений об ошибках сами по себе, для них необходимо явно указать просить. Пожалуйста, пройдите прочитать, чтобы узнать, как это сделать с классом базы данных, который вы там используете. Прямо сейчас вы просто запускаете запрос, но вам все равно, вообще действительно ли это удалось, а если нет, то почему.

misorude 03.09.2018 13:04

Всегда явно указывайте целевые столбцы в INSERT! И в этом случае вы можете объединить SELECT и INSERT в один оператор, например INSERT INTO friendchat (<target columns>) SELECT id, :sender, :message, \'\', \'\' FROM users WHERE username=:username. Это сэкономит вам одну поездку туда и обратно.

sticky bit 03.09.2018 13:21

Включите отчеты об ошибках в PHP и проверьте, что вы получите. Добавьте их поверх вашего php файла ini_set ("display_errors", "1"); error_reporting (E_ALL);

Sehdev 03.09.2018 13:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
70
1

Ответы 1

<?php   
session_start();
include 'classes/DB.php'; 
if (isset($_POST['message-submit'])) { //activation of the send-button
    if (isset($_GET['userchat'])){ //this variable gets the name of the user you want to chat with which you could selected on the previous page

$message = $_POST['message']; //gets the data from the textarea

$receiver_id = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$_GET['userchat'])[0]['id']);  //here i get the userid from the person i am chating to in order to be able to insert him in the friendchat table as receiver



var_dump($receiver_id);

распечатать значение $ Receiver_id для отладки

Вы получаете значение для $ Receiver_id, если не вернетесь на шаг назад и var_dump значение, содержащееся в '$ _GET [' userchat ']) [0] [' id '])'

$returnValue = DB::query('INSERT INTO friendchat VALUES (:receiver, :sender, :message, \'\', \'\')', array(':receiver'=>$receiver_id, ':sender'=>$_SESSION['myid'], ':message'=>$_POST['message']));  //now the message,receiver, the sender, datetime and message-id will be inserted into the database

var_dump($returnValue);

Сохраните результат запроса и создайте его var_dump. Это позволит вам увидеть, вернули ли вы значение «истина» или «ложь» из вставки.

die(); 

остановите код здесь, чтобы вы могли видеть вывод var_dump на вкладке вашей сети в веб-браузере (F12 в хроме)

если вы зашли так далеко, не увидев ошибок, попробуйте написать запрос на вставку в phpmyadmin (непосредственно в базу данных) с точными значениями, которые у вас есть в приведенных выше переменных, если что-то не так, база данных должна выдать вам более конкретную ошибку, с которой можно работать

}else{
  echo "Unothorized access!";  //illegal access
}
}
?>

Другие вопросы по теме