Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否允许用户更改自己的密码?_Php_Sql_Passwords - Fatal编程技术网

Php 是否允许用户更改自己的密码?

Php 是否允许用户更改自己的密码?,php,sql,passwords,Php,Sql,Passwords,我刚刚开始学习php和sql,所以请对我放松点,我知道在某些地方我会错的。我正在尝试允许用户登录并能够更改其密码。我已经尝试了一个脚本,我相信它应该可以工作,但我猜我做错了什么,因为它只会链接到php函数页面,而根本不会更改密码。这是我的剧本: HTML格式: <form method="POST" action="includes/changepassword.php"> <p><input type="password" name="oldpasswd" id=

我刚刚开始学习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;
    }


}   
?>


我做错了什么?

您需要调用该函数以处理更改密码。将此项添加到文件底部的
?>

echo changepassword($_POST['oldpasswd'], $_POST['newpasswd1'], $_POST['newpasswd2']);
您还可以在作为参数传入时删除函数中的$\u POST分配

它只会链接到php函数页面,根本不会更改密码


您告诉HTML表单要做到这一点:
。但是,另一方面,你从来不会调用你的函数。

寻找一个关于表单处理的教程,经过一点搜索,如果无意中发现了这个,它看起来很容易理解。你会发现,大多数形式称自己为“自我”

formchangepassword.html

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

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) { 
您直接使用的是函数的结果,它实际上是作为资源而不是值返回的

您需要将代码更新为:

//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']) { 

请参阅此函数-。

表单字段的名称与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>

请不要使用
mysql.*
函数来编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果你选择PDO,。请看,它不是一个不使用md5的替代品,如果你只是在函数中覆盖它们的值,为什么要设置参数?它没有显示内容,它链接到changepassword.php,页面是空白的。但这一功能并未得到实现。我不知道为什么会这样。@MatthewWilliams如果你声明了函数,你说它存在,但你实际上没有调用该函数。好的,谢谢,我在底部的changepassword.php文件中添加了它,但它似乎没有解决问题。
<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>
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']);