首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP登录脚本不工作

PHP登录脚本不工作
EN

Stack Overflow用户
提问于 2011-07-29 17:10:50
回答 6查看 1.4K关注 0票数 2

我在一个数据库中有两个用户,当我尝试登录时,它只是停留在索引页面上。如果数据库中有一个用户,您可以登录,但如果有两个用户,则只会重定向到索引页。有什么问题。

代码语言:javascript
复制
<?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');
    //}

?>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-07-29 17:14:11

你的代码很糟糕。你是在遍历整个用户表吗?那太可怕了。试试这个:

代码语言:javascript
复制
<?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();
}

?>
票数 4
EN

Stack Overflow用户

发布于 2011-07-29 17:41:15

好了,其他的答案已经指出了你的主要错误:“在发送报头之前不要输出任何东西”。Develroot还说,您不应该遍历users表的所有记录。

但是,如果您仍然对两个用户被重定向到索引的原因感兴趣,,那么答案是:

在您的循环中,您计划遍历users表的所有记录,如果找到正确的记录,将重定向到正确的位置,如果找到错误的记录,则重定向到索引。

因此,根据表中记录的顺序,您的代码通常会执行以下操作:

  • 记录1:好用户?是。然后设置"Location“为"panel"
  • record 2: good user?不是的。覆盖“位置”,设置为“索引”。

如果你在找到好的用户后中断你的循环,你的代码就可以工作了。(效率低下,但可以工作)。

当然,你真的应该按照Develroot建议的方式来设计这个过程。

票数 3
EN

Stack Overflow用户

发布于 2011-07-29 17:14:35

在调用header()函数之前,会先调用echo()。据我所知,如果您的脚本之前生成了输出,则添加HTTP标头将不起作用。另外,我认为Location header需要以http:///开头的绝对路径。然后,您可能应该在对header()的调用之后立即添加exit()调用,以防止稍后添加任何其他头信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6870953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档