簡體   English   中英

PHP重定向無法成功登錄

[英]PHP redirect not working on successful login

我正在自學PHP,這可能是我不知道的愚蠢之舉,但是為什么我的重定向無法正常工作...

我正在嘗試這樣做:

header("Location: members.php?view=$user"); exit;

這什么也沒做,但是當我成功登錄后在die語句中放置鏈接時

die("You are now logged in. Please <a href='members.php?view=$user'>click here</a> to continue.");

我可以單擊該鏈接,它可以正常工作。

完整代碼

<?php //login.php
  include_once 'header.php';
  echo "<div class='main'><h3>Please enter your details to log in</h3>";
  $error = $user = $pass = "";

  if (isset($_POST['user'])) {
    $user = sanitizeString($_POST['user']);
    $pass = sanitizeString($_POST['pass']);

    if ($user == "" || $pass == "") {
      $error = "Not all fields were entered<br />";
    }
    else {
      $query = "SELECT user,pass FROM members WHERE user='$user' AND pass='$pass'";

      if (mysql_num_rows(queryMysql($query)) == 0) {
        $error = "<span class='error'>Username/Password invalid</span><br /><br />";
      }
      else {
        $_SESSION['user'] = $user;
        $_SESSION['pass'] = $pass;
        header("Location: members.php?view=$user"); exit;
      }
    }
  }

echo <<<_END
<form method='post' action='login.php'>$error
<span class='fieldname'>Username</span><input type='text' maxlength='16' name='user' value='$user' /><br />
<span class='fieldname'>Password</span><input type='password' maxlength='16' name='pass' value='$pass' />
_END;
?>

<br />
<span class='fieldname'>&nbsp;</span>
<input type='submit' value='Login' />
</form><br /></div></body></html>



<?php //header.php
session_start();
echo "<!DOCTYPE html>\n<html><head><script src='js/osc.js'></script>";
include 'functions.php';

$userstr = ' (Guest)';

if (isset($_SESSION['user'])) {
    $user     = $_SESSION['user'];
    $loggedin = TRUE;
    $userstr  = " ($user)";
}
else {
    $loggedin = FALSE;
}

echo "<title>$appname$userstr</title><link href='css/main.css' rel='stylesheet' type='text/css' />" .
     "</head><body><div class='$appname'>$appname$userstr</div>";

if ($loggedin) {
    echo "<br /><ul class='menu'>" . 
     "<li><a href='members.php?view=$user'>Home</a></li>" . 
     "<li><a href='members.php'>Members</a></li>" . 
     "<li><a href='friends.php'>Friends</a></li>" . 
     "<li><a href='messages.php'>Messages</a></li>" . 
     "<li><a href='profile'>Edit Profile</a></li>" . 
     "<li><a href='logout.php'>Log Out</a></li></ul><br />";
}
else {
    echo ("<br /><ul class='menu'>" . 
    "<li><a href='index.php'>Home</a></li>" . 
    "<li><a href='signup.php'>Sign Up</a></li>" . 
    "<li><a href='login.php'>Log In</a></li></ul><br />" . 
    "<span class='info'>&#8654; You must be logged in to view this page.</span><br /><br />"
    );
}

?>

我嘗試過刪除頂部的第一個echo以及$error消息。 就像我說的那樣,我正在嘗試改進從這本O'Reilly書籍中獲得的代碼,因此,我感謝任何幫助,指導,批評等。

在設置Location標頭之前,PHP腳本的任何輸出(回顯)都將導致重定向失敗。 在理想的情況下,重定向用戶的腳本實際上不應具有主體,盡管許多主體仍具有主體。

在調用Header之前,請刪除所有回聲線。

您在重定向之前已輸出。 將輸出發送到瀏覽器后,您將無法重定向。

echo "<div class='main'><h3>Please enter your details to log in</h3>";

將此代碼塊移動到重定向代碼之后。

您要么必須刪除在標頭函數之前生成任何html的代碼,要么嘗試將ob_start()放在頁面的開頭(最好是第一行)。

正如Aeaex所說,回聲將使標頭重定向失敗。 作為使用標頭重定向的替代方法,您可以顯示以下內容:

'<meta http-equiv="refresh" content="2;url=http://myurl.com">';

其中內容中的數字2是重定向之前的秒數,如果需要立即完成,請將其設置為0。

這可能是不好的做法,但會破壞w3驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM