Как я могу выполнить функцию PHP в действии формы? - PullRequest
25 голосов
/ 27 февраля 2009

Я пытаюсь запустить функцию из сценария 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", которая вызывается из username.php. как я могу сделать это подобным образом вышеупомянутым?

Ответы [ 7 ]

20 голосов
/ 27 февраля 2009
<?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>';
?>

Вам необходимо запустить функцию на странице, на которую отправляется форма.

13 голосов
/ 27 февраля 2009

В 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

Параметр action для тега в HTML не должен ссылаться на функцию PHP, которую вы хотите запустить. Действие должно относиться к странице на веб-сервере, которая будет обрабатывать ввод формы и возвращать новый HTML-код пользователю. Это может быть то же местоположение, что и сценарий PHP, который выводит форму, или некоторые люди предпочитают создавать отдельный файл PHP для обработки действий.

Базовый процесс одинаков в любом случае:

  1. Создание HTML-формы для пользователя.
  2. Пользователь заполняет форму, нажимает кнопку отправки.
  3. Данные формы отправляются в местоположения, определенные действием на сервере.
  4. Скрипт проверяет данные и что-то с ними делает.
  5. Обычно возвращается новая 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

Есть даже раздел о работе с формами.

8 голосов
/ 27 февраля 2009

Я не уверен, что понимаю, чего вы пытаетесь достичь, поскольку у нас нет того, что 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>

Результаты будут опубликованы на той же странице. Поэтому при первом отображении страницы отображается только пустая форма. Если вы нажмете кнопку «Отправить», поле текстового поля будет в переменной $textfield, и вы сможете снова отобразить ее, как хотите.

Я не знаю, должна ли функция username() возвращать вам URL-адрес, куда вы должны отправить результаты, но это то, что вам нужно в атрибуте action вашей формы. Я записал результат в пример абзаца, чтобы вы увидели, как можно отобразить результат. См. Часть «Ваше имя пользователя ...».


// Редактировать :

Если вы хотите отправить значение, не покидая страницы, вы хотите использовать AJAX. Выполните поиск в jQuery в StackOverflow или в Google.

Возможно, вы захотите, чтобы ваша функция возвращала имя пользователя, а не отображала его. Но если вы абсолютно хотите вывести его из функции, просто вызовите его так: <?php username() ?> в вашей HTML-форме.

Я думаю, что вам нужно понять процесс клиент-серверных процессов ваших страниц, прежде чем идти дальше. Допустим, приведенный выше пример кода называется form.php.

  1. Ваш form.php называется.
  2. form.php генерирует HTML и отправляется в браузер клиента.
  3. Клиент видит только полученную HTML-форму.
  4. Когда пользователь нажимает кнопку, у вас есть два варианта: а) позволить браузеру делать все как обычно, поэтому отправьте значения в полях формы на страницу, указанную в действии (в этом случае URL-адрес определяется PHP_SELF, который это текущий page.php). Или б) использовать javascript для отправки этих данных на страницу без обновления страницы, это обычно называется AJAX.
  5. Страница, в вашем случае она может быть изменена на username.php, затем проверит по базе данных, существует ли имя пользователя, и затем вы захотите перегенерировать HTML, содержащий нужные значения, обратно к шагу 1.
4 голосов
/ 22 апреля 2010

Я думаю, что так должно быть ..

<?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>';
?>
3 голосов
/ 27 февраля 2009

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

   <?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>';
    ?>
1 голос
/ 29 ноября 2011

Действительно ли это вызов функции для атрибута действия? или он должен быть в атрибуте onSUbmit, потому что по соглашению для атрибута action требуется страница / URL.

Я думаю, вы должны использовать AJAX с этим,

Существует множество фреймворков PHP AJAX на выбор

http://www.phplivex.com/example/submitting-html-forms-with-ajax

http://www.xajax -project.org / о / Docs-учебники / учиться-Xajax-в-10-минут /

Т.Д.

Или классическим способом

http://www.w3schools.com/php/php_ajax_php.asp

Надеюсь, эти ссылки помогут

0 голосов
/ 27 февраля 2009

Вы можете поместить функцию username () на другую страницу и отправить форму на эту страницу ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...