这里我有一些PHP代码,允许我更新学生表中的用户信息。
我想弄清楚如何才能检查当前登录的用户的密码是否与存储在数据库中的密码匹配,然后才能更新信息。
答案 0 :(得分:0)
正如其他人所说,你的剧本有很多漏洞。
我认为你只是在当地开发。
如果您在此阶段托管它,肯定会遇到安全问题。
好的,回到你的问题。
在提交更新之前,有几种方法可以验证用户。
例如:
更新更改时输入sql条件
if(isset($_POST['Update'])){
$UpdateFName = $_POST['FirstName'];
$UpdateLName = $_POST['LastName'];
$UpdateEmail = $_POST['Email'];
$UpdateFPassword = $_POST['Password'];
$SQL = $conn->query("UPDATE students
SET FName='{$UpdateFName}',LName='{$UpdateLName}',Email='{$UpdateEmail}',Password='{$UpdateFPassword}'
WHERE UserID = $User and Password = '$_SESSION["PW"]' ");
header('Location:updateinfo.php');
}
如果使用此方法,如果当前密码与存储在db中的密码不同,那些编辑sql将不会运行,因为where条件无效
首先验证用户。
if(isset($_POST['Update'])){
$UpdateFName = $_POST['FirstName'];
$UpdateLName = $_POST['LastName'];
$UpdateEmail = $_POST['Email'];
$UpdateFPassword = $_POST['Password'];
$sqlValidate = $conn->query("SELECT * FROM students WHERE UserID ='$User' and Password='$_SESSION["PW"]' ");
$getUser = $sqlValidate -> fetch_array(MYSQLI_BOTH);
if($getUser['UserID'] != ''){
$SQL = $conn->query("UPDATE students SET FName='{$UpdateFName}', LName='{$UpdateLName}', Email='{$UpdateEmail}', Password ='{$UpdateFPassword}' WHERE UserID = $User ");
}// end if
header('Location:updateinfo.php');
}
您可以阅读http://php.net/manual/en/function.crypt.php进行密码加密。
答案 1 :(得分:0)
您的表单基本上没有验证。此外,还有SQL注入的机会。 在发布之前验证您的电子邮件字段。尝试:
if(!filter_var($email_variable,FILTER_VALIDATE_EMAIL){
//throw some kind of exceptions or kill the process
}
我还建议您使用PDO,因为它支持使用预准备语句。有一个令人惊奇的功能,bindParam()可以绑定你的参数。
尝试:
$DBH = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$STH = $DBH->prepare("SELECT * FROM student_table WHERE studentID= :id");
$id = 1; // here you should keep it as variable and pass it to param
$STH->bindParam(':id', $id, PDO::PARAM_STR);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
另外,不要将原始密码直接发布到您的数据库。使用内置的php散列算法或使用某种加密函数来保护它们。