Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么只有在输入错误的凭据时,我才得到一个未定义的变量?_Php_Html_Variables_Undefined - Fatal编程技术网

Php 为什么只有在输入错误的凭据时,我才得到一个未定义的变量?

Php 为什么只有在输入错误的凭据时,我才得到一个未定义的变量?,php,html,variables,undefined,Php,Html,Variables,Undefined,首先,我正在从事的项目: 创建一个网站,用户可以登录并记录他们所做的志愿者小时数 我在这里看到了一个类似的问题: 我尝试了上面帖子中的解决方案,但它对我不起作用。未定义的变量仅在输入错误的用户名/密码时出现,但在输入正确的用户名和密码时工作正常。我不知道为什么会发生这种情况,但我想得到一些帮助来找到解决办法。这是我遇到问题的页面的代码。谢谢 登录html表单: <!DOCTYPE html> <html> <head> <meta

首先,我正在从事的项目: 创建一个网站,用户可以登录并记录他们所做的志愿者小时数

我在这里看到了一个类似的问题:

我尝试了上面帖子中的解决方案,但它对我不起作用。未定义的变量仅在输入错误的用户名/密码时出现,但在输入正确的用户名和密码时工作正常。我不知道为什么会发生这种情况,但我想得到一些帮助来找到解决办法。这是我遇到问题的页面的代码。谢谢

登录html表单:

<!DOCTYPE html>     
<html>
  <head>
    <meta charset="UTF-8">
    <title>Simple login form</title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/style.css"/>
  </head>

  <body>
    <div class="container">
    <div class="login">
      <h1 class="login-heading">
      <strong>Welcome.</strong> Please login.</h1>
      <form method="post" action="login.php">
        <input type="text" name="uname" placeholder="Username" required="required" class="input-txt" />
        <input type="password" name="pword" placeholder="Password"    required="required" class="input-txt" />
        <div class="login-footer">
          <a href="forgot.html" class="lnk">
          <span class="icon icon--min">ಠ╭╮ಠ</span> 
          <span class="register">I've forgotten something</span></a> 
          <input name="submit" value="Login" type="submit" class="btn btn--right"><br>
          <a href="register.html" class="lnk">
          <span class="register">Not a member? Click here to register!</span></a>
        </div>
      </form>
    </div>
  </div>
  <script src="js/index.js"></script>
</body>
</html>

简单登录表单
欢迎。请登录。

处理表单中信息的PHP表单:

<?php

include("encrypt_decrypt.php");

$username="root";
$password="";
$server="localhost";
$db_name="userauthentication";

$uname="";
$pword="";
$error_msg="";

if(isset($_POST["submit"])){

    $db_handle = mysqli_connect($server, $username, $password);
    $db_found = mysqli_select_db($db_handle, $db_name);

    $uname = $_POST["uname"];
    $uname = htmlspecialchars($uname);
    $uname = mysqli_real_escape_string($db_handle, $uname);

    $pword = $_POST["pword"];
    $pword = htmlspecialchars($pword);
    $pword = mysqli_real_escape_string($db_handle, $pword);
    $pword = encrypt_decrypt("encrypt", $pword);

        if($db_found){
            if($uname == "admin"){
                $SQL = "SELECT * FROM  WHERE username = '$uname' AND pword = '$pword'";
                $result = mysqli_query($db_handle, $SQL);

                $num_rows = mysqli_num_rows($result);

                    if($num_rows > 0){
                        session_start();
                        $_SESSION['login'] = "2";
                        header("Location: adminpage.html");
                    }else{
                        print("error");
                    }
            }else if($uname != "admin"){
                $SQL = "SELECT * FROM login WHERE username = '$uname' AND password = '$pword'";
                $result = mysqli_query($db_handle, $SQL);

                $num_rows = mysqli_num_rows($result);

                if($num_rows > 0){
                    session_start();
                    $_SESSION['login'] = "1";
                    header("Location: mainpage.html");
                }else{
                    $uname = '';
                    $pword = '';
                    print("error");
                }
            }
        }
    }
?>

最后但并非最不重要的一点是,我用于密码安全的encrypt_decrypt函数这是我在第6行和第7行遇到未定义变量问题的实际页面。

<?php       
    function encrypt_decrypt($action, $string) {
    $output = false;

    $encrypt_method = "AES-256-CBC";
    **$secret_key = $pword;**
    **$secret_iv = $pword;**

    // hash
    $key = hash('sha256', $secret_key);

    // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
    $iv = substr(hash('sha256', $secret_iv), 0, 16);

    if( $action == 'encrypt' ) {
        $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
        $output = base64_encode($output);
    }
    else if( $action == 'decrypt' ){
        $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
    }

    return $output;
}
?>


您传入一个名为$pword的变量,但它在函数中称为$string。更新代码如下

$secret_key = $string;
$secret_iv = $string;

传入一个名为$pword的变量,但在函数中称为$string。更新代码如下

$secret_key = $string;
$secret_iv = $string;

错误总是发生。但是,如果成功登录,您将执行头重定向到adminpage.html或mainpage.html。这就是为什么在使用正确的用户名/密码组合时看不到错误。
该错误是在encrypt_decrypt()中使用未知变量pword造成的。将其替换为$string或使用global语句将$pword导入encrypt_decrypt()的范围。

错误总是发生。但是,如果成功登录,您将执行头重定向到adminpage.html或mainpage.html。这就是为什么在使用正确的用户名/密码组合时看不到错误。
该错误是在encrypt_decrypt()中使用未知变量pword造成的。将其替换为$string或使用global语句将$pword导入encrypt_decrypt()的范围。

请使用PHP处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u散列()
。错误消息必须显示未定义的内容。了解的语句。这些是
**$secret\u key=$pword**
**$secret_iv=$pword**在第6行和第7行?是的,这是正确的。请使用PHP来处理密码安全。如果您使用的PHP版本低于5.5,则可以使用
密码\u散列()
。错误消息必须显示未定义的内容。了解的语句。这些是
**$secret\u key=$pword**
**$secret_iv=$pword**在第6行和第7行?是的,这是正确的,修复了未定义变量的问题,但现在我得到了一个错误,即使我输入了正确的凭据,如果您现在有不同的问题,我建议您打开另一个问题,否则可能会让那些迟来回答问题的人感到有点困惑。我意识到我每次都提交一个新哈希,并将新哈希与旧哈希进行比较。这就是为什么即使输入了正确的凭据,我也会收到错误消息!但是你的解决方案帮助我摆脱了未定义变量的问题,所以谢谢:)解决了未定义变量的问题,但是现在我得到了一个错误,即使我输入了正确的凭据,如果您现在有不同的问题,我建议您打开另一个问题,否则可能会让那些迟来回答问题的人感到有点困惑。我意识到我每次都提交一个新哈希,并将新哈希与旧哈希进行比较。这就是为什么即使输入了正确的凭据,我也会收到错误消息!但是您的解决方案帮助我摆脱了未定义变量的问题,所以谢谢:)