[英]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.