Я относительно новичок в 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Поэтому, когда я запускаю код, я не получаю сообщений об ошибках или каких-либо уведомлений, но данных нет в моей базе данных. Я не могу понять, в чем может быть проблема. Кто-нибудь может мне помочь? Если вам нужна дополнительная информация, спрашивайте меня.
Всегда явно указывайте целевые столбцы в INSERT! И в этом случае вы можете объединить SELECT и INSERT в один оператор, например INSERT INTO friendchat (<target columns>) SELECT id, :sender, :message, \'\', \'\' FROM users WHERE username=:username. Это сэкономит вам одну поездку туда и обратно.
Включите отчеты об ошибках в PHP и проверьте, что вы получите. Добавьте их поверх вашего php файла ini_set ("display_errors", "1"); error_reporting (E_ALL);






<?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
}
}
?>
Базы данных обычно не выдают сообщений об ошибках сами по себе, для них необходимо явно указать просить. Пожалуйста, пройдите прочитать, чтобы узнать, как это сделать с классом базы данных, который вы там используете. Прямо сейчас вы просто запускаете запрос, но вам все равно, вообще действительно ли это удалось, а если нет, то почему.