Я пытаюсь запустить функцию из скрипта PHP в действии формы.
<?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 для выполнения. как я могу сделать это одним из способов вышесказанного?
<?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>'; ?>
Вам нужно запустить функцию на странице, на которую отправляется форма.
В 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, который выводит форму, или некоторые люди предпочитают делать отдельный PHP-файл для обработки действий.
Основной процесс один и тот же:
Простой пример:
<?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
Существует даже раздел о работе с формами.
Я не уверен, что понимаю, чего вы пытаетесь достичь, поскольку у нас нет того, что должно возвращаться 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-адрес, куда вы должны отправлять результаты, но это то, что вам нужно в атрибуте действия вашей формы. Я привел результат в примерном абзаце, чтобы вы могли увидеть, как вы можете отобразить результат. См. Раздел «Ваше имя пользователя …».
// Редактировать :
Если вы хотите отправить значение, не выходя из страницы, вы хотите использовать AJAX. Сделайте поиск в jQuery на StackOverflow или в Google.
Вероятно, вы захотите, чтобы ваша функция возвращала имя пользователя, а не эхо. Но если вы абсолютно хотите отгонять его от функции, просто назовите ее как <?php username() ?>
В вашей HTML-форме.
Я думаю, вам нужно будет понять поток клиент-серверного процесса ваших страниц, прежде чем идти дальше. Предположим, что пример кода выше называется form.php.
Я думаю, это должно быть так.
<?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>'; ?>
Лучше что-то вроде этого … отправьте данные на собственную страницу и, возможно, сделайте проверку ввода пользователя.
<?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>'; ?>
Действительно ли это вызов функции для атрибута действия? или он должен быть включен в атрибут onSUbmit, потому что для атрибута действия соглашения требуется страница / URL.
Я думаю, вы должны использовать AJAX,
Существует много возможностей PHP AJAX Frameworks на выбор:
http://www.phplivex.com/example/submitting-html-forms-with-ajax
http://www.xajax-project.org/en/docs-tutorials/learn-xajax-in-10-minutes/
И Т.П.
Или классический способ
http://www.w3schools.com/php/php_ajax_php.asp
Надеюсь, эти ссылки помогут
Вы можете поместить функцию username () на другую страницу и отправить форму на эту страницу …