Попытка получить имя пользователя из одной базы данных и вставить его с сообщением в другую базу данных - PullRequest
0 голосов
/ 22 мая 2019

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

Вот код:

<?php
$mysqli = new mysqli("localhost", "root", "", "forum");
$mysqli2 = new mysqli("localhost", "root", "", "login");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (isset($_GET['message']) && isset($_GET['username'])) {

    $user=$mysqli2->real_escape_string($_GET['username']);
    $message=$mysqli->real_escape_string($_GET['message']);
    $date=date('Y-m-d H:i:s');

    $sql="INSERT INTO forum(id, user, message, date) VALUES(0,'$user','$message','$date')";
    $mysqli->query($sql);
}

?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Forum</title>
</head>

<body>
<h2>Forum Messages:</h2>

<?php
$sql = "SELECT * FROM forum";
$result = $mysqli->query($sql);

$sql2 = "SELECT * FROM users";
$result2 = $mysqli2->query($sql2);

while($row = $result->fetch_assoc() && $row2 = $result2->fetch_assoc()) {
  echo $row2['username'].',  '.$row['date'].' <br>';
  echo $row['message'].'<br>';
  echo '------------------------ <br>';
}
?>


<form method="get" action="forum.php">
<p>Message:<br>
  <label for="message"></label>
  <textarea name="message" id="message" cols="45" rows="5"></textarea>
</p>
<p>
  <input type="submit" name="submit" id="submit" value="Post message">
</p>
</form>

</body>
</html>

Кто-нибудь понял, почему он не работает?

1 Ответ

0 голосов
/ 22 мая 2019

Вы не получаете ошибок, потому что вы не проверяете их.Вероятно, что вставка не работает.В этом случае ваш звонок на query() вернет FALSE, поэтому вам нужно проверить это.

$sql = "INSERT INTO forum(user, message, date) VALUES('$user','$message','$date')";
if ($mysqli->query($sql) === false) {
    throw new Exception('Error performing insert: ' . $mysqli->error);
}

Также обратите внимание, что в следующем коде вы не прерываете, вы простораспечатайте сообщение об ошибке, а затем продолжите работу со сценарием:

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

Измените echo на throw, чтобы скрипт остановился.

И в идеале вы хотите использоватьподготовленные заявления вместо real_escape_string().Как то так:

$stmt = $mysqli->prepare('INSERT INTO forum(user, message, date) VALUES(?, ?, ?)');
if ($stmt === false) {
    // prepare failed
}
$stmt->bind_param('sss', $_GET['username'], $_GET['message'], date('Y-m-d H:i:s'));
if ($stmt->execute() === false) {
    // exec failed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...