PHP提交自己的表单

时间:2015-06-16 19:42:40

标签: php forms

我正在尝试创建一个登录页面并让它提交给自己,然后根据用户是否经过身份验证进行重定向。但由于某种原因我每次提交时,用错误的用户名或密码,我希望它再次显示登录屏幕,但它只显示空白。但如果我正确登录,那么它就可以了。

<?php 
if (!empty($_POST)){ 

require_once 'includes/db.php';

    if($user->login($_POST["username"], $_POST["password"]))
        echo "user is logged in";   
}else{
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

<body>
<form action="" method="post">
<table align="center">
    <tr>
        <td>User name:</td>
        <td>Password: </td>
    </tr>
    <tr>
        <td><input type="text" name="username" /></td>
        <td><input type="password" name="password" /></td>
    </tr>
    <tr>
        <td><input type="submit" value="Login" /></td>
    </tr>
</table>
</form>
</body>
</html>
<?php
}
?>

2 个答案:

答案 0 :(得分:1)

那是因为你的!empty($_POST)子句因为$_POST变量不为空而触发,因为你只是发送了一些登录凭证(它们可能是错的,但这没关系)。

else子句只会在未发送任何内容时触发,因此基本上每当您使用表单提交任何内容时,如果登录凭据正确user is logged in将会出现,如果他们是错的,什么都不会被熄灭。

解决此问题的最简单方法是完全删除else子句,并将exit()添加到if子句中,检查凭据,如下所示:

<?php 
    if (!empty($_POST)) { 
        require_once 'includes/db.php';

        if ($user->login($_POST["username"], $_POST["password"])) {
            echo "user is logged in";

            /* Add exit() if you don't want the form to show
               up when login attempt was successful. */
        }
    }
?>

<!-- HTML CODE -->

答案 1 :(得分:0)

正确检查语法......

if($user->login($_POST["username"], $_POST["password"]))
{
        //if login success, then redirect to index.php
        header('Location:index.php');
}else{
        //if username and pass do not match or login fails, redirect to login.php

?>