Где я сделал не так?

  • Автор темы von_werefkin
  • 32
  • Обновлено
  • 18, May 2024
  • #1
 Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\laragon\www\9\post_comment.php on line 17

Warning: mysqli_query(): Empty query in C:\laragon\www\9\post_comment.php on line 18

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\laragon\www\9\post_comment.php on line 20

Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\laragon\www\9\post_comment.php:17 Stack trace: #0 {main} thrown in C:\laragon\www\9\post_comment.php on line 17

Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\laragon\www\9\post_comment.php on line 17

Warning: mysqli_query(): Empty query in C:\laragon\www\9\post_comment.php on line 18

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\laragon\www\9\post_comment.php on line 20

Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\laragon\www\9\post_comment.php:17 Stack trace: #0 {main} thrown in C:\laragon\www\9\post_comment.php on line 17

Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\laragon\www\9\post_comment.php:17 Stack trace: #0 {main} thrown in C:\laragon\www\9\post_comment.php on line 17

Parse error: syntax error, unexpected '$comment' (T_VARIABLE), expecting ',' or ')' in C:\laragon\www\9\post_comment.php on line 17

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\laragon\www\9\index.php on line 45
PHP: There's multiple errors because of: $select=mysqli_query("SELECT name, comment, post_time FROM comments where name='$name' and comment='$comment'"); the errors are:
 <?php

ini_set('display_errors', 1);

$host = "localhost";

$username = "root";

$password = "mypass123";

$databasename = "comments";

$connect = mysqli_connect($host, $username, $password, $databasename);

if(isset($_POST['user_comm']) && isset($_POST['user_name']))

{

$comment = $_POST['user_comm'];

$name = $_POST['user_name'];

$insert = "insert into comments values('', '$name', '$comment', CURRENT_TIMESTAMP)";

$runInsert = mysqli_query($connect, $insert);

$select=mysqli_query("SELECT name, comment, post_time FROM comments where name='$name' and comment='$comment'");

$result = mysqli_query($connect, $select);

if($row = mysqli_fetch_assoc($result)) {

$name = $row['name'];

$comment = $row['comment'];

$time = $row['post_time'];

?>

<div class="comment_div">

<p class="comment"><?php echo $comment;?></p>

<p class="name">by: <?php echo $name;?></p>

<p class="time"><?php echo $time;?></p>

</div>

<?php

}

exit;

}

?>
Код (разметка):

von_werefkin


Рег
01 Jan, 2011

Тем
1

Постов
1

Баллов
11
  • 31, May 2024
  • #2
СМЕХ в том, что даже если бы ваши существующие ошибки были исправлены, код ВСЕ ЕЩЕ был бы мусором, поскольку вы тратите время на создание переменных впустую и вводите их непосредственно в строку запроса.

Это называется подготовить/bind_param/execute, ИСПОЛЬЗУЙТЕ ЭТО! (хотяbind_param и mysqli_stmt такие чушь, это одна из причин, почему я предпочитаю PDO)

МНОГО ваших ошибок даже не существовало бы, если бы вы использовали объектный метод (то есть правильное использование) mysqli вместо полоумного костыля, которым являются процедурные модели.

(еще одна причина, по которой я предпочитаю PDO, в нем нет этой хрени) Я ДУМАЮ, что вы пытаетесь сделать следующее (предупреждение, могут быть опечатки)
 

