簡體   English   中英

PHP登錄腳本不起作用

[英]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表的所有記錄,如果找到正確的記錄,則會重定向到正確的位置,如果發現錯誤的記錄,則會重定向到索引。

因此,根據表中記錄的順序,您的代碼通常會執行以下操作:

  • 記錄1:好用戶? 是。 然后將“位置”設置為“面板”
  • 記錄2:好用戶? 否。覆蓋“位置”,設置為“索引”。

如果你在找到好用戶后打破你的循環,你的代碼就可以了。 (效率不高,但會奏效)。

當然,你真的應該像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.

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