2012-12-20 202 views
0

我有一個登錄頁面,我必須:插入用戶名和密碼(1次);點擊按鈕(登錄按鈕)兩次以實際登錄。我使用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> 

回答

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 
[...] 
?> 
[...] 

這將導致在PHP中Headers already sent錯誤,因爲你已經送東西給客戶端你做重定向之前。

+0

我加了「die();」沒有任何變化,因爲它們是正確的,因爲在「?>」後面加上html代碼 – Johny

+0

你應該把PHP標籤放在第一行做重定向,否則會出錯。 – Licson

+0

想通了。問題是,當我提交時,我忘了做重定向,所以當我點擊第二次它在第一次IF,並從那裏做重定向:)。 – Johny

相關問題