0

我的第二个 elseif “标题位置”语句没有重定向(没有错误)。

警告:我是 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 语句的第一个“标题位置”部分可以正常工作,并将您重定向到正确的位置。这个问题让我很生气,因为我所有的日志错误文件夹都是空的,而且屏幕上没有错误输出。

4

2 回答 2

1

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

elseif ($session = "0")

elseif ($session == "0")
于 2013-06-30T06:12:37.583 回答
0

维维克是对的。您的 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.当您重定向到不同的域时,最好始终使用)。

于 2013-06-30T06:26:52.453 回答