如何在按下“发送表单”按钮后调用PHP表单字段验证?

时间:2015-05-22 14:48:43

标签: php

我是PHP的新手

我用PHP和HTML(form.php)编写了这个简单的在线表单:

<?php 
$errors = array();
$missing = array();
if (isset($_POST['send'])) {
    $to = 'david@example.com';
    $subject = 'Feedback from contact form';
    $expected = array('name', 'email', 'comments');
    $required = array('name', 'comments');
    require './includes/mail_process.php';
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Contact Us</title>
<link href="../styles.css" rel="stylesheet" type="text/css">
</head>

<body>
<h1>Contact Us</h1>
<?php if ($errors || $missing) { ?>
<p class="warning">Please fix the item(s) indicated.</p>
<?php }?>
<form name="contact" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <p>
        <label for="name">Name:
        <?php if ($missing && in_array('name', $missing)) { ?>
        <span class="warning">Please enter your name</span>
        <?php } ?>
        </label>
        <input type="text" name="name" id="name">
    </p>
    <p>
        <label for="email">Email:
        <?php if ($missing && in_array('email', $missing)) { ?>
        <span class="warning">Please enter your email address</span>
        <?php } ?>
        </label>
        <input type="text" name="email" id="email">
    </p>
    <p>
        <label for="comments">Comments:
        <?php if ($missing && in_array('comments', $missing)) { ?>
        <span class="warning">You forgot to add your comments</span>
        <?php } ?>
        </label>
        <textarea name="comments" id="comments"></textarea>
    </p>
    <p>
        <input type="submit" name="send" id="send" value="Send Comments">
    </p>
</form>
</body>
</html>

如您所见,有两个主要的PHP部分:

的上层
  • 初始化两个数组
  • 检查是否单击了“发送”按钮。
  • 如果单击“发送”按钮,则处理表单。

较低的一个,包括“body”部分中的所有if语句。

当我运行form.php时,页面显示我看到3个字段和一个“发送”按钮。

这是否意味着,此时,处理了PHP IF语句(在“body”部分中),并且每个语句都返回false,这就是为什么我没有看到屏幕上显示的错误消息?

OR

if语句(在“body”部分中)仅在单击“发送”按钮后处理?

初始化“错误”和“缺失”数组的相同问题 - &gt;一旦我运行form.php文件并看到3个字段和一个“发送”按钮,那么这些是初始化的,或者只有在我点击“发送”按钮后,上面的PHP部分才会第一次运行?

总结一下,当我运行form.php时,页面是“从上到下,逐行”处理还是有不同的控制流(因为在我点击“发送按钮”后,上面的PHP部分也被调用,所以请澄清)。

重新编辑:首次加载页面时,正在处理多个PHP if语句。正确?有没有办法让它更优化?假设有100万用户第一次访问该页面(在填写表单之前),那么这些if语句将被处理100万次没有任何时间。 从性能角度来看,这不是一件坏事吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

除了循环和调用函数之外,PHP文件将从上到下运行。

您的表单指向生成它的同一PHP文件。单击“发送”按钮时,将再次运行完整的PHP文件。

答案 1 :(得分:0)

要防止PHP在表单为空时运行,请为空表单使用不同的HTML页面。让我们说input.html,这可以是纯HTML,没有PHP。

<html>
<body>
 <form method="post" action="process-the-input.php">
  <input id="user">
  <button type="submit">Send</button>
 </form>
</body>

并且PHP文件将被称为process-the-input.php,并且将像您的问题中的源一样运行。