PHP表单验证和结构

时间:2012-03-30 10:53:32

标签: php forms validation

如果提交不成功,我正在寻找一些帮助构建Web表单以包含放置在表单上正确位置的PHP验证和错误消息。在我将实际的表单信息和验证提供给结构之前,我只是将一个简单的表单与一些随机验证规则放在一起,仅用于概念验证。

这是我的代码: -

<?php
if($_POST['name'] && $_POST['email'])   {

    $errors = array();
    $name = $_POST['name'];
    $email = $_POST['email'];

    if (strlen($name) > 10) {
        $errors['name'] = 'Name is too long';
    }

    if(empty($name) || empty($email))   {
        $errors['required'] = 'All fields required';
    }
}

if(empty($errors) && $_POST)    {
    echo 'Your form has been submitted';            

}   elseif ($errors || !$_POST) {
?>  
        <form name="form" action="index.php" method="post">
        <?PHP if (isset($errors['required']))   { echo $errors['required'];} ?>
            Name:<br>
            <input type="text" name="name" value="<?php echo $name ?>"><?PHP if (isset($errors['name'])){ echo $errors['name']; } ?><br>
            Email<br>
            <input type="text" name="email"><br>
            <input type="submit" name="submit" value="submit">
        </form>
<?PHP   }
?>

结果是,我的表单显示并提交,但验证有点被忽略。如果任何验证导致错误,而不是表单上显示的错误,页面只返回空白,没有错误消息或表单。任何人都可以告诉我哪里出错了?

非常感谢任何帮助!

谢谢,Ben(如果你还没有猜到我是PHP和HTML的新手!)

4 个答案:

答案 0 :(得分:0)

我认为您的问题可能就在这一行

}   elseif ($errors || !$_POST) {

尝试使用

}   elseif (!empty($errors) || !$_POST) {

答案 1 :(得分:0)

我的建议是处理开发模式,并将错误报告设置为显示通知和警告。任何变量初始化都会很好。

我在下面修改了你的代码,为你提供变量检查和初始化的要点:)

<?php
$errors = array();
$name='';
$email='';
if(isset($_POST['name']) && isset($_POST['email']))   {


    $name = $_POST['name'];
    $email = $_POST['email'];

    if (strlen($name) > 10) {
        $errors['name'] = 'Name is too long';
    }

    if(empty($name) || empty($email))   {
        $errors['required'] = 'All fields required';
    }
}

if(empty($errors) && $_POST)    {
    echo 'Your form has been submitted';            

}   elseif ($errors || !$_POST) {
?>  
        <form name="form" action="9941580.php" method="post">
        <?PHP if (isset($errors['required']))   { echo $errors['required'];} ?>
            Name:<br>
            <input type="text" name="name" value="<?php echo $name ?>"><?PHP if (isset($errors['name'])){ echo $errors['name']; } ?><br>
            Email<br>
            <input type="text" name="email"><br>
            <input type="submit" name="submit" value="submit">
        </form>
<?php   }
?>

答案 2 :(得分:0)

如果一个或两个字段都为空,

if($_POST['name'] && $_POST['email']) {将返回false,因此验证(在条件内发生)永远不会运行。

如果提供了电子邮件地址且名称超过10个字符,则表单会显示相关错误(“名称太长”)

答案 3 :(得分:0)

请看下面的建议

<?php 
if(isset($_POST['submit']))   { 

$errors = array(); 
$name = $_POST['name']; 
$email = $_POST['email']; 

if (strlen($name) > 10) { 
    $errors['name'] = 'Name is too long'; 
} 

if(empty($name) || empty($email))   { 
    $errors['required'] = 'All fields required'; 
} 

if(empty($errors) && $_POST)    { 
echo 'Your form has been submitted';             

}   elseif ($errors || !$_POST) { 
?>   
    <form name="form" action="" method="post"> 
    <?PHP if (isset($errors['required']))   { echo $errors['required'];} ?> 
        Name:<br> 
        <input type="text" name="name" value="<?php echo $name ?>"><?PHP if (isset($errors    ['name'])){ echo $errors['name']; } ?><br> 
        Email<br> 
        <input type="text" name="email"><br> 
        <input type="submit" name="submit" value="submit"> 
    </form> 
<?PHP   } 



}else{
?>
 <form name="form" action="" method="post"> 

        Name:<br> 
        <input type="text" name="name" value=""><br> 
        Email<br> 
        <input type="text" name="email"><br> 
        <input type="submit" name="submit" value="submit"> 
    </form> 
<?php
}
?>