【问题标题】:2nd elseif "Header Location" statement, not redirecting (no error)第二个 elseif “标头位置”语句,不重定向(无错误)
【发布时间】:2013-06-30 06:11:26
【问题描述】:

我的第二个 elseif "Header Location" 语句没有重定向(没有错误)。

警告:我是 php 的完全初学者,所以请只提出建设性的批评。

我的 PHP 代码:

<?php
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];
$session = "0";
$db = mysql_connect("X.HOST.X", "User_name", "Password");
mysql_select_db("User_name", $db);
$result = mysql_query("SELECT * FROM members WHERE usr = '$myusername'");
while ($row = mysql_fetch_assoc($result)) {
    ob_start();
    echo $row["usr"];
    $usr = ob_get_contents();
    ob_end_clean();
    ob_start();
    echo $row["regIP"];
    $regIP = ob_get_contents();
    ob_end_clean();

    ob_start();
    echo $row["pass"];
    $pass = ob_get_contents();
    ob_end_clean();
    ob_start();
    echo $usr . $regIP . $pass;
    $salted_DataBase = ob_get_contents();
    ob_end_clean();
    ob_start();
    echo $myusername . $regIP . $mypassword;
    $salted_User = ob_get_contents();
    ob_end_clean();
    $session = "0";
    if ($salted_User == $salted_DataBase) {
        mysql_query("INSERT INTO online (id, usr, online, dt) VALUES( '', '$myusername.IN', '1', NOW() )");
        header("location:Secured_Page.php");
    } elseif ($session = "0") {
        header("location:google.com");
    }
}
?>

让我感到奇怪的是 if else 语句的第一个“标题位置”部分可以正常工作,并将您重定向到正确的位置。这个问题让我很生气,因为我所有的日志错误文件夹都是空的,而且屏幕上没有错误输出。

【问题讨论】:

    标签: php header


    【解决方案1】:

    您正在使用赋值运算符。改变这个:-

    elseif ($session = "0")
    

    elseif ($session == "0")
    

    【讨论】:

    • 我想通了...我的第二个 elseif 语句只有 1 个“=”符号而不是 2 个。无论如何感谢 =B
    • @user2535859,这就是 Vivek 所说的。如果您对他的帮助感到满意,请记得投票并在投票部分下方打勾以接受他的回答作为最佳真实答案...
    • 我也在godaddys支持论坛上发布了这个问题,所以如果他们能够解决这个问题,我会尽快给大家更新。非常感谢您提供的所有大力帮助 =B
    【解决方案2】:

    维韦克是对的。您的 if 语句不正确。

    但另一件事是您应该使用 mysqli_* 函数而不是 mysql_* 函数。这是因为 mysql_* 函数已被弃用,将来将被删除。 mysqli_* 函数是 mysql_* 函数的改进版本... PHP.net page about mysqli_*

    此外,当您在 while 语句中时,您使用 ob_* 来获取和设置变量。这可以做得更简单:

    这段代码:

        ob_start();
        echo $row["usr"];
        $usr = ob_get_contents();
        ob_end_clean();
        ob_start();
        echo $row["regIP"];
        $regIP = ob_get_contents();
        ob_end_clean();
    

    然后是这个代码:

        $usr = $row["usr"];
        $regIP = $row["regIP"];
    

    更新 1: 这是您的代码进行了一些改进。希望它有效:

    <?php
    $myusername = $_POST['myusername'];
    $mypassword = $_POST['mypassword'];
    $session = 0;
    
    $db = @new mysqli("X.HOST.X", "User_name", "Password", "User_name( db select here )");
    // Works as of PHP 5.2.9 and 5.3.0.
    if ($mysqli -> connect_error) {
        die('Connect Error: ' . $mysqli -> connect_error);
    }
    
    if ($result = mysqli_query($db, "SELECT * FROM members WHERE usr = '$myusername'")) {
        while ($row = mysqli_fetch_assoc($result)) {
            $usr = $row["usr"];
            $regIP = $row["regIP"];
            $pass = $row["pass"];
            $salted_DataBase = $usr . $regIP . $pass;
            $salted_User = $myusername . $regIP . $mypassword;
    
            if ($salted_User == $salted_DataBase) {
                mysqli_query($db, "INSERT INTO online (id, usr, online, dt) VALUES( '', '$myusername', '1', NOW() )");
                header("Location: Secured_Page.php");
            } elseif ($session == 0) {
                header("Location: http://www.google.com");
            }
        }
    } else {
        echo "No User found with the given name";
    }
    ?>
    

    我已将您的代码更新为mysqli_* 函数,将session 变量设为整数(更好的故障控制),删除ob_* 函数,修复elseif 语句(添加=)并修复标题链接(没有http://www.,您将有机会搜索您所在的原始域上的页面。因此,当您重定向到不同的域时,最好始终使用http://www.)。

    【讨论】:

    • @user2535859,我已经用正确的代码更新了我的答案。试试看。希望它有效...
    • 哥们你太棒了!!谢谢我现在要玩它,我会让你知道事情如何解决的!
    • @user2535859 很高兴我能帮上忙。还要考虑一件事是SQL injection。但那是以后的事了。首先了解基础;)
    • 好的...所以在我将您的代码换成我的代码后,我仍然处于同样的情况。第一个“标题位置”将重定向但第二个“标题位置”仍然不起作用。没有错误信息???感谢一百万更新我的代码!!!很想解决这个问题...顺便说一句,我与 godaddy 一起主持,不知道这是否会有所作为。
    • 在网上找到一些关于godaddy和PHP Header Errors On Server Side Redirects "php output buffer error"的资料。
    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2016-05-19
    • 2014-01-10
    • 1970-01-01
    • 2015-02-04
    • 2019-05-22
    相关资源
    最近更新 更多