【问题标题】:How to make a change password PHP script work [closed]如何使更改密码PHP脚本工作[关闭]
【发布时间】:2014-06-20 11:42:59
【问题描述】:

我是个笨蛋,对编程的了解不多。我有一个家庭网站,我们可以在其中分享照片、视频、文件和其他资源。该网站有一个简单的登录功能,可以开始一个会话,我希望能够让人们能够在登录后更改他们的密码。

数据库在 MySQL 中,非常简单,只有; ID、用户名和密码列(根本没有加密或散列)。

当谈到 PHP 和 MySQL 时,我倾向于研究其他人的示例并将它们变成我自己的,并且使用登录脚本我发现这很容易做到。但是,我已经尝试并尝试并尝试找到适合我的站点的 PHP sn-p 并允许用户更改密码,但不幸的是每次尝试都失败了。

我希望有人可以帮助我开发我已经拥有的东西以使其适用于我的网站,任何帮助将不胜感激!

我的表单只是要求登录用户输入新密码,然后确认相同的密码:

    <form name="frmChange" role="form" class="form-signin" method="POST" action="changepword_script.php">

  <div class="form-group">

    <label for="InputPassword2">New Password</label>
    <input type="password" class="form-control" id="InputPassword2" placeholder="New Password" name="newPassword">
     <label for="InputPassword3">Confirm New Password</label>
    <input type="password" class="form-control" id="InputPassword3" placeholder="Confirm Password" name="confirmPassword">  </div>
   <button class="btn btn-lrg btn-default btn-block" type="submit" value="send">Change it</button>


      </div>


      </form>

而我的 php 脚本(也很简单)只需要检查密码是否匹配,如果匹配则更新数据库(我已删除数据库的 IP 地址并替换为零):

<?php
session_start();

if (!(isset($_SESSION['username']) && $_SESSION['username'] != ''))
{
    header("location:login.php");
}

$dbcon = mysql_connect ('000.000.000.00', 'my_db_username', 'my_db_password')

$password1 = $_POST['newPassword'];
$password2 = $_POST['confirmPassword'];

$password1 = mysql_real_escape_string($password1);
$password2 = mysql_real_escape_string($password2);

if ($password1 <> $password2){ echo "Your passwords do not match.";}
{
    echo "your passwords do not match";
}
if (mysql_query(UPDATE ebsmembers SET password='$password1' WHERE username='$session[username]'))
{
    echo "You have successfully changed your password.";
}

mysql_close($dbcon);
header("location:login.php");

?>

再次感谢任何帮助,因为我真的很难完成这项工作!

非常感谢, 保罗

【问题讨论】:

  • 您需要全部更新。您似乎错过了选择数据库。

标签: php mysql change-password


【解决方案1】:

调整了一些错误或对我没有意义的事情。也切换到mysqli_*

<?php

session_start();

if (!(isset($_SESSION['username']) || $_SESSION['username'] == ''))
{
    header("location:login.php");
}

$dbcon = mysqli_connect('000.000.000.00', 'my_db_username', 'my_db_password', 'my_db_name') or die(mysqli_error($dbcon));

$password1 = mysqli_real_escape_string($dbcon, $_POST['newPassword']);
$password2 = mysqli_real_escape_string($dbcon, $_POST['confirmPassword']);
$username = mysqli_real_escape_string($dbcon, $_SESSION['username']);

if ($password1 <> $password2)
{
    echo "your passwords do not match";
}
else if (mysqli_query($dbcon, "UPDATE ebsmembers SET password='$password1' WHERE username='$username'"))
{
    echo "You have successfully changed your password.";
}
else
{
    mysqli_error($dbcon);
}
mysqli_close($dbcon);

?>

【讨论】:

  • 谢谢,这非常有帮助 - 但是我在提交时收到以下错误:警告:mysqli_real_escape_string() 需要 2 个参数,1 在 \\winnas01.winvh1.fasthosts.co.uk\ Domains\e\ebsworth.co.uk-1071379550\user\htdocs\changepword_script.php 第 11 行
  • 哦对了,忘记添加数据库句柄了...更新了响应。
  • 再次感谢 - 我在更新表查询中也收到同样的错误警告,我是否还需要将 $dbcon 添加到此查询中?
  • 是的,你明白了! :) 如果查询也失败,我添加了另一个错误报告。
  • 先生,您是一位传奇人物,也是一位学者——非常感谢您
【解决方案2】:

您对会话的使用是错误的。在您的 SQL 查询中,它应该是:

UPDATE ebsmembers SET password = '$password1' WHERE username= '$_SESSION[username]'

你的语法也很糟糕。它在几个地方缺少引号。在进行更改之前,您应该再次从 PHP 基础开始。

【讨论】:

  • 谢谢,我知道这很糟糕。我已经购买了书籍并计划回归基础而不是编辑其他人提供的代码,但是我真的只想让网站的这一部分正常运行,因为它已经困扰了我多年。
【解决方案3】:
  1. 查询应该被引用:

    if (mysql_query("UPDATE ebsmembers SET password='$password1' WHERE username='$_SESSION[username]'"))
    
  2. 不要使用mysql,它已被弃用。请改用mysqliPDOThe mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

  3. 不要以纯文本形式存储密码。通过password_hash()password_verify() 函数使用bcrypt 加密: How do you use bcrypt for hashing passwords in PHP?

【讨论】:

  • 干杯 - 我会及时加密密码,我知道这很重要,但我并没有过分大惊小怪,原因很简单,因为这是一个家庭网站,我并不十分珍惜什么还在这里分享。
【解决方案4】:

$password1 = $_POST['newPassword']; $password2 = $_POST['confirmPassword'];

必须是

$password1 = $_POST['InputPassword2']; $password2 = $_POST['InputPassword3'];

【讨论】:

  • 看起来“InputPassword2”和“InputPassword3”是 ID 而不是名称。请仔细检查您的回复。
  • 是的,这些是 ID 而不是名称,但无论如何感谢您的回复。
【解决方案5】:

您可以为此目的使用更新语句,创建一个相同的表单:

  1. 用户名(name=$name)
  2. 现有密码(password=$pw1)
  3. 新密码
  4. 提交

先用sql select语句选择当前用户名:

$my_qry ="select * from table_name where name= $name";

更新使用语句:

$query = mysql_query("UPDATE table_name SET password='".$pw1."' WHERE name='".$name."'");
    if(!$query)
{   
    mysql_error();
    echo "hello";
}

为此使用 if else 条件,如果第一个选择查询为真,则只有更新查询有效

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多