Php 是否允许用户更改自己的密码?
我刚刚开始学习php和sql,所以请对我放松点,我知道在某些地方我会错的。我正在尝试允许用户登录并能够更改其密码。我已经尝试了一个脚本,我相信它应该可以工作,但我猜我做错了什么,因为它只会链接到php函数页面,而根本不会更改密码。这是我的剧本: HTML格式: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=
<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']);