2015-12-14 70 views
0

我已經爲PHP中的登錄頁面編寫代碼。當我提交詳細日誌時,即使我已經編寫了一個代碼重定向到不同的頁面,該頁面也只是被重定向到自己。請幫我確定錯誤在哪裏。PHP登錄表單無法運行

的代碼看起來像這樣

<?php 
session_start(); 

    $username = $password= ""; 
    $usernameErr = $passwordErr = ""; 
    $empty = false; 

    if($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
     if(empty($_POST["username"])) 
     { 
      $empty = true; 
      $usernameErr="Username is empty. Please try again"; 
     } 
     else 
      { 
       $username = $_POST["username"]; 
      } 
     if(empty($_POST["password"])) 
     { 
      $empty = true; 
      $passwordErr="Password is empty. Please try again"; 
     } 
     else 
      { 
       $password = $_POST["password"]; 
      } 
     if(!$empty) 
     { 
      $servername = "myxor.in.mysql"; 
      $dbusername = "myxor_in"; 
      $dbpassword = "srikanth177"; 
      $dbname = "myxor_in"; 
      // Create connection 
      $conn = new mysqli($servername, $dbusername, $dbpassword, $dbname); 
      // Check connection 
      if ($conn->connect_error) 
      { 
       die("Connection failed: " . $conn->connect_error); 
      } 

      $sql = "SELECT firstname,password,package FROM users WHERE username='$username'"; 
      $result = $conn->query($sql); 

      if (($result->num_rows) > 0) 
      { 
       $row = $result->fetch_assoc(); 


        if($username === $row['username']) 
        { 
         if($password === $row['password']) 
         { 
          echo "came here"; 
          $_SESSION['fname'] = $row['firstname']; 
          $_SESSION['pack'] = $row['package']; 
          $_SESSION['login_user'] = $username; 
          header("Location: http://www.myxor.in/home.php"); 

         } 
         else 
         { 
          $passwordErr = "Invalid Password. Please Try Again"; 
         } 
        } 

      } else 
      { 
       $usernameErr = "Invalid Username. Please Try Again"; 
      } 
     } 
    } 
?> 

<head> 
    <style> 
    td{ 
     color:red; 
     } 
    </style> 
    <title>Login Page</title> 
</head> 

<body> 

<h2 align=center style="color:blue">Login Form</h2> 
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post"> 
<table align=center bgcolor=grey > 
<tr> 
    <td><label>UserName :</label> 
    <td><input id="name" name="username" placeholder="username" type="text"> 
    <td><?php echo $usernameErr?></td> 
<tr> 
    <td><label>Password :</label> 
    <td><input id="password" name="password" placeholder="**********" type="password"> 
    <td><?php echo $passwordErr?></td> 
<tr> 
    <td colspan=2 align=center><input name="submit" type="submit" value=" Login "> 
</table> 

</form> 
</body> 
</html> 
+0

'header(「Location:」)''不能在輸出內容後出現。 – camelCase

回答

0

謝謝你們的幫助。我自己發現了這個錯誤。錯誤是我試圖從行中訪問「用戶名」,而沒有在查詢中選擇用戶名。所以它出現故障。我通過在選擇列表中添加用戶名列來糾正它。再次感謝你。

2

這就是問題的所在:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post"> 

您要發送的形式被顯示爲$ _SERVER形式相同的URL [「PHP_SELF 「](這實際上是有效的,除非你想發送表單到另一個URL,就像你的情況)。將操作更改爲您要發送表單以進行驗證的URL。例如。

<form action="validate_form.php" method="post"> 
..... 
0

試試這個:

<?php 
session_start(); 

include("validations.php"); 

$username = ""; 
$password= ""; 
$usernameErr = $passwordErr = ""; 
$empty = false; 

if(isset($_POST['submit']) 
{ 
    if(empty($_POST["username"])) 
    { 
     $empty = true; 
     $usernameErr="Username is empty. Please try again"; 
    } 
    else 
     { 
      $username = $_POST["username"]; 
     } 
    if(empty($_POST["password"])) 
    { 
     $empty = true; 
     $passwordErr="Password is empty. Please try again"; 
    } 
    else 
     { 
      $password = $_POST["password"]; 
     } 
    if(!$empty) 
    { 
     $servername = "myxor.in.mysql"; 
     $dbusername = "myxor_in"; 
     $dbpassword = "srikanth177"; 
     $dbname = "myxor_in"; 
     // Create connection 
     $conn = new mysqli($servername, $dbusername, $dbpassword, $dbname); 
     // Check connection 
     if ($conn->connect_error) 
     { 
      die("Connection failed: " . $conn->connect_error); 
     } 

     $sql = "SELECT firstname,password,package FROM users WHERE   username='$username'"; 
     $result = $conn->query($sql); 

     if (($result->num_rows) > 0) 
     { 
      $row = $result->fetch_assoc(); 


       if($username === $row['username']) 
       { 
        if($password === $row['password']) 
        { 
         echo "came here"; 
         $_SESSION['fname'] = $row['firstname']; 
         $_SESSION['pack'] = $row['package']; 
         $_SESSION['login_user'] = $username; 
         header('Location: http://www.myxor.in/home.php'); 
         exit; 
        } 
        else 
        { 
         $passwordErr = "Invalid Password. Please Try Again"; 
        } 
       } 

     } else 
     { 
      $usernameErr = "Invalid Username. Please Try Again"; 
     } 
    } 
} 
?> 

<head> 
    <style> 
    td{ 
    color:red; 
    } 
    </style> 
    <title>Login Page</title> 
</head> 

<body> 

    <h2 align=center style="color:blue">Login Form</h2> 
    <form action="this_page.php" method="post"> 
<table align=center bgcolor=grey > 
<tr> 
<td><label>UserName :</label> 
<td><input id="name" name="username" placeholder="username" type="text"> 
<td><?php echo $usernameErr?></td> 
<tr> 
<td><label>Password :</label> 
<td><input id="password" name="password" placeholder="********** type="password"> 
<td><?php echo $passwordErr?></td> 
<tr> 
<td colspan=2 align=center><input name="submit" type="submit" value=" Login  "> 
</table> 

</form> 
</body> 
</html> 

你有:$username = $password = ""; 我把它糾正,以$username = ""; $password="";

我改變了一些HTML 我在html改變什麼的是表單動作成爲一個頁面不只是<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">

我改成了:<form action="yourpagevalidation.php" method="post">

我加你退出header

後,我改變了你的if($_REQUEST[]東西if(isset($_POST['submit']))

+1

是@camelCase我現在正在改變 –

+2

謝謝,這將有所幫助。只是一個頭,即$ username = $ password =「」'是_valid_,雖然恕我直言,不好的做法。我同意你的調整,但原文不會導致錯誤。 – camelCase

+0

@camelCase我知道這是有效的,但它是一種更好的做法,我這樣做 –

0

或者,你可以這樣做:

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">