@KirillKenigsberg

Комментарии на php + mysql&?

fr7903p5.bget.ru/about.php - сайт (комменты в конце)

Чтение:
<?php
$mysql = mysqli_connect('localhost', '  ', ' ')or die("Не могу соединиться с MySQL.");

if (!$mysql)
{
echo("БД Не доступна!");
exit();
}

mysqli_select_db($mysql, 'fr7903p5_arduino');

mysqli_set_charset($mysql, "utf8");
$sql = "SELECT message FROM `messages`";
$sql1 = "SELECT author FROM `messages`";

$result = mysqli_query($mysql, $sql);
$result1 = mysqli_query($mysql, $sql1);

$d = mysqli_fetch_array($result);
$d1 = mysqli_fetch_array($result1);

$count = 0;

if($result) {
foreach($d as $row)
{
echo 'Автор:'.$d1[$count];
print(''.
'');
echo 'Комментарий:'.$row;
echo(''.

'');
$count += 1;
}
}
else {
echo 'mysqli_query вернул пустую строку.';
echo mysqli_error($mysql);
}

mysqli_close($mysql);
?>


Запись:
<?php
$name = $_POST["name"];
$coment = $_POST["coment"];
$date = date("m.d.y");
$mysql = mysqli_connect('localhost', ' ', ' ')or die("Не могу соединиться с MySQL.");

if (!$mysql)
{
echo("БД Не доступна!");
exit();
}

mysqli_select_db($mysql, 'fr7903p5_arduino');

mysqli_set_charset($mysql, "utf8");
$sql = "INSERT INTO `messages` (`author`, `message`, `date`) VALUES ('$name', '$coment', '$date')";
$result = mysqli_query($mysql, $sql);
mysqli_fetch_array($result);

mysqli_close($mysql);
include('about.php');
?>

Пишу комменты на php + mysql. Коменты выводятся всего 2 раза + они повтаряются. Помогите пожалуйста
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
Если разбирать все ошибки и глупости, содержащиеся в коде, можно целую статью написать на несколько страниц A4.
Пробегусь вкратце:
1) Дублирование условия после подключения к БД. Если вы делаете "or die", то код в случае выполнения этого условия будет завершён, повторно проверять переменную не нужно (она уже была проверена там, где вы сделали "or die")
2) Двойной запрос для двух колонок отдельно. Открою секрет: SQL позволяет возвращать много столбцов, и более того - он позволяет объединить таблицы самыми разными способами. Отдельно выбирать сообщения и их авторов не нужно.
3) Результат mysqli_query будет false только в том случае, если запрос завершился ошибочно (например, текст запроса неправильный). Если таблица пуста - будет всё равно возвращён объект, а не false.
4) Зачем в одном и том же месте перемешивать echo и print?
5) При записи - не происходит ни проверки данных, ни экранирования. Можно легко передать в БД любой запрос, в том числе удаление всех таблиц.
6) Про то, что идёт обращение к полям массива $_POST, но они даже не проверяются на существование, я промолчу.
7) Дублирование кода, в каждом файле отдельно подключение к БД, логичнее вынести в отдельный файл, а логины-пароли держать в конфиге, недоступном для чтения никому кроме скрипта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы