【问题标题】:redirecting function not working重定向功能不起作用
【发布时间】:2014-09-07 00:34:54
【问题描述】:

我正在尝试从登录页面获取密码,然后尝试从 mysql 收集存储的密码。然后我将它与提交的密码进行比较。现在我想如果两个密码匹配然后重定向到一个页面。但问题是每次页面重定向。如果密码甚至与页面重定向不匹配。

<?php
if (redirect()==true){
    header('location:http://google.com');
}
if(redirect()!=false){
    echo "password doesnt match";
}
$hostname="localhost";
$dbname="justlive_main";
$dbusername="justlive_main";
$dbpass="Kalkata1";
#Veriable collected From Login Panel
$Submitted_Email_Address=$_POST['email'];
$Submitted_Password=$_POST['password'];
$encrypt_Submitted_Password=md5($Submitted_Password);

#Lets gather Data From MySql Database
$con=new mysqli($hostname,$dbusername,$dbpass,$dbname);
if (mysqli_connect_errno($con)) {
    die('The connection to the database could not be established.');
}
$query="SELECT * FROM users WHERE Email_Address='$Submitted_Email_Address'";
$result=$con->query($query);
$row=$result->fetch_array();
$SQL_Password = $row['Password'];
function redirect(){
    if ($encrypt_Submitted_Password!=$SQL_Password) {
        return false;
    }
    elseif ($encrypt_Submitted_Password == $SQL_Password) {
        return true;
    }
}
#Lets CLose All The MySql Connection
$result->free();
$con->close();
?>

我已删除该功能并尝试以简单的方式进行操作。但它仍然无法正常工作。 编辑代码:

    <?php 

if ($encrypt_Submitted_Password!=$SQL_Password) {
       echo "Please check your Password";
}
elseif ($encrypt_Submitted_Password == $SQL_Password) {
        header('location:http://google.com');
}
$hostname="localhost";
$dbname="justlive_main";
$dbusername="justlive_main";
$dbpass="Kalkata1";
#Veriable collected From Login Panel
$Submitted_Email_Address=$_POST['email'];
echo "Submited Email Address:". $Submitted_Email_Address."<br>";
$Submitted_Password=$_POST['password'];
echo "Submitted Password : ".$Submitted_Password. "<br>";
$encrypt_Submitted_Password=md5($Submitted_Password);
echo "Encrypted Submitted_Password:".$encrypt_Submitted_Password."<br>";

#Lets gather Data From MySql Database
$con=new mysqli($hostname,$dbusername,$dbpass,$dbname);
if (mysqli_connect_errno($con)) {
    die('The connection to the database could not be established.');
}
$query="SELECT * FROM users WHERE Email_Address='$Submitted_Email_Address'";
$result=$con->query($query);
$row=$result->fetch_array();
$SQL_Password = $row['Password'];
echo "Mysql Database Stored Password: ".$SQL_Password."<br>";


#Lets CLose All The MySql Connection
$result->free();
$con->close();

?>

【问题讨论】:

  • 你的redirect()函数的定义是什么?
  • header() 重定向之后应该有一个exit;,顺便说一句。
  • if ($encrypt_Submitted_Password!=$SQL_Password) { 这个语句应该是 == NOT =
  • @jack 我已将代码编辑如下。请看一看。仍然无法正常工作pastebin.com/pFX3kBt2
  • 对不起,我没看到! for != :) 忽略我的帖子 :)

标签: php mysql redirect mysqli


【解决方案1】:

您在设置 $encrypt_Submitted_Password 和 SQL_Password 之前调用了 redirect() 函数。初始化后移动“ifs”。而且您必须将它们声明为全球性的。或者更好的是,将变量作为参数传递

【讨论】:

    【解决方案2】:

    我已经检查了您的代码,并在加载了所有变量后带来了 header 命令。它现在在我的最后工作。我认为您在准备好之前调用了 $SQL_Password 变量。请看一下,让我知道它是否有效。

    <?php 
    $hostname="localhost";
    $dbname="justlive_main";
    $dbusername="justlive_main";
    $dbpass="Kalkata1";
    #Veriable collected From Login Panel
    $Submitted_Email_Address=$_POST['email'];
    #echo "Submited Email Address:". $Submitted_Email_Address."<br>";
    $Submitted_Password=$_POST['password'];
    #echo "Submitted Password : ".$Submitted_Password. "<br>";
    $encrypt_Submitted_Password=md5($Submitted_Password);
    #echo "Encrypted Submitted_Password:".$encrypt_Submitted_Password."<br>";
    
    #Lets gather Data From MySql Database
    $con=new mysqli($hostname,$dbusername,$dbpass,$dbname);
    if (mysqli_connect_errno($con)) {
        die('The connection to the database could not be established.');
    }
    $query="SELECT * FROM users WHERE Email_Address='$Submitted_Email_Address'";
    $result=$con->query($query);
    $row=$result->fetch_array();
    $SQL_Password = $row['Password'];
    #echo "Mysql Database Stored Password: ".$SQL_Password."<br>";
    if ($encrypt_Submitted_Password!=$SQL_Password) {
           echo "Please check your Password";
    }
    elseif ($encrypt_Submitted_Password == $SQL_Password) {
            header('location:dashboard.php');
    }   
    #Lets CLose All The MySql Connection
    $result->free();
    $con->close();
    
    ?>
    

    【讨论】:

    • 非常感谢,它工作正常。非常感谢让我的代码在没有太大变化的情况下可用。 :)
    【解决方案3】:

    您的重定向函数不正确:$encrypt_Submitted_Password$SQL_Password 不在函数范围内,因此它会返回 Notice 错误,但您可以使用 global:

    function redirect(){
    
        global $encrypt_Submitted_Password, $SQL_Password
    
        if ($encrypt_Submitted_Password!=$SQL_Password) {
            return false;
        }else{
            return true;
        }
    }
    

    或者您可以将两个变量作为参数传递给函数。

    正如@Guilleva 所说,您在实例化之前调用它:

    你的代码应该是这样的:

    <?php
    
    function redirect(){
        if ($encrypt_Submitted_Password!=$SQL_Password) {
            return false;
        }else{
            return true;
        }
    }
    
    
    $hostname="localhost";
    $dbname="justlive_main";
    $dbusername="justlive_main";
    $dbpass="Kalkata1";
    #Veriable collected From Login Panel
    $Submitted_Email_Address=$_POST['email'];
    $Submitted_Password=$_POST['password'];
    $encrypt_Submitted_Password=md5($Submitted_Password);
    
    #Lets gather Data From MySql Database
    $con=new mysqli($hostname,$dbusername,$dbpass,$dbname);
    if (mysqli_connect_errno($con)) {
        die('The connection to the database could not be established.');
    }
    $query="SELECT * FROM users WHERE Email_Address='$Submitted_Email_Address'";
    $result=$con->query($query);
    $row=$result->fetch_array();
    $SQL_Password = $row['Password'];
    
    if (redirect()==true){
        header('location:http://google.com');
    }else{
        echo "password doesnt match";
    }
    
    #Lets CLose All The MySql Connection
    $result->free();
    $con->close();
    ?>
    

    【讨论】:

    • 你和@Guilleva 都必须有猞猁的眼睛,这很好看!
    【解决方案4】:

    你的代码是

    if (redirect()==true){
    header('location:http://google.com');
    }
    if(redirect()!=false){
    echo "password doesnt match";
    }
    

    这里redirect()==trueredirect()!=false的意思是一样的

    所以你的代码应该是

    if (redirect() == true){
    header('location:http://google.com');
    }
    if (redirect() == false){
    echo "password doesnt match";
    }
    

    【讨论】:

    • 这不回答问题,应该是评论
    • 还是不能解决问题,是变量作用域和调用顺序的问题
    猜你喜欢
    • 2016-02-14
    • 2020-03-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多