Как я могу выполнить функцию PHP в действии формы?
Я пытаюсь запустить функцию из PHP script в действии формы.
Мой код:
<?php
require_once ( 'username.php' );
echo '
<form name="form1" method="post" action="username()">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
Я повторяю форму, но мне нужна функция "имя пользователя", которая вызывается из username.php для выполнения. как я могу сделать это простым способом для вышеперечисленного?
Ответы
Ответ 1
<?php
require_once ( 'username.php' );
if (isset($_POST['textfield'])) {
echo username();
return;
}
echo '
<form name="form1" method="post" action="">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
Вам нужно запустить функцию на странице, на которую отправляется форма.
Ответ 2
В PHP функции не будут оцениваться внутри строк, потому что существуют разные правила для переменных.
<?php
function name() {
return 'Mark';
}
echo 'My name is: name()'; // Output: My name is name()
echo 'My name is: '. name(); // Output: My name is Mark
Параметр действия тега в HTML не должен ссылаться на функцию PHP, которую вы хотите запустить. Действие должно относиться к странице на веб-сервере, которая будет обрабатывать ввод формы и возвращать новый HTML пользователю. Это может быть то же место, что и PHP script, который выводит форму, или некоторые люди предпочитают делать отдельный файл PHP для обработки действий.
Основной процесс одинаковый:
- Создайте HTML-форму для пользователя.
- Пользователь заполняет форму, нажимает кнопку отправки.
- Данные формы отправляются в местоположения, определенные действием на сервере.
- script проверяет данные и делает с ними что-то.
- Обычно возвращается новая HTML-страница.
Простым примером может быть:
<?php
// $_POST is a magic PHP variable that will always contain
// any form data that was posted to this page.
// We check here to see if the textfield called 'name' had
// some data entered into it, if so we process it, if not we
// output the form.
if (isset($_POST['name'])) {
print_name($_POST['name']);
}
else {
print_form();
}
// In this function we print the name the user provided.
function print_name($name) {
// $name should be validated and checked here depending on use.
// In this case we just HTML escape it so nothing nasty should
// be able to get through:
echo 'Your name is: '. htmlentities($name);
}
// This function is called when no name was sent to us over HTTP.
function print_form() {
echo '
<form name="form1" method="post" action="">
<p><label><input type="text" name="name" id="textfield"></label></p>
<p><label><input type="submit" name="button" id="button" value="Submit"></label></p>
</form>
';
}
?>
В будущей информации я рекомендую прочитать уроки PHP: http://php.net/tut.php
Существует даже раздел о работе с формами.
Ответ 3
Я не уверен, что понимаю, чего вы пытаетесь достичь, поскольку у нас нет того, что должно возвращаться username()
, но вы можете попробовать что-то подобное. Я бы также рекомендовал вам не эхо-целую страницу и, скорее, использовать что-то подобное, ее гораздо легче читать и поддерживать:
<?php
require_once ( 'username.php' );
if (isset($_POST)) {
$textfield = $_POST['textfield']; // this will get you what was in the
// textfield if the form was submitted
}
?>
<form name="form1" method="post" action="<?php echo($_SERVER['PHP_SELF']) ?">
<p>Your username is: <?php echo(username()) ?></p>
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>
Это опубликует результаты на той же странице. Итак, в первый раз, когда вы показываете страницу, отображается только пустая форма, если вы нажмете на submit, поле текстового поля будет в переменной $textfield
, и вы сможете отобразить ее снова, как хотите.
Я не знаю, должна ли функция username()
вернуть вам URL-адрес, куда вы должны отправлять результаты, но то, что вы хотите в атрибуте action
вашей формы. Я привел результат в примерном абзаце, чтобы вы могли увидеть, как вы можете отобразить результат. См. Раздел "Ваше имя пользователя...".
//Правка:
Если вы хотите отправить значение, не выходя из страницы, вы хотите использовать AJAX. Сделайте поиск в jQuery на StackOverflow или в Google.
Возможно, вы захотите, чтобы ваша функция вернула имя пользователя, а не эхо. Но если вы абсолютно хотите отгонять его от функции, просто назовите ее как <?php username() ?>
в своей HTML-форме.
Я думаю, вам нужно будет понять поток клиент-серверного процесса ваших страниц, прежде чем идти дальше. Скажем, что примерный код выше называется form.php.
- Вызывается ваш form.php.
- form.php создает HTML-код и отправляется в браузер клиента.
- Клиент видит только полученную HTML-форму.
- Когда пользователь нажимает кнопку, у вас есть два варианта: a) пусть браузер делает обычную вещь, поэтому отправьте значения в полях формы на страницу, указанную в действии (в этом случае URL-адрес определяется PHP_SELF, который это текущий page.php). Или б) используйте javascript для перемещения этих данных на страницу без обновления страницы, это обычно называется AJAX.
- Страница, в вашем случае она может быть изменена на username.php, затем будет проверяться в отношении базы данных, если имя пользователя существует, а затем вы хотите восстановить HTML, который содержит нужные вам значения, к шагу 1.
Ответ 4
Я думаю, это должно быть так.
<?php
require_once ( 'username.php' );
echo '
<form name="form1" method="post" action="<?php username() ?>">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
Ответ 5
Лучше что-то вроде этого... опубликуйте данные на собственной странице и, возможно, сделайте проверку на входе пользователя.
<?php
require_once ( 'username.php' );
if(isset($_POST)) {
echo "form post"; // ex $_POST['textfield']
}
echo '
<form name="form1" method="post" action="' . $_SERVER['PHP_SELF'] . '">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
Ответ 6
Действительно ли это вызов функции для атрибута действия? или он должен быть включен в атрибут onSUbmit, потому что для атрибута действия соглашения требуется страница /URL.
Я думаю, вы должны использовать AJAX с этим,
Есть много PHP AJAX Framework для выбора из
http://www.phplivex.com/example/submitting-html-forms-with-ajax
http://www.xajax-project.org/en/docs-tutorials/learn-xajax-in-10-minutes/
ETC.
Или классический способ
http://www.w3schools.com/php/php_ajax_php.asp
Я надеюсь, что эти ссылки помогут
Ответ 7
Вы можете поместить функцию username() на другую страницу и отправить форму на эту страницу...