Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.12.2018, 15:47
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Взаимодействие формы обратной связи с таблицей из БД "MySQL"
Здравствуйте, уважаемые пользователи этого сайта!!!

В настоящее время я на каком-то ранее неизвестном мне сайте ("https://beonmax.com/ru/") на платной основе изучаю 1 из множества сложнейших языков программирования (это "php", как вы уже поняли).

Суть освоения данного курса на этом сайте заключается в просмотре видеоуроков, составлении кода (как на видеоролике) и закреплении материала путём выполнения заданий различных уровней сложности.



Наткнулся я на очередное задание (вот ссылка на неё: https://beonmax.com/ru/courses/php-a...eo-sql-delete/), в котором необходимо:

1. создать таблицу с названием "music" в базе данных с полями: "id", "name" и author (ну с этим вроде я справился);

2. заполнить эту таблицу данными, где "name" - название композиции, "author" - название исполнителя(группы) (как я понял из задания, заполнять эту таблицу нужно с использованием формы обратной связи);

3. создать страницу "player.php" и сделать в ней базовую html-разметку (ну как я понял, обычную форму обратной связи согласно заданных условий), после чего вывести на странице все записи таблицы "music" (при этом числовые значения поля "id" выводить не нужно) (ну а с этим я, естественно, не справился, так как НУ ЭТО ПРОСТО П@@@@Ц, А НЕ ЗАДАНИЕ).



Начиная выполнять это чудовищное задание, я составил следующие синтаксисы:

/* Form(new).html */

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form(new)</title>
</head>
<body>

<form action="http://localhost/www/Player.php" method="post">
<p>Author: <input type="text" name="author" placeholder="Название группы/исполнителя"></p>
<p>Name: <input type="text" name="called" placeholder="Название композиции"></p>
<br>
<input type="submit" name="sub"><input type="reset" name="res">
</form>
<br>
<p><?php echo mb_strtoupper(trim((@$_POST['author'])))." исполняет композицию ".mb_strtoupper(trim((@$_POST['called']))); ?></p>

</body>
</html>



/* Player.php */

<?php print_r($_POST); ?>

<?php

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

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

$mysqli->set_charset('utf8');

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

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

$query = "INSERT INTO music VALUES(null, $_POST['author'], $_POST['called'])";
$mysqli->query($query);

$mysqli->close();

?>



locahost выдаёт ошибку следующего содержания:

"Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\www\Player.php on line 20".





Вопросы:

1. Почему у меня возникает эта ошибка (которую, кстати говоря, даже валидаторы воспринимают абсолютно также, как и localhost с браузером )?

2. Правильно ли я начал выполнять задание?

3. КАК МНЕ ВООБЩЕ ВЫПОЛНИТЬ ЭТО ЗАДАНИЕ?
Ответить с цитированием
  #2 (permalink)  
Старый 01.12.2018, 16:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Не именуйте файлы применяя без надобности различный регистр, так как "P" и "p" для Unix разные символы.

Никто не догадается в не форматируемом коде о строке 20. Но ошибка происходит при записи в базу - строковые значения должны обрамляться кавычками, но самое главное данные извне должны экранироваться (в mysqli есть свой механизм).

Вы бы лучше учили язык не по мультикам, а хорошим учебникам.
Ответить с цитированием
  #3 (permalink)  
Старый 01.12.2018, 20:43
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Ну так, в чём моя (-и) ошибка (-и), я так и не понял???
Ответить с цитированием
  #4 (permalink)  
Старый 01.12.2018, 21:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

"INSERT INTO music VALUES(null, $_POST['author'], $_POST['called'])"; - это ошибка. Корректно так:

"INSERT INTO music VALUES (null, $_POST[author], $_POST[called])";


Но только с точки зрения РНР, но не SQL, ибо строковые значения в любом языке заключают в кавычки:

"INSERT INTO music VALUES (null, '$_POST[author]', '$_POST[called]')";


Но это еще не все - данный код небезопасен. Начиная работать с базой нужно сразу научится уделять этому вопросу пристальное значение. Меньше смотрите мультики, больше читайте, о возможностях предоставляемых mysqli в этом вопросе лучше читать тут. В этом же руководстве изучите "начало" - синтаксис языка, о безопасности и т.п., чтобы такого trim((@$_POST['author'])) в коде не было. Если такому вас научил мультик, то бегите из этого кинозала как можно дальше.
Ответить с цитированием
  #5 (permalink)  
Старый 01.12.2018, 21:41
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Так, в моём php-коде всё-таки этот ( "INSERT INTO music VALUES (null, $_POST[author], $_POST[called])"; ) синтаксис нужно использовать или этот ( "INSERT INTO music VALUES (null, '$_POST[author]', '$_POST[called]')"; ) ?

Я из всего, приведённого Вами выше, понял только то, что "PHP" и "SQL" по-разному воспринимают переменные, в которых записаны строковые значения... Ну может, конечно, Вы даже не это имели ввиду... Если да, то я Вас тогда вообще не понял................................... ((

Последний раз редактировалось garrip91, 01.12.2018 в 21:42. Причина: Уточнение
Ответить с цитированием
  #6 (permalink)  
Старый 01.12.2018, 22:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

garrip91,
я вам дал ссылку на руководство, читайте, начиная с раздела "Справочник языка", в нем и найдете ответ на вопрос о $_POST['name'] и $_POST[name] - где нужно так, а где можно и так, и почему.

(null, $_POST[author], $_POST[called]) - ошибка синтаксиса РНР исчезнет, но запрос к базе закончится уже ошибкой SQL, так как строковые значения не обрамлены кавычками, что сделано в последнем примере и не приведет к ошибке.

Вы же учите язык - делайте запросы, анализируйте, анализ ошибок и чтение материала (обязательно последовательно - от простого к сложному, а не с задач о которых нет представления), это намного больше пользы, чем от мультиков.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка писем с формы обратной связи на вайбер или телеграмм Julia1991 Общие вопросы Javascript 0 17.07.2018 10:55
Функционал формы обратной связи zaza41rus Библиотеки/Тулкиты/Фреймворки 0 20.05.2016 03:40
Проблема с одновременой работой формы обратной связи и счетчика qverty2016 jQuery 4 03.02.2016 18:20
требуется помощь по установке Формы обратной связи в модальном окне. Bob11 Работа 0 13.11.2015 12:40
Проверка корректности ввода формы обратной связи tatyana_vladi Javascript под браузер 0 27.12.2014 22:36