我刚刚开始学习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;
}
}
?>
我做错了什么?
答案 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']);