如何在表单操作中执行PHP函数?

时间:2009-02-27 16:02:00

标签: 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.php调用的函数“username”来执行。我怎么能以与上面相似的方式做到这一点?

7 个答案:

答案 0 :(得分:20)

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

您需要在表单发送到的页面中运行该功能。

答案 1 :(得分:13)

在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中标记的action参数不应引用要运行的PHP函数。操作应该引用Web服务器上的一个页面,该页面将处理表单输入并将新HTML返回给用户。这可以与输出表单的PHP脚本位于同一位置,或者某些人更喜欢创建单独的PHP文件来处理操作。

基本过程是相同的两种方式:

  1. 为用户生成HTML表单。
  2. 用户填写表单,点击提交。
  3. 表单数据将发送到服务器上的操作定义的位置。
  4. 脚本验证数据并对其执行某些操作。
  5. 通常会返回一个新的HTML页面。
  6. 一个简单的例子是:

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

    甚至有关于处理表格的部分。

答案 2 :(得分:8)

我不确定我理解你想要实现的目标,因为我们没有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。在StackOverflow或Google上搜索jQuery。

您可能希望让您的函数返回用户名而不是回显它。但是,如果您绝对想要从函数中回显它,只需在HTML表单中将其称为<?php username() ?>

我认为您需要在进一步了解之前了解页面的客户端 - 服务器进程的流程。假设上面的示例代码名为form.php。

  1. 您的form.php被调用。
  2. form.php生成HTML并发送到客户端的浏览器。
  3. 客户端只能看到生成的HTML表单。
  4. 当用户按下按钮时,您有两个选择:a)让浏览器执行常规操作,因此将表单字段中的值发送到操作中指定的页面(在这种情况下,URL由PHP_SELF定义,是当前的page.php)。或者b)使用javascript将这些数据推送到页面而不刷新页面,这通常称为AJAX。
  5. 一个页面,在您的情况下,它可以更改为username.php,然后将验证用户名是否存在,然后您想要重新生成包含所需值的HTML,返回步骤1。

答案 3 :(得分: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>';
?>

答案 4 :(得分:3)

这样的事情更好......将数据发布到自己的页面,并可能检查用户输入。

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

答案 5 :(得分:1)

它真的是对action属性的函数调用吗?或者它应该在onSUbmit属性上,因为按照惯例,action属性需要一个页面/ 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/

ETC。

或经典方式

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

我希望这些链接能够提供帮助

答案 6 :(得分:0)

您可以将username()函数放在另一个页面中,然后将表单发送到该页面......