【问题标题】:PHP header not working on local serverPHP标头在本地服务器上不起作用
【发布时间】:2015-02-24 03:48:38
【问题描述】:

这是我的每个 .php 页面。我可以让它注册并进入我的本地服务器。但是,当我进入登录页面并实际登录时,它不会重定向到成员页面。我不确定它是什么问题。我对 PHP 很陌生,代码看起来不错。非常简单,但我正试图让它发挥作用。任何帮助表示赞赏。谢谢。

config.php

<?php
$host     = "localhost"; 
$username = "root"; 
$password = "root"; 
$db       = "motofoto"; 

//Connect to MySQL Server 
$con = mysqli_connect($host,$username,$password,$db) or die("Can not connect to Server.");

?> 

登录.php

<?php
    session_start(); 
require "config.php"; //Connection Script, include in every file! 

//Check to see if the user is logged in. 
if(isset($_SESSION['username'])){ 
   header( "Location: members.php" ); //isset check to see if a variables has been 'set' 
} 



if(isset($_POST['submit'])) 
{ 
   //Variables from the table 
   $user  = $_POST['user']; 
   $pass  = $_POST['pass']; 

   //Prevent MySQL Injections 
   $user  = stripslashes($user); 
   $pass  = stripslashes($pass); 

   $user  = mysqli_real_escape_string($con, $user); 
   $pass  = mysqli_real_escape_string($con, $pass); 

   //Check to see if the user left any space empty! 
   if($user == "" || $pass == "") 
   { 
      echo "Please fill in all the information!"; 
   } 

   //Check to see if the username AND password MATCHES the username AND password in the DB
   else 
   { 
      $query = mysqli_query($con,"SELECT * FROM members WHERE username = '$user' and password = '$pass'") or die("Can not query DB."); 
      $count = mysqli_num_rows($query); 

      if($count == 1){ 
         //YES WE FOUND A MATCH! 
         @$_SESSION['username'] = $user; //Create a session for the user! 
         header ("Location: members.php"); 
      } 

      else{ 
         echo "Username and Password DO NOT MATCH! TRY AGAIN!"; 
      } 
   } 

} 

?> 

<html> 
<table> 

<tr> 
<form name="register" method="post" action="login.php"> 
<td> 

<table> 

<tr> 
<td colspan="3"><strong><center>Login </center></strong></td> 
</tr> 

<tr> 
<td>Username</td> 
<td>:</td> 
<td><input autofocus name="user" type="text" id="user"></td> 
</tr> 

<tr> 
<td>Password</td> 
<td>:</td> 
<td><input name="pass" type="password" id="pass"></td> 
</tr> 

<tr> 
<td></td> 
<td></td> 
<td><input type="submit" name="submit" value="Login"></td> 
</tr> 

</table> 
</td> 
</form> 
</tr> 
</table> 

<table>
   <tr>
      <td>Not a Member? <a href="register.php">Register</a></td>
   </tr>
</table>


</html>

注册.php

<?php
session_start();  //Must Start a session. 

require "config.php"; //Connection Script, include in every file! 

//Check to see if the user is logged in. 
//'isset' check to see if a variables has been 'set' 
if(isset($_SESSION['username'])){ 
   header("location: members.php"); 
} 

//Check to see if the user click the button 
if(isset($_POST['submit'])) 
{ 
   //Variables from the table 
   $user  = $_POST['user']; 
   $pass  = $_POST['pass']; 
   $rpass = $_POST['rpass']; 

   //Prevent MySQL Injections 
   $user  = stripslashes($user); 
   $pass  = stripslashes($pass); 
   $rpass = stripslashes($rpass); 

   $user  = mysqli_real_escape_string($con, $user); 
   $pass  = mysqli_real_escape_string($con, $pass); 
   $rpass = mysqli_real_escape_string($con, $rpass); 

   //Check to see if the user left any space empty! 
   if($user == "" || $pass == "" || $rpass == "") 
   { 
      echo "Please fill in all the information!"; 
   } 

   else 
   { 
      //Check too see if the user's Passwords Matches! 
      if($pass != $rpass) 
      { 
         echo "Passwords do not match! Try Again"; 
      } 

      //CHECK TO SEE IF THE USERNAME IS TAKEN, IF NOT THEN ADD USERNAME AND PASSWORD INTO THE DB 
      else 
      { 
         //Query the DB 
         $query = mysqli_query($con,"SELECT * FROM members WHERE username = '$user'") or die("Can not query the TABLE!"); 

         //Count the number of rows. If a row exist, then the username exist! 
         $row = mysqli_num_rows($query); 
         if($row == 1) 
         { 
            echo "Sorry, but the username is already taken! Try again."; 
         } 

         //ADD THE USERNAME TO THE DB 
         else 
         { 
            $add = mysqli_query($con,"INSERT INTO members (id, username, password) VALUES (null, '$user' , '$pass') ") or die("Can't                Insert! "); 
            echo "Successful! <a href='members.php'> Click Here </a> to log In."; 
         } 


      }       

   } 

} 
?> 

