form action функция php
Работа с формами в PHP
Формы
Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.
Через формы можно отправлять как простую текстовую информацию, так и файлы.
Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.
HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.
PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:
Практически любой современный сайт содержит как минимум несколько разных HTML-форм.
Отправка формы
Рассмотрим один типичный пример — форма обратной связи. Для связи пользователей с авторами сайта, как правило, используются формы обратной связи, где человек указывает имя, почту для обратной связи и текст своего сообщения.
Такая форма в HTML может выглядеть следующим образом:
Это очень простая форма, состоящая из трёх полей и одной кнопки отправки.
Почти весь приведённый код описывает внешний вид и содержание формы, но следует обратить внимание на два атрибута тега
Тут есть два важных отличия от первого примера:
PHP автоматически сохраняет все загруженные файлы во временную папку на сервере. Но хранить там файлы нельзя, потому что эта директория периодически очищается, и ссылку на такой файл нельзя дать на сайте. Решение здесь только одно — переместить загруженный файл в другую папку. Перемещение файла всегда выполняют сразу после загрузки.
Перемещение загруженного файла
Код для перемещения файла в новую папку:
Функция move_uploaded_file() выполняет два действия:
Валидация формы
Валидация формы — это проверка содержимого её полей. Задача такой проверки — убедиться, что необходимые поля заполнены, а значения в них соответствуют ожидаемому формату.
Так, например, при регистрации пользователя на сайте, он должен заполнить поля с адресом электронной почты и придумать себе пароль. Оба поля обязательны к заполнению, но значение из поля email также должно быть корректным email-адресом.
Помимо текстовых значений формы, можно проверять формат и размер загружаемых файлов.
Общий подход к валидации
При выполнения валидации любой формы порядок действий будет всегда одним:
Помогите разобраться с Action в form?
Помогите, пожалуйста, понять:
Собственно, вопрос такой: пользователь вводит свои данные (логин и пароль) на index.php, к примеру. Каким образом необходимо задать action и организовать авторизацию, чтобы не перенаправлять авторизацию в другой файл, а обработать ее в index.php?
Что-то такого типа? То есть, по нажатию кнопки, будем вызывать php-функцию внутри index.php?
onsubmit – событие javascript и никакого отношения к PHP не имеет.
Что касается вашего вопроса, то разместите код проверки логина в index.php.
Ваша форма:
Помоему автор не совсем удачно задал вопрос.
Для любого программиста замена action и «не перенаправлять авторизацию в другой файл, а обработать ее в index.php» означает: вместо запроса к login.php сделать запрос к index.php и внутри него подгрузить модуль авторизации.
В этом случае ответ DevMan вполне себе приемлемое решение.
Но наличие onsubmit=«check_dataLogin()» настораживает и наводит на мысль, что автор все таки хочет прикрутить авторизацию через ajax.
Конкретные примеры кода приводить не буду, ибо вы не указали пользуетесь каким либо JS фреймворком или пишите все от руки в ноутпэде.
Могу только обратить внимание на несколько подводных камней.
1. ваша функуция check_dataLogin() должна всегда возвращать false, в противном случае после того как она отработает бразуер пошлет стандартный post запрос на сервер (не ajax)
2. оставьте form action=login.php. это ваш fallback на случай если в браузере отключен JavaScript.
3. результат у login.php должен личный для обыного post запроса и для ajax: может быть редирект на index.php, либо снова форма логина ( если пароль не верный), или же json для вашего ajax запроса (а может и не json, как реализуете так и будет)
П.С. Я человек новый на хабре и не совсем уверен что в Q&A это у местно, но в мирей айти есть некая этика как задавать вопросы. Практически на всех irc каналах или maillist, в которых я учавствую, подобный вопрос могут проигнорирывать или заклевать вас за «отсутсвие культуры общения». Если повезет с вами сыграют в 10 вопросов, пытаясь выяснить чего же вы все таки добиваетесь.
Для того чтобы вам помогали, ответы были развернутые и быстрые, научитесь формулирывать вопросы в понятной для других форме. Ведь не даром говорят что правильно поставленный вопрос содержит в себе половину ответа.
может это поможет вам goo.gl/EiskH
и еще (без перевода прадва) whathaveyoutried.com
Спасибо!
Очень развернутый ответ! 🙂
К теме Q&A. Я не очень хорошо владею терминологией в веб-разработке. Поэтому вопрос показался, наверное, некорректным. Я попробую еще раз:
на одном из своих проектов я делал авторизацию таким образом:
Такой подход создает очень много php-файлов с одной функцией. Я и подумал: «а что если авторизовывать пользователя в том же php-файле, не создавая кучу этих самых файлов с одной функцией?»
Такой подход создает очень много php-файлов с одной функцией.
How can I execute a PHP function in a form action?
I am trying to run a function from a PHP script in the form action.
My code:
I echo the form but I want the function «username» which is called from username.php to be executed. how can I do this in a simliar way to the above?
7 Answers 7
You need to run the function in the page the form is sent to.
In PHP functions will not be evaluated inside strings, because there are different rules for variables.
The action parameter to the tag in HTML should not reference the PHP function you want to run. Action should refer to a page on the web server that will process the form input and return new HTML to the user. This can be the same location as the PHP script that outputs the form, or some people prefer to make a separate PHP file to handle actions.
The basic process is the same either way:
A simple example would be:
For future information I recommend reading the PHP tutorials: http://php.net/tut.php
There is even a section about Dealing with forms.
I’m not sure I understand what you are trying to achieve as we don’t have what username() is supposed to return but you might want to try something like that. I would also recommend you don’t echo whole page and rather use something like that, it’s much easier to read and maintain:
I don’t know if the username() function was supposed to return you the URL of where you should send the results but that’s what you’d want in the action attribute of your form. I’ve put the result down in a sample paragraph so you see how you can display the result. See the «Your username is. » part.
// Edit:
If you want to send the value without leaving the page, you want to use AJAX. Do a search on jQuery on StackOverflow or on Google.
You would probably want to have your function return the username instead of echo it though. But if you absolutely want to echo it from the function, just call it like that in your HTML form.
Работа с формами
Для передачи данных от пользователя Web-страницы на сервер используются HTML-формы. Для работы с формами в PHP предусмотрен ряд специальных средств.
Предварительно определенные переменные
В PHP существует ряд предварительно определенных переменных, которые не меняются при выполнении всех приложений в конкретной среде. Их также называют переменными окружения или переменными среды. Они отражают установки среды Web-сервера Apache, а также информацию о запросе данного браузера. Есть возможность получить значения URL, строки запроса и других элементов HTTP-запроса.
Пример 1
В результате на экране появится список всех глобальных переменных, включая переменные окружения. Наиболее часто используемые из них:
Переменная | Описание | Cодержание |
---|---|---|
$_SERVER[‘HTTP_USER_AGENT’] | Название и версия клиента | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.11 Safari/535.19 |
$_SERVER[‘REMOTE_ADDR’] | IP-адрес | 188.68.217.15 |
getenv(‘HTTP_X_FORWARDED_FOR’) | Внутренний IP-адрес клиента | |
$_SERVER[‘REQUEST_METHOD’] | Метод запроса ( GET или POST ) | GET |
$_SERVER[‘QUERY_STRING’] | При запросе GET закодированные данные, передаваемые вместе с URL | |
$_SERVER[‘REQUEST_URL’] | Полный адрес клиента, включая строку запроса | |
$_SERVER[‘HTTP_REFERER’] | Адрес страницы, с которой был сделан запрос | http://htmlweb.ru/ |
$_SERVER[‘PHP_SELF’] | Путь к выполняемой программе | /index.php |
$_SERVER[‘SERVER_NAME’] | Домен | htmlweb.ru |
$_SERVER[‘REQUEST_URI’] | Путь | /php/php_form.php |
Обработка ввода пользователя
PHP-программу обработки ввода можно отделить от HTML-текста, содержащего формы ввода, а можно расположить на одной странице.
Пример 2
При обработки элемента с многозначным выбором для доступа ко всем выбранным значениям нужно к имени элемента добавить пару квадратных скобок. Для выбора нескольких эллементов следует удерживать клавишу Ctrl.
Работа с формами
Пример #1 Простейшая форма HTML
Пример #2 Выводим данные формы
Пример вывода данной программы:
В PHP можно также работать и с XForms, хотя вы найдёте работу с обычными HTML-формами довольно комфортной уже через некоторое время. Несмотря на то, что работа с XForms не для новичков, они могут показаться вам интересными. В разделе возможностей PHP у нас также есть короткое введение в обработку данных из XForms.
User Contributed Notes 3 notes
You should use the GET method when your form is, well, getting something off the server and not actually changing anything. For example, the form for a search engine should use GET, since searching a Web site should not be changing anything that the client might care about, and bookmarking or caching the results of a search-engine query is just as useful as bookmarking or caching a static HTML page.
POST is not more secure than GET.
Security is only a consideration here due to the fact that a GET is easier to share than a POST. Example: you don’t want a password to be sent by GET, because the user might share the resulting URL and inadvertently expose their password.
However, a GET and a POST are equally easy to intercept by a well-placed malicious person if you don’t deploy TLS/SSL to protect the network connection itself.
All Forms sent over HTTP (usually port 80) are insecure, and today (2017), there aren’t many good reasons for a public website to not be using HTTPS (which is basically HTTP + Transport Layer Security).
As a bonus, if you use TLS you minimise the risk of your users getting code (ADs) injected into your traffic that wasn’t put there by you.