Почему php не работает в html
Перейти к содержимому

Почему php не работает в html

PHP и HTML

PHP и HTML тесно взаимодействуют: PHP может генерировать HTML, а HTML может передавать информацию PHP. Перед чтением вопросов в этом разделе важно чтобы вы понимали как получать переменные извне PHP. Страницы руководства по этой теме содержат много примеров.

  1. Какое кодирование/декодирование я должен выполнять при передаче значения через форму/URL?
  2. Я пытаюсь использовать , но переменные $foo.x и $foo.y недоступны. $_GET[‘foo.x’] тоже не существует. Где они?
  3. Как создать массивы в HTML ?
  4. Как получить все результаты из HTML-тега select с атрибутом multiple?
  5. Как я могу передать переменную из JavaScript в PHP?

Какое кодирование/декодирование я должен выполнять при передаче значения через форму/URL?

  • Интерпретация HTML. Для того, чтобы задать произвольную строку, вы должны заключить её в двойные кавычки и использовать htmlspecialchars() для кодирования.
  • URL: URL состоит из нескольких частей. Если вы хотите чтобы ваши данные были восприняты как один элемент, вы должны закодировать их с помощью urlencode() .

Пример #1 Скрытый элемент HTML-формы

echo ‘. htmlspecialchars ( $data ) . ‘» />’ . «\n» ;
?>

Замечание: Использовать urlencode() для $data неправильно, так как кодировать данные в urlencode() это обязанность браузера. Все популярные браузеры делают это правильно. Отметьте, что это происходит вне зависимости от метода (например, GET или POST). Вы заметите это только в случае GET-запроса, так как POST-запросы обычно скрыты.

Пример #2 Данные, редактируемые пользователем

echo «» ;
?>

Замечание: Данные показываются браузером как предполагается, потому что браузер будет интерпретировать экранированные HTML-символы. При отправке через GET или POST данные будут закодированы (urlencoded) браузером для передачи и декодированы (urldecoded) PHP. Поэтому вам не надо выполнять какое-либо кодирование/декодирование url самостоятельно, всё обрабатываются автоматически.

Пример #3 В URL

Замечание: На самом деле вы подделываете HTML GET-запросом, поэтому необходимо вручную закодировать ( urlencode() ) данные.

Замечание: Вам надо применить htmlspecialchars() ко всему URL, потому что URL появляется как значение HTML-атрибута. В этом случае, браузер сначала раскодирует всё значение (обратная операция htmlspecialchars() ) и затем передаст URL. PHP поймёт URL правильно, так как вы закодировали данные с urlencode() . Вы заметите, что & в URL заменяется на & . Хотя большинство браузеров это исправляют, если вы забудете об этом, но всё же это не всегда возможно. Поэтому, даже если ваш URL не динамический, вам надо закодировать его с помощью htmlspecialchars() .

Я пытаюсь использовать , но переменные $foo.x и $foo.y недоступны. $_GET[‘foo.x’] тоже не существует. Где они?

При отправке формы, вместо стандартной кнопки отправки возможно использовать изображение с тэгом как:

Когда пользователь кликает где-либо на картинке, серверу будет послана сопутствующая форма с двумя дополнительными переменными: foo.x и foo.y .

Так как имена foo.x и foo.y не разрешены в PHP, они автоматически преобразуются в foo_x и foo_y . То есть, точки заменяются на подчёркивания. Таким образом, вы обращаетесь к этим переменным так же, как и к любым другим, описанным в разделе о получении переменных извне PHP. Например, $_GET[‘foo_x’] .

Замечание:

Пробелы в именах переменных запроса преобразуются в подчёркивания.

Как создать массивы в HTML ?

Для того, чтобы результаты были переданы вашему PHP скрипту как массив, именуйте элементы , или следующим образом:

Заметьте квадратные скобки после имени переменной, это делает её массивом. Вы можете сгруппировать элементы в массив, присваивая одно и то же имя разным элементам:

Это создаст два массива, MyArray и MyOtherArray, которые будут переданы PHP-скрипту. Также возможно задать определённые ключи для ваших массивов:

Массив AnotherArray теперь будет содержать ключи 0, 1, email и phone.

Замечание:

Определять ключи массивов в HTML необязательно. Если вы не установите ключи, массив заполняется в порядке появления элементов в форме. Наш первый пример будет содержать ключи 0, 1, 2 и 3.

Как получить все результаты из HTML-тега select с атрибутом multiple?

HTML-тег select с указанным multiple позволяет пользователю выбрать несколько элементов из списка. Эти элементы затем передаются обработчику формы. Проблема в том, что они все переданы с одним и тем же именем. Например:

