0
0

- Выполнял задание к уроку 7.5 на Курсе PHP / MySQL

- Результат (Код во вложении)

- Ошибка на этапе считывания данных, введённых в форму (скрин во вложении)

- Перебирал разные способы валидации данных, введённых в поля формы + смотрел чужое решение на этом сайте в разделе вопросов, но оно не совпадает с тем, что проходили на уроке. Хочется понять, что не так в применении того способа, что прошли в теории.

Скрин ошибки:

https://pastenow.ru/f4c9f0046c310d34ca51cd6e46234f56

Скрин сществующей базы данных:

https://pastenow.ru/5a4cc7f4cb0351863831bbcbc801f3c6

<?php

	$mysqli = new mysqli('localhost', 'root', '', 'kinomonster');

	if (mysqli_connect_errno()) {
		prinf("Соединение не установлено ", mysqli_connect_error());
		exit();
	}

	$mysqli->set_charset('utf8');


	if(isset($_POST['name']) && isset($_POST['author'])) {

		$name = htmlspecialchars($_POST.['name'], ENT_QUOTES, 'UTF-8');
		$author = htmlspecialchars($_POST.['author'], ENT_QUOTES, 'UTF-8');

		$query1 = "INSERT INTO music VALUES(2, $name, $author)";
		$mysqli->query($query1);

	}

	
	$query2 = $mysqli->query('SELECT * FROM music');

	while ( $row =mysqli_fetch_assoc($query2) ) {
		echo $row['name']." ".$row['author']."<br>";
	}

	$mysqli->close();

?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>

	<form action="http://kinomonster.com:8080/" method="post" id="first_form">
		<input type="text" name="name" placeholder="Название композиции">
		<input type="text" name="author" placeholder="Автор композиции">
		<input type="submit" class="btn" value="отправить">
	</form>

</body>
</html>

Вячеслав Москальчук
3 years ago






$name = htmlspecialchars($_POST.['name'], ENT_QUOTES, 'UTF-8');

$author = htmlspecialchars($_POST.['author'], ENT_QUOTES, 'UTF-8');

а точки здесь зачем? $_POST.['name'] и $_POST.['author']

student_8vsRa_2i
3 years ago

Да, действительно, опечатался и убрал их уже.

Но ошибка осталась всё та же(

Что ещё может быть?

Вячеслав Москальчук
3 years ago

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

student_8vsRa_2i
3 years ago

Проделал всё в странице инкогнито в браузере - ошибки пропали. Но значения отправленные через форму не добавляются в базу данных, и как следствие, не выводятся в цикле while. Выводится лишь то единственное значение, которое было введено в базу через админку phpMyAdmin. 

Вячеслав Москальчук
3 years ago

Опытным путём найдено, что не отрабатывает именно этот участок.

Когда в INSERT все параметры прописаны строками вручную - всё работает. Когда прописано через переменные $name и $author - нет.  Как будто что-то недорассказали. И по ходу, INSERT переменные как параметр не воспринимает.

if(isset($_POST['name']) && isset($_POST['author'])) {

		$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
		$author = htmlspecialchars($_POST['author'], ENT_QUOTES, 'UTF-8');

	}

	$query1 = "INSERT INTO music VALUES(null, $name, $author)";
	$mysqli->query($query1);

Вячеслав Москальчук
3 years ago

Оказывается, что в строке

$query1 = "INSERT INTO music VALUES(null, '$name', '$author')";

переменные $name и $author нужно брать в кавычки, что вообще не очевидно - подсказал знакомый. Добавьте 5 секунд видео об этом в обучение и вопросы вообще исчезнут по этому ДЗ. А так чисто из-за этой мелочи все ходят вокруг да около периодически по этой задаче.  

Вячеслав Москальчук
3 years ago

Оказывается, что в строке

$query1 = "INSERT INTO music VALUES(null, '$name', '$author')";

переменные $name и $author нужно брать в кавычки, что вообще не очевидно

<--чушь, переменные НЕ нужно брать в кавычки,лучше использовать одинарные кавычки(апостроф) -->

 

$query1 = 'INSERT INTO `music` VALUES(null, ' . $name . ', ' . $author . ')';

вот так 

student_kAR68Gv3
3 years ago

7 ответов