让用户更改自己的密码?

时间:2012-11-03 19:40:24

标签: php sql passwords

我刚刚开始学习php和sql所以请放轻松我,我知道在某些地方我会出错。我试图允许用户登录并能够更改他们的密码。我已经尝试了一个我认为应该可以工作的脚本,但我想我做错了,因为它只是链接到php功能页面而根本没有更改密码。这是我的剧本:

HTML表单:

<form method="POST" action="includes/changepassword.php">
<p><input type="password" name="oldpasswd" id="oldpasswd" maxlength="30" placeholder="Old Password"></p>
<p><input type="password" name="newpsswd1" id="newpsswd1" maxlength="30" placeholder="New Password"></p>
<p><input type="password" name="newpsswd2" id="newpsswd2"maxlength="30" placeholder="Confirm Password"></p>
<input type="submit" name="submit" id="submit" value="change password">

changepassword.php文件:

 <?php
require_once("session.php"); 
require_once("functions.php");
require('_config/connection.php');
function changepassword ($oldpasswd, $newpasswd1, $newpasswd2) {
    /*
     * RETURNS
     * 0 - if password changed
     * 1 - if new passwords are not equal
     * 2 - if user authentification problems
     */


        $oldpasswd = ($_POST['oldpasswd']);
        $newpasswd1 = ($_POST['newpasswd1']);
        $newpasswd1 = ($_POST['newpasswd2']);




    if ($newpasswd1 != $newpasswd2) {
        return 1;
    }

    //check user logged in changes OWN passwd
    $sql = "SELECT password FROM ptb_users WHERE id = ".$_SESSION['user_id'];
    $result = mysql_query($sql)or die('User not found: ' . mysql_error());

    if (md5($oldpasswd)==$result) { 

        //Encrypt $emailpassword in MD5 format for the database
        $md5_np=md5($newpasswd1);

        // Make a safe query
        $query = sprintf("UPDATE `ptb_users` SET `password` = '%s' 
                    WHERE `id` = ".$_SESSION['user_id'],
                    mysql_real_escape_string($md5_np));

        mysql_query($query)or die('Could not update password: ' . mysql_error());
        return 0;
    } else {
        return 2;
    }


}   
?>

我做错了什么?

5 个答案:

答案 0 :(得分:4)

  

它只会链接到php功能页面而不会更改密码

您告诉HTML表单完全按照以下方式执行:<form method="POST" action="includes/changepassword.php">。但另一方面,你从不称呼你的功能。

答案 1 :(得分:2)

您需要调用该函数才能处理更改密码。将其添加到?>

之前的文件底部
echo changepassword($_POST['oldpasswd'], $_POST['newpasswd1'], $_POST['newpasswd2']);

您还可以删除函数中的$ _POST分配,因为您将这些分配作为参数传递。

答案 2 :(得分:1)

poke所述,您需要调用该函数才能更新密码 我想我在下面的代码中发现了另一个问题:

//check user logged in changes OWN passwd
$sql = "SELECT password FROM ptb_users WHERE id = ".$_SESSION['user_id'];
$result = mysql_query($sql)or die('User not found: ' . mysql_error());

if (md5($oldpasswd)==$result) { 

您正在直接使用mysql_query()函数的结果,该函数实际上是作为资源返回的,而不是值。

您需要将代码更新为:

//check user logged in changes OWN passwd
$sql = "SELECT password FROM ptb_users WHERE id = ".$_SESSION['user_id'];
$result = mysql_query($sql)or die('User not found: ' . mysql_error());
$row=mysql_fetch_assoc($result);
if (md5($oldpasswd)==$row['password']) { 

请参阅此功能 - mysql_fetch_assoc()

答案 3 :(得分:0)

寻找一个关于表单处理的教程,经过一些搜索,如果偶然发现form tutorial,它看起来很容易理解。你会看到,大多数形式称自己为。

formchangepassword.html

<form action="formchangepassword.html" method="post">

在表单的开头,通常会有一些代码,用于确定是否使用post(按下按钮后)调用了表单,或者是否使用get调用了表单。在此代码中,您可以调用在CHANGEPASSWORD.PHP文件中编写的函数。这个文件只是一个库,它包含函数,你可以调用这个函数但是它们不运行它们,它们必须被调用。

<?php
  require_once("CHANGEPASSWORD.PHP");

  if(count($_POST) > 0)
  {
    // button was clicked, do what is necessary
    changepassword(...);
    ...
  }
?>
<form action="formchangepassword.html" method="post">
...
</form>

答案 4 :(得分:0)

表单字段的名称与changepassword.php中列出的名称不匹配。您应该在“newpasswd1”和“newpasswd2”中错过“a” - name=newpsswd1应该是newpasswd1,依此类推。

你也有两次列出“newpasswd1”

 $oldpasswd = ($_POST['oldpasswd']);
 $newpasswd**1** = ($_POST['newpasswd1']);
 $newpasswd**1** = ($_POST['newpasswd2']);

......我想你可能就是这个......

 $oldpasswd = ($_POST['oldpasswd']);
 $newpasswd**1** = ($_POST['newpasswd1']);
 $newpasswd**2** = ($_POST['newpasswd2']);

我还结合了牧师Bones和Abhishek Bhatia建议的改变,现在它运作良好。 (我也是HTML的格式标签)

以下是整个事物的外观(对我的网站进行了修改):

HTML表格

<form method="POST" action="changepassword.php">
<p><input type="password" name="oldpasswd" id="oldpasswd" maxlength="30" placeholder="Old Password"></p>
<p><input type="password" name="newpasswd1" id="newpasswd1" maxlength="30" placeholder="New Password"></p>
<p><input type="password" name="newpasswd2" id="newpasswd2"maxlength="30" placeholder="Confirm Password"></p>
<input type="submit" name="submit" id="submit" value="change password">
</form>

changepassword.php

function changepassword ($oldpasswd, $newpasswd1, $newpasswd2)
{
        $oldpasswd = ($_POST['oldpasswd']);
        $newpasswd1 = ($_POST['newpasswd1']);
        $newpasswd2 = ($_POST['newpasswd2']);

    if ($newpasswd1 != $newpasswd2)
    {
        return 1;
    }

    $sql = "SELECT Password FROM users WHERE UserID = ".$_SESSION['UserId'];
    $result = mysql_query($sql)or die('User not found: ' . mysql_error());
    $row=mysql_fetch_assoc($result);

    if (md5($oldpasswd)==$row['Password'])
    {
        $md5_np=md5($newpasswd1);
        $query = sprintf("UPDATE `users` SET `Password` = '%s' WHERE `UserID` ".$_SESSION['UserId'],mysql_real_escape_string($md5_np));

        mysql_query($query)or die('Could not update password: ' . mysql_error());
        return 0;
    }
    else
    {
        return 2;
    }
}   

echo changepassword($_POST['oldpasswd'], $_POST['newpasswd1'], $_POST['newpasswd2']);