簡體   English   中英

PHP中的變量不能在SQL中解析但在echo中可以

[英]variable in PHP not parsing in SQL but ok in echo

我正在嘗試為用戶創建一個頁面,以便用戶在需要時更改密碼,到目前為止,還沒有任何問題。

我已經設置了$ Username變量,並在SQL語句中將其與$ oldpw變量一起調用。

當我回顯查詢時,用戶名始終丟失。 如果我反轉了密碼和用戶名,則仍然缺少用戶名。 如果我自己回顯該變量,則該變量在那里。

關於密碼安全性:
我意識到密碼並沒有得到完全的保護,但是由於密碼是在內部系統上運行的,因此不需要這樣做,因為該系統首先具有所有必需的加密功能。

以下是帶有U:Admin和P:Admin的測試帳戶的代碼和結果

<?php
include('SQLFunctions.php');
include('session.php');
session_start();
$link = f_sqlConnect();
$oldpw = ($_POST['oldpw']);
$newpw = ($_POST['newpw']);

if(!isset( $_POST['oldpw']))
{
    $message = 'Please enter a your old password';
}
elseif (strlen( $_POST['newpw']) > 20 || strlen($_POST['newpw']) < 4)
{
    $message = 'incorrect length for new password';
}
elseif (ctype_alnum($_POST['newpw']) != true)
{
    $message = "New password must be alpha numeric";
}
elseif ($_POST['newpw'] <> $_POST['conpw'])
{
    $message = "Your new passwords do not match";
}
elseif(!empty($_POST)) {
    $UserID = $_POST['q'];
    $oldpwd = filter_var($_POST['oldpwd'], FILTER_SANITIZE_STRING);
    $newpwd = filter_var($_POST['newpwd'], FILTER_SANITIZE_STRING);

try {
    $Username = $_SESSION['Username'];
    $oldpw = Sha1($oldpw);
    $newps = Sha1($newpw);

    // check whether username exists and check that $oldpass is correct
    $query = "SELECT Password FROM Users WHERE Password='".$oldpw."' AND     Username='".$Username."'";

    $result = mysqli_query($link, $query);
    if(!$result){

        $message = "<p class='message'>Error: Your username and or password are incorrect.</p>" ;
    }else{

        // Test with mysqli_num_rows()
        if (mysqli_num_rows($result) > 0) {

            $query = "
                    UPDATE 
                        Users 
                    SET 
                        Password = '$newpw'
                        ,Updated_by = '$Username'
                        ,LastUpdated = NOW()
                    WHERE 
                        Username = '$Username'";

          mysqli_query($link, $query) or
                die("Insert failed. " . mysqli_error($link));

          $message = "<p class='message'>Your password has been changed</p>";

          mysqli_free_result($result);
        }
        else {
           // Username or password is incorrect
            $message = "<p class='message'>Error: Your username and password do not match.</p>" ;
        } 
    }
} catch(Exception $e) { $message = "Unable to process request";
}
}
?>
<html>
<head>
    <title>
        SVBX - Update Password
    </title>
    <link rel="stylesheet" href="styles.css" type="text/css"/>
</head>
    <body>
        <?php include('filestart.php') ?>
        <p><?php echo $message;
             echo "<br>Query: ".$query;
             echo "<br>Username :" .$Username;
             echo "<br>UserID :" .$UserID;?></p>
        <?php include('fileend.php') ?>
    </body>
</html>

因此,當我運行此命令時,我得到以下回顯:

Error: Your username and password do not match.
Query: SELECT Password FROM Users WHERE 
Password='4e7afebcfbae000b22c7c85e5560f89a2a0280b4' AND Username=''
Username :Admin
UserID :18

我只是看不到問題是什么,感謝有人指出對我來說很明顯。

謝謝你們。

但是,存在與會話相關的問題。 您已經包含了session.php ,其中可能包含一些與會話相關的任務。 同樣,您已經在下一行開始了會話。

我認為$Username$_SESSION接收到空值。 但是在打印用戶名之前,您已經包含了filestart.php 但是,變量$Username已在該文件中初始化。

因此,我設法使該腳本正常工作,但無法解決為什么我丟失$_SESSION信息的問題。

我修改了以前的頁面表單,知道會話信息在起作用,並使用$_POST將用戶名發送到此頁面。

一切正常,可以更改密碼。

圍繞解決方案而不僅僅是解決方案。 謝謝大家的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM