0

私がしなければならないログインページがあります:ユーザーとパスワードを挿入します(1回)。ボタン (ログイン ボタン) を 2 回クリックして実際にログインします。PHP 5.3 と HeidiSQL で Xamp を使用します。既にセッションに参加している場合は、ログイン ウィンドウをスキップし、コンテンツ ページにリダイレクトします。したい)これは私のコードです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
 session_start();
 include("../conect.php");



 if(isset($_SESSION['name']))

 { 
    $username = $_SESSION['name']; 
    $pass = $_SESSION['pass'];
    $check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());

    while($info = mysql_fetch_array( $check ))  
        {
                if ($pass != $info[2]){
                    header('.<?php $_PHP_SELF ?>.');  
                }

                else
                    {   if($_SESSION['role']==0) 
                        header("Location: content0.php");

                        if($_SESSION['role']==1) 
                        header("Location: content1.php");

                        if($_SESSION['role']==2) 
                        header("Location: content2.php");
                    }
        }
 }


 //if the login form is submitted 

 if (isset($_POST['login'])) { 
    $nume=mysql_real_escape_string($_POST['username']);
    $parola=md5(mysql_real_escape_string($_POST['pass']));
    if((!$_POST['username']) || (!$_POST['pass'])) {

        die('You did not fill in a required field.');

    }

    $check_pass = mysql_query("SELECT * FROM users WHERE username = '$nume'")or die(mysql_error());
    $check2 = mysql_num_rows($check_pass);

    if ($check2 == 0) {
        die("That user does not exist in our database");
    }

    while($data = mysql_fetch_array( $check_pass )) {
            //gives error if the password is wrong
            if ($parola != $data[2]) {

                die('Incorrect password, please try again.');
            }
            else {  
                        $result = mysql_query("SELECT * FROM users WHERE username = '$nume'")or die(mysql_error());
                        while($data=mysql_fetch_row($result)){
                            $_SESSION['name']=$data[1];
                            $_SESSION['pass']=$data[2];
                            $_SESSION['role']=$data[3];
                        }
                    }
                } 

} 


mysql_close($con);
?>

<html>

<head>
<title>Login</title>
<link rel="stylesheet" href="/css/butoane.css" type="text/css" />
<link rel="stylesheet" href="/css/admin_tools.css" type="text/css" />
<script>

</script>
</head>
<body id="login_background">

<div id="ambele">
<div class="form_box">

    <form action="<?php $_PHP_SELF ?>" method="post">
    <label for="username">Username</label><input type="text" id="username" name="username" maxlength="40"/>
    <label for="password">Password</label><input type="password" id="password"name="pass" maxlength="20"/>
    <input type="submit" name ="login" value="Login" class="button"/>
    </form>
</div>

<div id="register"> 
<a href="registration_form.php" id="reg">Not registered yet? Go to Registration</a>
</div>

</div>

</body>

</html>
4

1 に答える 1

1

リダイレクトを行うには、スクリプトを終了する必要があると思います。

<?php
header('Location: content.php');
die();
?>

また、PHP タグを間違った位置に配置します。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
[...]
?>
[...]

Headers already sentリダイレクトを行う前にクライアントに何かを送信しているため、PHP でエラーが発生します。

于 2012-12-20T09:05:46.647 に答える