Взаимодействие формы обратной связи с таблицей из БД "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. КАК МНЕ ВООБЩЕ ВЫПОЛНИТЬ ЭТО ЗАДАНИЕ? |
Не именуйте файлы применяя без надобности различный регистр, так как "P" и "p" для Unix разные символы.
Никто не догадается в не форматируемом коде о строке 20. Но ошибка происходит при записи в базу - строковые значения должны обрамляться кавычками, но самое главное данные извне должны экранироваться (в mysqli есть свой механизм). Вы бы лучше учили язык не по мультикам, а хорошим учебникам. |
Ну так, в чём моя (-и) ошибка (-и), я так и не понял???
|
"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'])) в коде не было. Если такому вас научил мультик, то бегите из этого кинозала как можно дальше. |
Так, в моём php-коде всё-таки этот ( "INSERT INTO music VALUES (null, $_POST[author], $_POST[called])"; ) синтаксис нужно использовать или этот ( "INSERT INTO music VALUES (null, '$_POST[author]', '$_POST[called]')"; ) ?
Я из всего, приведённого Вами выше, понял только то, что "PHP" и "SQL" по-разному воспринимают переменные, в которых записаны строковые значения... Ну может, конечно, Вы даже не это имели ввиду... Если да, то я Вас тогда вообще не понял................................... :((( |
garrip91,
я вам дал ссылку на руководство, читайте, начиная с раздела "Справочник языка", в нем и найдете ответ на вопрос о $_POST['name'] и $_POST[name] - где нужно так, а где можно и так, и почему. (null, $_POST[author], $_POST[called]) - ошибка синтаксиса РНР исчезнет, но запрос к базе закончится уже ошибкой SQL, так как строковые значения не обрамлены кавычками, что сделано в последнем примере и не приведет к ошибке. Вы же учите язык - делайте запросы, анализируйте, анализ ошибок и чтение материала (обязательно последовательно - от простого к сложному, а не с задач о которых нет представления), это намного больше пользы, чем от мультиков. |
Часовой пояс GMT +3, время: 06:20. |