$stmt = $db->prepare('

INSERT INTO comments (

name, comment, post_time

) VALUES (

:name, :comment, NOW()

)

');

$stmt->execute([

':name' => $_POST['user_name'],

':comment' => $_POST['user_comm']

]);

$id =$db->lastInsertId();

$stmt = $db->prepare('

SELECT name, comment, post_time

FROM comments

WHERE id = ?

');

$stmt->bindParam(1, $id);

$stmt->execute($id);

Код (разметка): Хотя, опять же, это прекрасный пример того, насколько PDO превосходит mysqli:
  <?php ini_set('display_errors', 1); $db = new PDO( 'mysql:host=localhost;dbname=comments', 'root', 'mypass123' ); if ( array_key_exists('user_comm', $_POST) && array_key_exists('user_name', $_POST) ) { $stmt = $db->prepare(' INSERT INTO comments ( name, comment, post_time ) VALUES ( :name, :comment, NOW() ) '); $stmt->execute([ ':name' => $_POST['user_name'], ':comment' => $_POST['user_comm'] ]); $stmt = $db->prepare(' SELECT name, comment, post_time FROM comments WHERE name = :name AND comment = :comment '); $stmt->execute([ ':name' => $_POST['user_name'], ':comment' => $_POST['user_comm'] ]); if ($row = $stmt->fetch()) { // don't forget to escape/sanitize user generated values! echo ' <div class="comment"> <p class="comment">', htmlspecialchars($row['comment']), '</p> <p class="name">by: ', htmlspecialchars($row['name']), '</p> <p class="time">', $row['post_time'], '</p> </div>'; } else echo ' <p class="notFound">Not found after Insert?!?</p>'; } // you do not need to 'exit' here, and avoid closing ?> 
Код (разметка): Хотя, если бы я писал это, чтобы получить временную метку с момента ее создания, я бы НЕ использовал сложный поиск, а вместо этого извлекал бы идентификатор из вставки.
  <?php ini_set('display_errors', 1); $conn = new mysqli( 'localhost', 'root', 'mypass123', 'comments' ); if ( array_key_exists('user_comm', $_POST) && array_key_exists('user_name', $_POST) ) { $stmt = $conn->prepare(' INSERT INTO comments ( name, comment, post_time ) VALUES ( ?, ?, NOW() ) '); $stmt->bindParam( 'ss', $_POST['user_name'], $_POST['user_comm'] ); $stmt->execute(); $stmt = $conn->prepare(' SELECT name, comment, post_time FROM comments WHERE name = ? AND comment = ? '); $stmt->bindParam( 'ss', $_POST['user_name'], $_POST['user_comm'] ); $stmt->execute(); $stmt->bind_result( $user, $comment, $time ); if ($stmt->fetch()) { // don't forget to escape/sanitize user generated values! echo ' <div class="comment"> <p class="comment">', htmlspecialchars($comment), '</p> <p class="name">by: ', htmlspecialchars($name), '</p> <p class="time">', $time, '</p> </div>'; } else echo ' <p class="notFound">Not found after Insert?!?</p>'; } // you do not need to 'exit' here, and avoid closing ?> 
Код (разметка): если предположить, что ваша таблица представляет собой уникальный столбец с автоматическим приращением идентификатора, это будет НАМНОГО быстрее, чем полнотекстовое сравнение нескольких полей.

НЕ то, что на практике я бы вернул имя или комментарий, поскольку они все равно будут существовать в $_POST, так зачем тратить память, базу данных и время подключения к сокету, извлекая информацию, которая у вас уже есть?
 

miniTatyana


Рег
01 Jan, 2011

Тем
1

Постов
2

Баллов
12
  • 09, Jun 2024
  • #3
Попробуй это. $connect = mysqli_connect($host, $username, $password, $databasename); $select= "ВЫБЕРИТЕ имя, комментарий, время публикации ИЗ комментариев, где name='$name' и comment='$comment'"; $result = mysqli_query($connect, $select);
 

dima3


Рег
19 Aug, 2013

Тем
1

Постов
2

Баллов
12
  • 09, Jun 2024
  • #4
Эти сообщения об ошибках говорят сами за себя, поэтому мы мало чем можем помочь в этом вопросе, поскольку само сообщение об ошибке содержит подробные инструкции о том, как устранить проблему.

Например:
 Call to undefined function mysql_query()
Код (разметка): это означает, что вы должны предоставить функции два аргумента, но вы предоставили только один.

Чтобы решить проблему, добавьте еще один аргумент.

Вы прекрасно выполнили ту же функцию в строках 15 и 16, теперь сделайте то же самое в строках 17 и 18.
 mysqli_query() expects at least 2 parameters, 1 given
Код (разметка): я не вижу этой функции в вашем коде, поэтому я предполагаю, что она взята из другого файла.

Но это тоже говорит само за себя — оно указывает на то, что функция mysql_ недоступна.

Короче говоря, его удалили из современных версий PHP и заменили на mysqli.

Следовательно, для работы с базами данных всегда следует использовать mysqli_ вместо mysql_.
 

Breag


Рег
04 Jun, 2011

Тем
1

Постов
5

Баллов
15
Тем
49554
Комментарии
57426
Опыт
552966

Интересно