我正在使用电子邮件作为用户名登录正在开发的网站,现在如果用户从个人资料页面更新他们的电子邮件,我怎样才能确保我的电子邮件检查声明没有捕获用户的电子邮件已经注册在数据库中。
页面
/* 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");
现在这些是有问题的字段;
(姓名,dob,地址,电子邮件,电话)VALUES('$ fullname','$ dob', '$ address','$ myusername','$ telephone')
您可以看到用户是否更改了登录电子邮件,然后语法会检查针对数据库提交的电子邮件,但是如果用户保持电子邮件不变,则会收到错误,因为它在数据库中找到。
我在考虑类似的事情;
if($checkuser != 0) {
if($myusername == $_POST['myusername'])
(...dont show error.)
但我的PHP技能有限。任何人都可以提出建议,谢谢
答案 0 :(得分: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
}
这样你只需提交电子邮件和任何其他输入,如果电子邮件没有改变,你就不需要做任何事情。
此外,您已经说过您发布登录用户的用户名。我想你实际上想要使用sessions来做到这一点。
为了安全起见,请不要忘记escape POST数据。
如果他们正在更新他们的电子邮件地址,INSERT INTO是否应该不是update声明?
答案 1 :(得分:0)
如果要更新数据库,请使用Update .. 更新客户设置email ='$ username',其中email ='$ username'。
您不能使用相同的表单来注册和更新信息。
答案 2 :(得分:0)
你是否为用户保留了一些内容?如果是这样,您可以检查不是当前用户电子邮件地址的现有电子邮件地址。