Не работает простетский скрипт. Parse error

123
20 июня 2019, 12:20

Не судите строго. Это можно сказать мой первый скрипт, который я разбираю и тот комом. :( Короче суть вот в чём. Есть форма send.html:

<html>
<body>
    <form action="script.php" method="POST">
        Введите имя:     <input type=text name="name"><br>
        Введите возраст: <input type=text name="age"><br>
                         <input type=submit value="GO!">
    </form>
</body>
</html>

И есть скрипт script.php:

<?php
echo "Привет,$_POST['name']! Вам $_POST['age'] лет !";
?>

Так в результате работы этого простого скрипта вылетает ошибка:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in E:\wamp64\www\mysite\script.php on line 2

И вот я не пойму: либо что-то в коде не правильно, либо мой веб-сервер глючит. К слову у меня сборка WAMP 64bit 3.0.6.

Answer 1

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

Если вы планируете изучать и работать с PHP в дальнейшем, старайтесь не обращаться к переменным $_POST, $_GET и подобным напрямую. Это связано с тем, что $_POST['name'] может быть не установлен и если вы настроили отображение ошибок уровня E_STRICT (весьма полезно при написании скриптов), то ошибки будут постоянно появляться. Для получения данных лучше всего использовать функцию filter_input(), с её помощью можно проверить данные на корректность, но об этом уже почитайте в документации.

Никогда не выводите данные, введенные пользователем напрямую, без обработки, на страницу. Это чревато многими проблемами, например XSS. Все данные, которые могут содержать амперсанд, кавычки, знаки меньше и больше нужно заключать в функцию htmlspecialchars().

В итоге ваш echo может выглядеть так:

echo 'Привет, '.htmlspecialchars(filter_input(INPUT_POST, 'name')).'! Вам '.htmlspecialchars(filter_input(INPUT_POST, 'age')).' лет !';
Answer 2

Dmitry OnGamer, правильно отметил! При использовании переменных в вводе, в частности в echo "" Переменную нужно оборачивать в {$var} фигурные скобки, для того чтобы компилятор отличил ее от обычного текста. Если вы используете двойные кавычки в echo, то обычные переменные типа $var можно и без {}. Но переменные типа массив $var['value] нужно оборачивать в фигурные скобки. Так же можно использовать конкатенацию Примеры

echo "Привет $name"; //двойные кавычки
echo "Привет {$_POST['name]}"; //Переменная типа массив
echo "Привет " . $_POST['name']; //Конкатенация
Answer 3

Используйте фигурные скобки:

echo "Привет,{$_POST['name']}! Вам {$_POST['age']} лет !";
READ ALSO
Как использовать WooCommerce api внутри файла function.php

Как использовать WooCommerce api внутри файла function.php

Я уже использовал на практике WooCommerce api на определенной страницеРазобрался с тем как должен выглядеть путь запрос

101
Как исключить страницы из условия, в котором заданы страницы?

Как исключить страницы из условия, в котором заданы страницы?

Допустим, имеется категория Вода (id='500') а в ней есть подразделы

111
Как узнать количество задач в очереди

Как узнать количество задач в очереди

Для системы очередей использую данное расширениеНа сайте стоит Redis движок

126
Извлечь содержимое тега href из строки

Извлечь содержимое тега href из строки

Имеется строка в переменной $text:

151