2014-01-09 33 views
0

我正在兩個不同的服務器上執行項目,我的代碼在一臺服務器上完美工作,並拒絕在另一臺服務器上工作。

代碼的作用是讓用戶在login.php頁面上登錄,並且如果他們的登錄憑證是正確的,那麼將被重定向到dashboard.php頁面。 header.php文件只是包含登錄不同人的導航欄信息。

請讓我知道錯誤可能在哪裏。

我不確定這些是兩個不同的問題,但標題重定向不起作用,也不存儲會話變量。我確定在頭重定向之前我沒有回顯任何內容。

的login.php

<?php include('header.php');?> 

<?php 

session_start(); 
$dbusername = $_SESSION['username']; 
$dbfName = $_SESSION['fName']; 
$dblName = $_SESSION['lName']; 
$sessiontype = $_SESSION['type']; 

if($dbusername && $dbfName && $dblName && $sessiontype){ 
    header('Location: ./dashboard.php'); 
} 

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

    session_start(); 

    $getuser = $_POST['username']; 
    $getpass = $_POST['password']; 
    $getpassmd5 = md5(md5($getpass)); 

    if($getuser && $getpass){ 

     require('connect.php'); 

     $query1 = "SELECT * FROM students WHERE StudentNum='$getuser'"; 
     $exequery1 = mysql_query($query1); 

     if(mysql_num_rows($exequery1) > 0){ 

      while ($row = mysql_fetch_assoc($exequery1)){ 
       $dbusername = $row['StudentNum']; 
       $dbpass = $row['password']; 
       $dbDOB = $row['DOB']; 
       $dbfName = $row['FirstName']; 
       $dblName = $row['LastName']; 
      } 

      if($dbpass){ 

       if($getuser === $dbusername && $dbpass === $getpassmd5){ 

        $_SESSION['username'] = $dbusername; 
        $_SESSION['fName'] = $dbfName; 
        $_SESSION['lName'] = $dblName; 
        $_SESSION['type'] = "student"; 
        header('Location: ./dashboard.php'); 

       } 
       else{ 
        echo("<h4><center>You have entered incorrect login credentials</h4></center>"); 
       } 

      } 
      else{ 

       if($getuser === $dbusername && $getpass === $dbDOB){ 

        $_SESSION['username'] = $dbusername; 
        $_SESSION['fName'] = $dbfName; 
        $_SESSION['lName'] = $dblName; 
        $_SESSION['type'] = "student"; 
        header('Location: ./dashboard.php'); 

       } 
       else{ 
        echo("<h4><center>You have entered incorrect login credentials</h4></center>"); 
       } 

      } 

     } 
     else{ 
      $query2 = "SELECT * FROM teachers WHERE username='$getuser'"; 
      $exequery2 = mysql_query($query2); 

      if(mysql_num_rows($exequery2) > 0){ 

       while ($row = mysql_fetch_assoc($exequery2)){ 
       $dbusername = $row['username']; 
       $dbpass = $row['password']; 
       $dbfName = $row['FirstName']; 
       $dblName = $row['LastName']; 
       $dbtype = $row['type']; 

      } 
       if($getuser === $dbusername && $dbpass === $getpassmd5){ 

        $_SESSION['username'] = $dbusername; 
        $_SESSION['fName'] = $dbfName; 
        $_SESSION['lName'] = $dblName; 
        $_SESSION['type'] = $dbtype; 
        header('Location: ./dashboard.php'); 

       } 
       else{ 
        echo("<h4><center>You have entered incorrect login credentials</h4></center>"); 
       } 

      } 
      else{ 
       echo("<h4><center>You have entered login credentials that do not exist</center></h4>"); 
      } 

     } 


    } 

    else{ 
     echo("<h4><center>Please enter both a username and password</center></h4>"); 
    } 
} 

?> 
+1

可能是因爲你前頭輸出'頭( '位置:./dashboard.php');',例如你的''你可以在'session_start();'之上放置'ob_start();'看看是否會觸發它。另外,我注意到你正在使用'mysql_ *'函數(沒有準備好的語句)和'md5'來存儲密碼,而不是一個好的組合,因爲這兩個都是老技術,'md5'可以追溯到1996年。結構很好的代碼,但它是舊技術,只是一個時間問題,直到您的網站被黑客入侵;很抱歉地說。 –

+0

始終開始會議頂部.. <?php session_start(); ?> 就像編程學生完成 – urfusion

回答

3

首先,你不應該有不同的<?php?>標籤。

由於它算作一個空間。

<?php include('header.php');?> 

<?php 

session_start(); 

應該是:

<?php 
session_start(); 
include('header.php'); 

其添加文件中的空間,因此,重定向沒有發生。

+1

我遵循了你的建議,並添加了ob_start(),如@ Fred-ii-所推薦的,代碼又開始工作。 – SyedKamran

+0

'另一個快樂的結局'然後@SyedKamran很高興聽到它,歡呼聲。 –

0

聽起來像是Apache服務器或PHP配置問題。在兩臺服務器上運行以下腳本:

phpinfo();

比較它們的差異。另外,請檢查.ini中的PHP版本,加載的擴展和配置。它可能是Apache httpd.conf,但我猜測它是一個php.ini問題或PHP版本問題。

建議:在每個文件的第1行創建一個自動加載器,使其成爲PHP。自動加載你的會話以及db和常量。這將確保在輸出HTML之前加載會話,這似乎是其他人看到問題的地方。

第1行:require_once('config.php');

0

session_start();到你的頁面首行

<?php 
session_start();