【问题标题】:validation username and password验证用户名和密码
【发布时间】:2013-10-21 10:34:44
【问题描述】:

这是我的 php 验证码!

   <?php        //------------------------------------------------------------------------------>PHP VALIDATION
                $user="";
                $pass="";
                $nameErr="";
                $passErr="";
                //$pattern='/^[a-zA-Z0-9@_ ]*$/';
                if($_SERVER['REQUEST_METHOD']=='POST')
                {
                    if(empty($_POST['uname']))
                    {
                        $nameErr='Enter Your Name!';
                    }
                    else 
                    {
                        $user = test_input($_POST['uname']);
                        if(!preg_match('/^[a-zA-Z0-9@_]*$/',$user))
                            {
                                $nameErr=' Re-Enter Your Name! Format Inccorrect!( only alpha, numbers,@_ are allowed)';
                            }
                    }
                    if(empty($_POST['pas']))
                    {
                        $passErr='Enter Your Password!';
                    }
                    else
                    {
                        $user = test_input($_POST['pas']);
                        if(!preg_match('/^[a-zA-Z0-9@_]*$/',$pass))
                        {
                            $passErr='Invalid Format! Re-Enter Password!';
                        }
                    }   
                }



            function test_input($data)
            {
                 $data = trim($data);
                 $data = stripslashes($data);
                 $data = htmlspecialchars($data);
                 return $data;
            }
                ?>

HTML:
<html>
<body>
<div id='shw'><?php echo $user;?></div>
                <fieldset id='fld'>
                    <form method='post' name='f1' action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>'>
                        <table>
                            <tr>
                                <td>
                                    User Name:<input type='text' id='uname' name='uname' class='uname' placeholder='USERNAME' autocomplete='off' autofocus maxlength='25'><span class='error'>*</span>
                                    Password:<input type='password' id='pass' class='pass' name='pas' placeholder='PASSWORD' autocomplete='off'>
                                            <input type='submit' name='submit' id='loggin' value='LOGIN' class='login' onclick='val()'>
                                </td>
                            </tr>
                        </table>
                    </form>
                </fieldset>
            <div class='errormsg' id='errmsg'><?php echo $nameErr;?></div>
            </div>
</body>
</html>

我在验证时遇到问题我想在提交后显示用户名。 问题是我的用户名如果​​其他运行良好,但它会跳过密码部分。我希望它也验证 pass 字段然后只显示用户名! 请帮忙!

【问题讨论】:

  • 在检查的开头添加var_dump($_POST); 以查看发送的内容。只是一个提示,为他们的工作命名函数,因为 test_input 不进行测试;)
  • 你混合 post 和定义的变量,比如要求 empty($_POST['pas']) ,然后用 $user = test_input($_POST['pas']);但是在 preg_match 中检查 $pass,并且 $pass 在顶部被定义为非值 ""。
  • 不需要清理密码,因为无论如何您都想使用适当的哈希函数来存储它,请参阅函数password_hash()
  • 为什么要限制密码格式?

标签: php html


【解决方案1】:

$user = test_input($_POST['pas']); 应该是$pass = test_input($_POST['pas']);

您当前的代码在您的第一个if..else 块中设置了$user,并不是PHP 跳过了您的第二个if...else 块,只是无论这个块做什么,ûser 已经设置好了。 如果您不想在密码无效时显示 $user ,只需稍后在代码中设置 $user : $nameErr = null; $passErr = null;

if (empty($_POST['uname'])) {
    $nameErr = 'Enter Your Name!';
} else {
    $userTest = test_input($_POST['uname']);

    if (!preg_match('/^[a-zA-Z0-9@_]*$/', $userTest)) {
        $nameErr = ' Re-Enter Your Name! Format Inccorrect! (only alpha, numbers, @_ are allowed)';
    } else {
        $valid++;
    }
}
if (empty($_POST['pas'])) {
    $passErr = 'Enter Your Password!';
} else {
    $pass = test_input($_POST['pas']);

    if (!preg_match('/^[a-zA-Z0-9@_]*$/', $pass)) {
        $passErr = 'Invalid Format! Re-Enter Password!';
    } else {
        $valid++;
    }
}

if (is_null($nameErr) && is_null($passErr)) {
    $user = $_POST['uname']
}

在这里,我只是在测试结束时检查 $nameErr 和 $passErr 是否仍然为空。如果两者都为空,那么您可以设置 $user,因为没有检测到错误。

【讨论】:

  • @evuez:如果您编辑其他问题,请查看整个帖子,而不是仅仅分离代码块。其他一些修订仍处于开放状态。我现在已经更正了它们。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 2013-12-26
  • 2016-01-24
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多