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

Я пытаюсь запустить функцию из сценария 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)

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

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

Есть много фреймворков PHP AJAX на выбор

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

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

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

   <?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>';
    ?>
<?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>';
?>

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

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

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

В 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-файл для обработки действий.

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

  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

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

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

<?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>';
?>