php标头重定向..不工作

时间:2015-11-24 23:51:25

标签: php html authentication login header

我检查过并重新检查,我不知道我做错了什么。没有错误出现,它只是在我提交登录页面后没有指示我...任何建议?

头:

    <html>
<head>
<title><?php echo $title; ?></title>
<style type ="text/css">


#top_links  a:link, a:visited{
    width: 100%;
    display: block;
    font-weight: bold;
    color: #FFFFFF;
    background-color: black;
    text-align: center;
    padding: 4px;
    text-decoration: none;
    text-transform: uppercase;
    border: none;
    font-family: "Trebuchet MS", Helvetica, sans-serif;
}

#top_links ul{
    display: table-row;
}

#top_links li{
    display: table-cell;
    margin: 0;
}

#top_links a:hover {
    color: pink;

}

</style>
</head>

<body<div id="top_links">
<ul>
    <li><a href="REGISTRATION_FORM&HANDLE.php">Register</a></li>
    <li><a href="LOGIN.php">Login</a></li>
</ul>
</div>

LOGIN.php文件:

<?php

require_once('../../../secure_files/mysql_connect.php');
$title = 'Login';
include_once('header.php');
if(isset($_POST['validate'])) {
    $errors = array();
    function validate_func($value, $msg, $val_type) {
        global $link;
        switch ($val_type) {
            case 'string':
                if(empty($value)){
                    $errors[] = "You forgot to enter your email ".$msg;
                }else{
                    $value = mysqli_real_escape_string($link, trim($value));
                }
                break;

            case 'password':
                if(empty($value)) {
                    $errors[] = "You forgot to enter your email ".$msg;
                }else{
                    $value = trim($value);
                }
                break;
            case 'number':
                if(!isset($value)||!is_numeric($value)) {
                    $error[] = "You forgot to enter ".$msg." or the value you entered is not a number.";
                }else{
                    $value = trim($value);
                }
                break;
        }
        return $value;
    }

    $email = validate_func($_POST['email'], "email", "string");
    $password = validate_func($_POST['password'], "password", "password");  
    if(!count($errors) != 0){
            foreach($errors as $value) {
                echo $value." <br />";
            }
    }else {
        $select_guest = "SELECT GUEST_INFO_ID FROM GUEST_INFO WHERE EMAIL = '$email' AND PASSWORD = sha1('$password') LIMIT 1";
        $exec_select_guest = @mysqli_query($link, $select_guest);
            if(mysqli_num_rows($exec_select_guest) != 1) {
                echo "You are not an authentic user, you are being directed to the registration page...";
                mysqli_close($link);
                header("Refresh:3; url='REGISTRATION_FORM&HANDLE.php'");
            }else{
                $one_record = @mysqli_fetch_row($exec_select_guest);
                setcookie('GUEST_INFO_ID', $one_record[0], 0, '/', '', 0, 0);
                echo "You are an authentic user";
                header("Refresh:3; url='GUEST_MAIN_MENU.php'");             
            }
    }

} else{
?>
    <div id="LOGIN_MAIN">
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method = "post" >

            <div>
            Email:<input type="text" name="email"  id="email"  />
            </div>

            <div>
            Password:<input type='password' name='password' id='password' />
             </div>

             <div>
            <input type='submit' name='submit' id='submit' value='Submit' />
            <input type='reset' name='reset' id='reset' value='Reset' />    
            <input type="hidden" name="validate" ID="validate" value="Reset" />
            </div>

        </form>

    </div>

<?php
}

include('footer.php');
?>

和我的页脚:

</body>
</html>

1 个答案:

答案 0 :(得分:0)

原因是,您在设置标题之前回应了一些内容。

任何标题必须在任何其他输出有效之前 请参阅php-manual for header()

删除

echo $value." <br />";
echo "You are not an authentic user, you a...";

或标题重定向之前的任何输出,它都可以工作!

如果您想在用户看到响应后重定向,则必须使用javascript重定向! 那将是这样的:

<script>
// redirects after 3 seconds
setTimeout(function(){ 
      window.location.href = "GUEST_MAIN_MENU.php";; 
   }, 3000);

</script>

Sidecomment:
无论如何,我建议在不加载新的(或相同的)php脚本的情况下测试用户凭据。看看javascript ajax!使用这种技术,用户将保持在同一页面上并获得更直接的响应,您的应用程序也可以对消息和重定向作出反应。