<html> 
<table width="300" align="center" cellpadding="0" cellspacing="1" border="1px solid black"> 

<tr> 
<form name="register" method="post" action="register.php"> 
<td> 

<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 

<tr> 
<td colspan="3"><strong><center>Registration</center></strong></t
d> 
</tr> 

<tr> 
<td width="78">Username</td> 
<td width="6">:</td> 
<td width="294"><input name="user" type="text" id="user"></td> 
</tr> 

<tr> 
<td>Password</td> 
<td>:</td> 
<td><input name="pass" type="password" id="pass"></td> 
</tr> 

<tr> 
<td>Repeat Password</td> 
<td>:</td> 
<td><input name="rpass" type="password" id="rpass"></td> 
</tr> 

<tr> 
<td></td> 
<td></td> 
<td><input type="submit" name="submit" value="Register"></td> 
</tr> 

</table> 
</td> 
</form> 
</tr> 
</table> 

</html>

members.php

<?php
session_start(); 
require "config.php"; 

//Check to see if the user is logged in. 
if(isset($_SESSION['username'])){ 
   echo "Hello ".$_SESSION['username'].", you are logged in. <br /> This the member's page! Nothing here :(. <a href='logout.php'>Click Here </a>to log out."; 
} 

else{ 
   echo "Please <a href='login.php'>Log In </a> to view the content on this page!"; 
} 

?>

注销.php

<?php
session_start(); 
require "config.php"; 
session_destroy(); 

echo "You have successfully logged out. <a href='login.php'> Click here </a> to login!"; 

?> 

【问题讨论】:

  • 你得到的错误是什么?
  • 在每个标题后添加exit;。另外,在您打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后将错误报告添加到文件顶部,然后是其余代码,以查看它是否产生任何结果。还将or die(mysqli_error($con)) 添加到mysqli_query()。同时删除@ 符号;这是一个错误抑制器。
  • 注意:您应该在标题中使用位置,而不是位置。
  • 不是现在,但是当你有能力的时候,尝试将会话/登录逻辑从 HTML 或视图中分离出来
  • 您的代码中存在巨大的安全漏洞。您不仅有不区分大小写的密码(我假设您使用的是 ci 联盟),而且您的查询对 SQL 注入开放。请阅读 PHP 中的 SQL 注入:php.net/manual/en/security.database.sql-injection.php 有很多方法可以解决这个安全漏洞。

标签: php header location


【解决方案1】:

1)尝试添加会话关闭功能,这可能会有所帮助,因为会话可能尚未保存。

 @$_SESSION['username'] = $user; //Create a session for the user! 
 session_write_close();
 header ("Location: members.php"); 

2) 正如 Fred 所说,尝试使用 php 错误报告进行调试。

3) 小提示:register.php => 将链接更改为 Login.php 而不是 members.php

echo "Successful! <a href='Login.php'> Click Here </a> to log In.";

PS:我测试了你的脚本,即使没有 session_write_close(); 也能正常工作;

【讨论】:

    【解决方案2】:

    或者,您可以使用以下函数通过 java 脚本重定向。这不是解决方案,但您可以用作替代方案。

    function redirect($url)
    {
        echo $data= "<script type='text/javascript'> window.location.href = '".$url."'; </script>";
        break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      相关资源
      最近更新 更多