2015-12-14 73 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">