创建更改密码页面

时间:2018-08-07 06:34:00

标签: php

我创建了一个更改密码页面,其中第一个条件为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!";
    }
}
?>

2 个答案:

答案 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标签。