2015-09-01 348 views
1

我是一名PHP新手,我使用了一個簡單的登錄表單,其中包含源代碼。代碼正在工作,但它不會將我重定向到主頁,而是保持在登錄頁面中。下面是驗證碼,負責重定向,如果用戶輸入正確的憑據:在php登錄後重定向頁面

ob_start(); 
session_start(); 
$error=''; 
if(isset($_POST['submit'])){ 
if(empty($_POST['username']) || empty($_POST['password'])){ 
    $error="Username or Password is invalid"; 
} 
else{ 
    $username=$_POST['username']; 
    $password=$_POST['password']; 

    $cxn=mysql_connect("localhost","root","admin"); 
    $username=stripslashes($username); 
    $password=stripslashes($password); 
    $username=mysql_real_escape_string($username); 
    $password=mysql_real_escape_string($password); 

    $db=mysql_select_db("hrdb",$cxn); 
    $query=mysql_query("select * from login where Username='$username' AND 
    Password='$password'",$cxn); 

    $rows=mysql_num_rows($query); 
    if($rows==1){ 
     $_SESSION['log_user']=$username; 
     echo "test"; 
     header('Location: http://localhost/HRMS/profile.php'); 
     exit; 
    }else{ 
     $error="Username or password is invalid"; 
    } 
    mysql_close($cxn); 
    } 
    } 
    ob_end_flush(); 
+0

既然你剛剛開始,那麼告訴你不要使用任何'mysql_'函數的好時機。您將希望使用'mysqli_'或'PDO'來進行數據庫連接。 – Rasclatt

+0

我嘗試將每個mysql替換爲mysqli,但我有許多像mysqli這樣的錯誤期望成爲資源,但字符串被給予,因此我將它還原回到mysql,但是如果您可以重新編碼它以適合mysqli,那麼它就好。 –

+0

如果你正在練習,這個腳本是好的,但爲了實際使用,這不是一個好的腳本。 – Rasclatt

回答

0

您可以使用header()函數來發送新的HTTP頭,但是這必須在任何發送到瀏覽器HTML或文本(例如在聲明之前)。

您可能希望header電話後,包括die

header("Location: http://localhost/HRMS/profile.php"); 
die(); 
+0

發生的事件一直停留在同一頁面上。 –

+0

@NewbieN在將任何輸出發送到瀏覽器之前,您需要執行此操作。 –

0

我會建議你使用的mysqli替代MySQL和 也有細微的變化,請仔細檢查它 和測試工作的代碼現在好了。

ob_start(); 
    session_start(); 
    $error=''; 


    if(isset($_POST['submit'])){ 
     if(empty($_POST['username']) || empty($_POST['password'])){ 
      $error="Username or Password is invalid"; 
     } 
     else{ 
      $username=$_POST['username']; 
      $password= md5($_POST['password']); 

      $cxn= mysqli_connect("localhost","root","","hrdb"); 
      $username=stripslashes($username); 
      $password=stripslashes($password); 
      $username=mysqli_real_escape_string($cxn,$username);; 
      $password=mysqli_real_escape_string($cxn,$password);; 

      $query=mysqli_query($cxn,"select * from user_mst_tbl where USER_NAME='".$username."' AND 
      PASS_WORD='".$password."'"); 

      $rows=mysqli_num_rows($query); 
      if($rows==1){ 
       $_SESSION['log_user']=$username; 
       echo "test"; 
       header('Location: http://localhost/HRMS/profile.php'); 

      }else{ 
       $error="Username or password is invalid"; 
      } 
      mysql_close($cxn); 
     } 
    } 
    ob_end_flush(); 
+0

我試過你的代碼,但我收到以下錯誤:警告:mysqli_real_escape_string()期望正好2個參數,1給出 –

+0

這是因爲該示例仍在使用該部分中的mysql_' – Rasclatt

+1

應該是$ $ = mysqli_real_escape_string($ cxn ,$用戶名);'。與'$ password'一樣。 –

0

您收到的錯誤:

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

因爲你已經安裝了XAMPP更高版本。

您需要考慮使用prepared statement而不是deprecatedmysql_* API。在您的查詢中使用它之前,您不需要清理每個變量,因爲準備好的語句將爲您執行。

如果您打算使用PHP的功能header(),請確保在調用header()之前沒有任何輸出。

還請檢查您的profile.php,如果它也有header()調用,它會將頁面重定向回登錄頁面。

<?php 

/* MAKE SURE THAT THERE ARE NO HTML/OUTPUTS ABOVE THIS CODE */ 

ob_start(); 
session_start(); 
$error = ""; 

/* ESTABLISH CONNECTION */ 
$con = new mysqli("localhost", "root", "admin", "hrdb"); 

/* CHECK CONNECTION */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

if(isset($_POST['submit'])){ 

    if(empty($_POST['username']) || empty($_POST['password'])){ 
    $error="Username or Password is invalid"; 
    } 
    else{ 

    if($stmt = $con->prepare("SELECT Username FROM login WHERE Username = ? AND Password = ?")){ /* CHECK AND PREPARE THE QUERY */ 
     $stmt->bind_param("ss",$_POST["username"],$_POST["password"]); /* BIND THESE VARIABLES TO YOUR PREPARED QUERY; s STANDS FOR STRINGS */ 
     $stmt->execute(); /* EXECUTE THE QUERY */ 
     $rows = $stmt->num_rows; /* GET NUMBER OF ROWS/RESULTS */ 
     if($rows == 1){ /* IF FOUND RESULT */ 
     $stmt->bind_result($username); /* STORE THE RESULT TO THIS VARIABLE */ 
     $stmt->fetch(); /* FETCH THE RESULT */ 
     $_SESSION['log_user'] = $username; /* STORE THE RESULT TO THIS SESSION VARIABLE */ 
     /* header('LOCATION: http://localhost/HRMS/profile.php'); REDIRECT THE PAGE TO profile.php */ 
     ?> 
      <meta http-equiv="refresh" content=".5; URL='profile.php'"/> <!-- REDIRECT TO profile.php IN HALF A SECOND --> 
     <?php 
     } 
     else { 
     $error="Username or password is invalid"; 
     } 
     $stmt->close(); 
    } /* END OF PREPARED STATEMENT */ 

    } /* END OF ELSE */ 

} /* END OF ISSET SUBMIT */ 

ob_end_flush(); 

?> 

您還應該保護存儲在數據庫中的密碼。您可以使用password_hash()

+0

我試了代碼是的,我沒有得到任何錯誤,但即使我輸入了正確的用戶名和密碼,當我的用戶名和密碼是簡單的admin和minda連續時,它仍然提示我無效的用戶名或密碼。 –

+0

@NewbieN - 你登錄表的列是'Username'和'Password',對吧?我已經更新了我的答案,並把'username'而不是'username' - * CASE SENSITIVE * –

+0

我檢查了profile.php,但它只包含「include('session.php')」 –