1

我正在使用电子邮件作为用户名登录正在开发的网站,现在如果用户从个人资料页面更新他们的电子邮件,我如何确保我的电子邮件检查语句不会捕获已在数据库中注册的用户电子邮件。

这页纸 轮廓

 /* Now we will store the values submitted by form in variable */
           $fullname=$_POST['fullname'];
           $dob=$_POST['dob'];
           $address=$_POST['address'];
           $myusername=$_POST['myusername'];           
           $telephone=$_POST['telephone'];

$queryuser=mysql_query("SELECT * FROM customer WHERE email='$myusername' ");
$checkuser=mysql_num_rows($queryuser);

if($checkuser != 0) 
{ 
$Merr[]='» Sorry this email is already registered!';
}
else {$insert_user=mysql_query("UPDATE CUSTOMER SET SYNTAX HERE");

现在这些是有问题的领域;

(姓名、出生日期、地址、电子邮件、电话)值('$fullname'、'$dob'、'$address'、'$myusername'、'$telephone')

正如您所看到的,如果用户更改了登录电子邮件,那么语法会检查针对数据库提交的电子邮件,但是如果用户保持电子邮件不变,他将收到错误,因为它是在数据库中找到的。

我在想类似的东西;

if($checkuser != 0) {
  if($myusername == $_POST['myusername'])
   (...dont show error.) 

但我的php技能有限。谁能给点建议,谢谢

4

3 回答 3

2
/* Now we will store the values submitted by form in variable */
$myusername=$_POST['myusername'];           


$queryuser=mysql_query("SELECT username FROM customer WHERE email='$myusername' ");
$checkuser=mysql_num_rows($queryuser);

/*Mysql_fetch_row will select the first row from the query and put it into a 
multidimensional array. As you only want 1 e-mail associated with one user the query
should only ever select one row anyway.  */
$row = mysql_fetch_row($queryuser);

if($checkuser != 0) 
{ 
      if($row[0] != $SESSION['username'])
      {
      //ERROR
      }

}
else {
//Update details
}

这样,您只需提交电子邮件以及任何其他输入,如果电子邮件没有更改,您将不需要做任何事情。

您还说过您发布了登录用户的用户名。我想你实际上会想要使用会话来做到这一点。

并且不要忘记转义POST 数据以确保安全。

如果他们正在更新他们的电子邮件地址,那么 INSERT INTO 应该不是更新声明吗?

于 2012-04-13T17:17:11.480 回答
0

如果您要更新数据库,请使用 Update.. Update customers set email='$username' where email='$username'。

您不能使用相同的表格来注册和更新信息。

于 2012-04-13T17:15:01.967 回答
0

您是否为用户保留了 id 之类的东西?如果是这样,您可以检查不是当前用户电子邮件地址的现有电子邮件地址。

于 2012-04-13T17:19:15.007 回答