Php 尝试允许用户更改其电子邮件

Php 尝试允许用户更改其电子邮件,php,mysql,Php,Mysql,我只是想让用户更改他们的详细信息,“用户名”和“密码”,我想让用户也更新他们的电子邮件,然后更新PHP我的“用户名”和“密码”,但我很难处理电子邮件。有什么想法吗 <?php session_start(); $username = $_SESSION['sess_user']; echo '<div class="search1"><h2>'.$username.'</h2></div>'; if (isset($_SESSIO

我只是想让用户更改他们的详细信息,“用户名”和“密码”,我想让用户也更新他们的电子邮件,然后更新PHP我的“用户名”和“密码”,但我很难处理电子邮件。有什么想法吗

<?php
session_start();



$username = $_SESSION['sess_user'];

echo '<div class="search1"><h2>'.$username.'</h2></div>';


if (isset($_SESSION['sess_user']))
{
//user is logged in

if (isset($_POST['submit']))
{
//start changing password
//check fields

$oldpassword = md5($_POST['oldpassword']);
$newpassword = md5($_POST['newpassword']);
$email = md5($_POST['email']);


$repeatnewpassword = md5($_POST['repeatnewpassword']);

//check password against db
include('../includes/config.php');

$queryget = mysql_query("SELECT password FROM login WHERE username='$username'") or die ("change password failed");
$row = mysql_fetch_assoc($queryget);
$oldpassworddb = $row['password'];

//check passwords
if ($oldpassword==$oldpassworddb)
{
//check two new passwords
if ($newpassword==$repeatnewpassword)
{
//successs
//change password in db

$querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE   username='$username'");
$querychange = mysql_query("UPDATE login SET email='$email' WHERE   email='$email'");
die("<div class='successmate'>Your password has been changed. <a href='index2.php'><br><br> Return</a></div>");
}
else 
die("<div class='results'>New password doesn't match!</div>");

}else 
die("<div class='results'>Old password doesn't match!</div>");

}
else
{

echo"
<form class='search1' action='changepassword.php' method='POST'>
<label>Old Password:</label> <input type='text' id='password' name='oldpassword'><p>
<label>New Password:</label> <input type='password' id='password' name='newpassword'><p>
<label>Repeat New Password:</label> <input type='password'  name='repeatnewpassword'><p>
<label>Email:</label> <input type='email'  name='email'><p>
<input type='submit' name='submit' class='submit' value='submit'><br><br><br>
<h2><p><a href='index2.php'>Back</a></p></h2>
</form>
";
 }

 }else 
die ("You must be logged in to change your password");


?>

<img src="../images/main.jpg">

仔细看看这一点:

$querychange = mysql_query("UPDATE login SET email='$email' WHERE   email='$email'");

$email
是用户输入的电子邮件的md5哈希。由于它是新的电子邮件地址,可能它还不在数据库中,因此更新不会起任何作用。

以上两个答案都应该告诉您问题所在,但是解决问题的正确方法是实现自动增量列或其他唯一/主要列。如果多个用户具有相同的用户名,或者您要更新所有用户

另外,你有什么好的理由来记录你的电子邮件地址

$email = md5($_POST['email']);
应该是

$email = $_POST['email'];

最后一个想法:您的查询可能容易被注入。不要忘记使用:)

您正在使用并且应该使用。您正在使用并且需要删除您用户的密码。@Quentin感谢您的反馈,但我不会让这个网站上线。它确实更新了电子邮件,但没有使其散列。我不确定它为什么这样做?我希望电子邮件是普通文本它不可能是同一个用户。如果你的用户名是主要的或唯一的字段,那么你很好,但我不会假设它是。无论谁否决了,你没有看到“留下评论”通知吗?阿德尔,我只是有一个问题,为什么我的电子邮件在MySQL中被散列?它没有被散列到任何地方。(我已将我的代码更新为您上面列出的代码)@Ariana我希望如此,我在我的答案中加入了这一点:P。如果这对您有帮助,请在我的答案中打勾。祝你的应用程序好运。