[英]PHP Login script not working
我在數據庫中有兩個用戶,當我嘗試登錄時,它只停留在索引頁面上。 如果一個用戶在數據庫中,您可以正常登錄,但有兩個用戶,它只是重定向到索引頁面。 是什么問題。
<?php
include("connect.php");
$username = $_POST["username"];
$password = $_POST["password"];
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
echo $username;
echo $password;
if (empty($_POST['username']) || empty($_POST['password']))
{
//$_SESSION["login_error"] = "1";
echo 'error code 1';
header ('Location: ../index.php');
}
//$password = sha1($password);
$sql = "SELECT * FROM users";
$result = mysql_query($sql);
if (!$result) die('Invalid query: ' . mysql_error());
$userid = "";
while ($row3 = mysql_fetch_array($result, MYSQL_ASSOC))
{
if(($username == $row3["username"]) && ($password == $row3["password"]))
{
$userid = $row3["id"];
$_SESSION["userid"] = $userid;
//$online = mysql_query("UPDATE numbers SET online='1' WHERE id='".$userid."'")
//or die(mysql_error());
//$type = mysql_query("UPDATE numbers SET type='facetime' WHERE id='".$userid."'")
//or die(mysql_error());
echo $userid;
echo 'error code 2';
header ('Location: ../control_panel.php');
}
else
{
$userid = "";
$_SESSION["userid"] = "";
header ('Location: ../index.php');
echo 'error code 3';
}
//debug
//echo $password;
//$useridvar = $_SESSION["userid"];
//echo $useridvar;
}
if ($_SESSION["userid"]=="")
{
header ('Location: ../index.php');
echo 'error code 4';
}
//else
//{
// $userid = "";
// $_SESSION["userid"]= "";
// header ('Location: ../login.php');
//}
?>
你的代碼非常糟糕。 您正在遍歷整個用戶表? 那是糟糕的。 嘗試這個:
<?php
include("connect.php");
$username = $_POST["username"];
$password = $_POST["password"];
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
if (empty($_POST['username']) || empty($_POST['password']))
{
header ('Location: ../index.php?emptyusernameorpassword');
die();
}
$result = mysql_query("SELECT * FROM users where username = '".$username."' and password = '".$password."' LIMIT 1") or die('Invalid query: ' . mysql_error());
$row3 = mysql_fetch_assoc($result);
if(mysql_num_rows($result) != 0)
{
$_SESSION["userid"] = $row3["id"];
header ('Location: ../control_panel.php');
die();
}
else
{
$_SESSION["userid"] = "";
header ('Location: ../index.php?invaliduserorpassword');
die();
}
?>
好吧,其他答案已經指出了你的主要錯誤:“在發送標題之前不要輸出任何內容”。 Develroot還說你不應該遍歷用戶表的所有記錄。
但是, 如果您仍然對兩個用戶重定向到索引的原因感興趣 ,那么這就是答案:
在循環中,您計划循環遍歷users表的所有記錄,如果找到正確的記錄,則會重定向到正確的位置,如果發現錯誤的記錄,則會重定向到索引。
因此,根據表中記錄的順序,您的代碼通常會執行以下操作:
如果你在找到好用戶后打破你的循環,你的代碼就可以了。 (效率不高,但會奏效)。
當然,你真的應該像Develroot建議的那樣設計這個程序。
您對header()
函數的調用之前是對echo()
調用。 據我所知,如果您的腳本之前生成輸出,則添加HTTP標頭將不起作用。 另外,我認為Location
HTTP標頭需要一個以http://
或/
開頭的絕對路徑。 然后你應該在調用header()
之后立即添加exit()
調用,以防止以后添加任何其他頭信息。
在發出'header'命令之前,您無法輸出。
你還需要在header命令后直接發出'exit'。
我看不到你調用session_start()的位置; 如果你想在任何腳本中使用$ _session ['var'],這應該是ur代碼中的第一行,你應該首先使用session_start()啟動會話,然后每個header()調用都應該跟'exit;' 沒有'即退出; 否則腳本將繼續執行,並且不會加載標頭中指定的鏈接。
你檢查過錯誤日志了嗎?
你回復文本,然后發送標題,這不會工作。
確保在php.ini中設置了display_errors 1並在文件的頂部error_reporting(-1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.