Каждая выбранная опция поступит обработчику формы как:

var=option1 var=option2 var=option3

Каждая опция будет перезаписывать содержимое предыдущей переменной $var . Решение — воспользоваться возможностью PHP — «массив из элемента формы». Следует использовать следующее:

Это укажет PHP обрабатывать $var как массив и каждое присваивание значения в var[] добавит элемент в массив. Первым элементом будет $var[0] , следующим — $var[1] и т.д. Функция count() может быть использована для определения, сколько элементов было выбрано, а функция sort() — для сортировки массива опций, если это необходимо.

Заметьте, что если вы используете JavaScript, то [] в имени элемента могут вызвать проблемы, если вы пытаетесь обращаться к элементу по имени. Вместо этого используйте числовой идентификатор элемента формы или заключите имя переменной в одинарные кавычки и используйте его как индекс массива элементов, например:

variable = document.forms[0].elements['var[]'];

Как я могу передать переменную из JavaScript в PHP?

Так как JavaScript является (обычно) клиентской технологией, а PHP, как правило, серверной, и поскольку HTML — протокол «без состояния», эти два языка не могут обмениваться переменными напрямую.

Однако, возможно передавать переменные между ними. Один из способов достичь этого — сгенерировать JavaScript-код из PHP и принудительно обновлять браузер, посылая определённые переменные обратно PHP-скрипту. Нижеприведённый пример показывает как это сделать — он позволяет PHP-коду получить высоту и ширину экрана, что, обычно, возможно только на стороне клиента.

Пример #4 Генерирование JavaScript из PHP

if (isset( $_GET [ ‘width’ ]) AND isset( $_GET [ ‘height’ ])) // выводим переменные с размерами
echo «Ширина экрана: » . $_GET [ ‘width’ ] . «
\n» ;
echo «Высота экрана: » . $_GET [ ‘height’ ] . «
\n» ;
> else // передаём переменные с размерами
// (сохраняем оригинальную строку запроса
// — post переменные нужно будет передавать другим способом)

User Contributed Notes

There are no user contributed notes for this page.

  • ЧАВО
    • Общая информация
    • Списки рассылки
    • Получение PHP
    • Вопросы по базам данных
    • Установка
    • Проблемы сборки
    • Использование PHP
    • Хеширование паролей
    • PHP и HTML
    • PHP и COM
    • Разные вопросы

    PHP-код в HTML-файле не работает, в php-файле — работает. Почему? : Программирование

    Дело не только в этом, увы (но за замечание о ошибке синтаксиса — спасибо!).

    Есть рекомендация сделать файл .htaccess с содержимым

    AddHandler application/x-httpd-php .php .html .shtml .htm

    не помогло.

    KirillHome
    Посмотреть профиль
    Где был?
    Найти ещё сообщения от KirillHome

    █ 28.06.2015 12:06

    Рекомендую заменить IIS на что-то нормальное. В данном случае проблема в том, что статика отдаётся как есть, а исполняемые файлы отдаются интерпретатору, который может выводить и статику. Тут все зависит от настроек вебсервера, но настоятельно не рекомендую настраивать на выдачу html через обработчик. Это то, что начал делать в #3. Зачем тебе вообще код в статике? Может, про JS речь?

    █ 28.06.2015 13:09
    KirillHome

    На самом деле это «самые первые шаги» в попытке сделать web-сервис (как громко сказано то ) проверки цен/остатков.
    Понимания того, что и как нужно делать — у меня, увы, нет (ни разу ничего подобного не делал).

    С чего начал:
    Так как IIS — поднят и используется, то — поставил PHP, сделал сопоставление обработчика PHP, пытался запустить примеры с простыми формами обработки результата (типа — «Введите имя», «Год рождения» — и получить ответ — «Вам ВведенноеИмя бла-бла-бла лет»).
    Сразу заткнулся на том, что в данных примерах есть «участки php» в html, которые у меня — не работают.

    KirillHome
    Посмотреть профиль
    Где был?
    Найти ещё сообщения от KirillHome

    █ 28.06.2015 13:36

    Так и вопрос, зачем ты путаешь статику и динамику? Html отдаются, как есть. Php отдаются обработчику, а его вывод возвращается веб-серверу. Сначала алгоритм нарисуй, а потом раздели, где у тебя статика, а где код.

    █ 28.06.2015 16:53
    KirillHome

    Я не понимаю, что значит «статика» и «динамика» в данном случае.

    • этот штрихкод (как вариант — записав штрихкод во входной текстовый файл, а уж внешнее приложение будет читать из текста)
    • имя выходного текстового файла.
    KirillHome
    Посмотреть профиль
    Где был?
    Найти ещё сообщения от KirillHome

    █ 29.06.2015 02:42

    KirillHome ➤ Дело не только в этом, увы (но за замечание о ошибке синтаксиса — спасибо!).

    Есть рекомендация сделать файл .htaccess с содержимым

    AddHandler application/x-httpd-php .php .html .shtml .htm

    не помогло.

    Попробуй в .htaccess вместо указанного тобой кода, прописать:

    Или
    RemoveHandler .html .htm
    AddType application/x-httpd-php .php .htm .html .phtml

    но в принципе должен сработать первый.
    У меня по крайней мере в файле html обрабатывается phpinfo с первым вариантом

    █ 29.06.2015 13:52

    Чтобы закрыть вопрос с непониманием статики и динамики. Статика — это файл, который отдается «как есть». Это картинки, например, архивы, И, файлы html. Сервер их никак не обрабатывает, они никак не изменяются. Динамика начинается, когда на странице изменяются какие-то данные и делает это сервер. Например, эта страница — динамика. Ее в том виде, как ты видишь, не существует. Она обрабатывается каждый раз, т.е. веб-сервер знает, что php надо отдать соответствующему обработчику, а то, что он вернет (вывод) использовать, как если бы это была страница с диска. Т.е. читает не с диска, а из вывода обработчика. Обработчик при этом, в зависимости от условий, может выводить совершенно разные данные.

    Форма ввода, например, статична, если ты только не задаешь разные вопросы на ней (у тебя выводится цена и остатки, т.е. динамичная форма). Никакие внешние приложения тебе не нужны, т.е. такой подход крайне вреден для многопользовательской среды, сожрет уйму ресурсов. Старайся обойтись PHP, он много что умеет. И, да, не передавай ВСЕ в обработчик. Хоть он и будет пропускать то, что не является его кодом, все равно, на то, чтобы задействовать обработчик, уходит достаточно много ресурсов, что сказывается на скорости работы сервиса.

    █ 29.06.2015 14:20
    KirillHome

    OlegON ➤ . Никакие внешние приложения тебе не нужны, т.е. такой подход крайне вреден для многопользовательской среды, сожрет уйму ресурсов. Старайся обойтись PHP, он много что умеет

    Увы, но на сколько я в курсе — закрытый формат не позволит мне напрямую получать данные из базы. Есть, конечно, вариант — раз в 10 минут выгружать полностью информацию в текст, и уже этот текст — подгружать в какой-то «открытый формат».

    OlegON ➤ . И, да, не передавай ВСЕ в обработчик. Хоть он и будет пропускать то, что не является его кодом, все равно, на то, чтобы задействовать обработчик, уходит достаточно много ресурсов, что сказывается на скорости работы сервиса.

    А вот этого пока не понял совсем.

    Всем спасибо.
    Пока «план занятий» ясен:
    1) Создать форму на PHP
    2) Данные, введённые пользователем — куда-то сохранить/записать/передать
    3) Откуда-то взять данные ответа, отобразить их на форме.
    4) Понять, что делать, когда пользователей — несколько (запрос пользователя 1 должен вернуться ему, а не пользователю 2).
    5) Обработать «проблемные ситуации» — ответ не вернулся за какое-то приемлемое время и т.п.

    KirillHome
    Посмотреть профиль
    Где был?
    Найти ещё сообщения от KirillHome

    HTML в PHP — Веб-разработка на PHP

    Главный секрет PHP заключается в том, что сам язык — шаблонизатор. Если посмотреть на другой язык, в его файлах нельзя увидеть ничего похожего на теги .

    В PHP любой файл с кодом — это шаблон. Причем этот шаблон не имеет структуры, как бывает в некоторых шаблонизаторах.

    Мы можем создать PHP-файл, написать любой текст вне тегов и запустить код на выполнение. При этом он не упадет с указанием синтаксической ошибки.

    hi i am the template 

    Запуск этого кода выведет весь текст на экран:

    То же самое касается HTML, так как это всего лишь текст. Достаточно в любом PHP-файле добавить немного HTML и запустить его, как он будет выведен на экран:

      href="/lessons">Lessons  

    Запуск этого кода выведет весь текст на экран:

    Такое поведение языка существует исключительно ради создания сайтов. Если запустить веб-сервер в директории с этим файлом index.php, то при обращении к этому сайту мы получим вывод как в терминале. Это значит, что мы можем заменить такой код:

     echo '

    hello, world

    '
    ;
     hello, world 

    Отсюда следует важный вывод. Любой PHP-файл – это обычный текстовый файл со вставками PHP-кода с помощью тегов . Любой текст, написанный внутри него, отдается в вывод как есть, будь то браузер или запуск в командной строке.

    Теперь добавим немного PHP. Шаблон становится шаблоном, когда внутри него появляется подстановка данных. Принцип работы: в любом месте шаблона вставляются теги , внутри которых можно написать код. Фактически мы имеем дело с обычной строковой интерполяцией:

      href="/lessons"> echo 'Lessons'; ?>   

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

     $name = 'Lessons'; ?>  href="/lessons"> echo $name; ?>   

    В этом примере мы добавили один блок сверху файла, внутри которого создали переменную. Затем мы использовали ее в другой вставке.

    Все содержимое файла находится в одном пространстве и блоки кода, определенные дальше по тексту, имеют доступ к данным предыдущих блоков. Что важно, подстановка данных из кода происходит только в том случае, если этот код выполняет печать:

     $name = 'Lessons'; $id = 23; ?>  href="/lessons/ echo $id; ?>"> echo $name; ?>   

    Вывод на экран после запуска:

    Для удобства вставки кода в HTML PHP предлагает альтернативный синтаксис для стандартных конструкций языка. Например, для вставки значения используется сокращенная версия тега начала PHP-кода: ?> . Она отличается от полной тем, что вместо

    Сокращенная вставка

     $name = 'Lessons'; ?>  href="/lessons/ 23 ?>"> $name ?>   

    If

     if ($a === 5) : ?> A is equal to 5  endif; ?> 

    Switch

     switch ($foo) : ?>  case 1: ?> .  endswitch; ?> 

    Foreach

      foreach ($users as $user) : ?>  $user->getName() ?>   endforeach; ?>  

    С одной стороны поддержка CGI внутри самого языка позволяет начать делать сайт «на коленке» без особых знаний программирования и HTTP, что многие и делают. С другой — PHP толкает к созданию не поддерживаемого кода, который не может никто прочитать кроме автора.

        Upload your files   enctype="multipart/form-data" action="upload.php" method="POST"> Upload your file  type="file" name="uploaded_file"> />  type="submit" value="Upload">     if (!empty($_FILES['uploaded_file']))  $path = "uploads/"; $path = $path . basename( $_FILES['uploaded_file']['name']); if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path))  echo "The file " . basename( $_FILES['uploaded_file']['name']) . " has been uploaded"; > else echo "There was an error uploading the file, please try again!"; > > 

    Такой способ программирования возможен только в PHP, потому что только PHP это сразу и язык, и шаблонизатор, и CGI-скрипт. При таком способе организации кода сайт быстро начинает представлять из себя мешанину HTML и PHP.

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

    Также PHP не поддерживает макеты — специализированные шаблоны, содержащие обвязку сайта, в которую вставляется HTML конкретного обработчика.

    Открыть доступ

    Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

    • 130 курсов, 2000+ часов теории
    • 1000 практических заданий в браузере
    • 360 000 студентов

    Наши выпускники работают в компаниях:

    не работает php код

    Всем привет, делаю простенький проект без фреймворков и всего такого. Написал код обычной формы для заполнения данных, и создал php страницу на которую эти данные будут отправляться, но при переходе на эту страницу мне просто показывается код в текстовом виде код формы

    код php файла

    "; echo $number; 

    введите сюда описание изображения

    прикрепляю еще скриншот того что будет если перейти к файлу send.php

    Отслеживать
    задан 5 авг 2020 в 8:49
    Антон Кравцов Антон Кравцов
    33 10 10 бронзовых знаков
    а вы закрыли код php в конце ?> ‘; echo $_POST[‘client-number’]; ?>
    5 авг 2020 в 8:55
    Да, закрывал, он вот тот же текст и пишет, то есть весь код он просто пишет текстом
    5 авг 2020 в 9:00

    Вероятно, у Вас не включен PHP в Вашем сервере. Создайте PHP-файл с содержимым и если Вы не видите информацию о текущей конфигурации PHP, значит PHP не включен.

    5 авг 2020 в 9:05

    у меня проект не на сервере, я просто создал в phpstorm проект и там сделал index страницу и файл send.php то есть проект даже не на локалке а просто на компе

    5 авг 2020 в 9:06

    Поверьте — когда будет ошибка синтаксиса вы это поймете!) В данном случае это ошибка не кода, а отсутствия сервера, который должен обрабатывать этот самый php код.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *