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