我创建了一个更改密码页面,其中第一个条件为if ($newpassword == 0)
正常工作,但是如果我省略了第一个条件,则其他条件无法正常工作,但是每个刷新密码字段也占用了一部分,如果我省略了第一个条件空白保存在数据库表中。下面给出了代码以寻求帮助。预先谢谢你。
<?php
include('session.php');
include('config.php');
//error_reporting(0);
$error = ''; // Variable To Store Error Message
$newpassword = $_POST['npassword'];
$confirmnewpassword = $_POST['cpassword'];
if ($newpassword == 0) {
$error = "Set a New Password!";
} else {
if ($newpassword == $confirmnewpassword) {
$sql = mysqli_query($con, "UPDATE t_login SET password='$newpassword'");
} else if ($sql) {
$error = "Congratulations You have successfully changed your password!";
} else {
$error = "New Password and Confirm Password do not match. Try again!";
}
}
?>
答案 0 :(得分:1)
正如我所评论的那样,您的条件是错误的。
if ($newpassword == $confirmnewpassword) { //If you enter here you can t reach other conditions
$sql = mysqli_query($con, "UPDATE t_login SET password='$newpassword'");
} else if ($sql) {
$error = "Congratulations You have successfully changed your password!";
} else {
$error = "New Password and Confirm Password do not match. Try again!";
}
您应该这样做
if ($newpassword == $confirmnewpassword) {
//HERE THERE IS AN SQL INJECTION
$sql = mysqli_query($con, "UPDATE t_login SET password='$newpassword'");
if ($sql) {
$error = "Congratulations You have successfully changed your password!";
} else {
$error = "Mysql query error !";
}
} else {
$error = "New Password and Confirm Password do not match. Try again!";
}
您应该使用 prepared 语句或至少使用转义参数,因为如果用户在密码中键入',则代码将失败!
编辑我忘了告诉您查询更改了表中每个记录的密码,也许您忘记了使用 WHERE 。
希望这会有所帮助
答案 1 :(得分:0)
这些评论中的大多数与您的问题没有直接关系,但有一些备注:
<?php
include('session.php');
include('config.php');
//error_reporting(0);
请取消注释,以获得一些有价值的警告!
$error = ''; // Variable To Store Error Message
$newpassword = $_POST['npassword'];
$confirmnewpassword = $_POST['cpassword'];
由于您不知道是否设置了这些设置,因此我会检查(也是为了避免警告)它是否确实存在,所以类似$newpassword = $_POST['npassword'] ?? '';
if ($newpassword == 0) {
您正在检查它是否等于0
的“ sort of”(double是为您键入杂耍)。那很模糊。我将检查它是否为有效密码,例如!== ''
。与先前的技巧一起使用,效果会很好。
$error = "Set a New Password!";
} else {
if ($newpassword == $confirmnewpassword) {
您可以在此处安全地使用===
。
$sql = mysqli_query($con, "UPDATE t_login SET password='$newpassword'");
您可能需要在此处使用WHERE
语句,因为这会更新表中的所有行。
} else if ($sql) {
当您在上面的$sql
中定义了if
时,并且它位于else
中,此处永远不会是正确的。 这是代码中的主要错误
$error = "Congratulations You have successfully changed your password!";
} else {
$error = "New Password and Confirm Password do not match. Try again!";
}
}
?>
如果您不混合使用HTML和php,请省略end-php标签。