我有一个包含用户详细信息和更新声明的表单,如果用户想要更新此类详细信息,我添加了验证,以便电子邮件无法与其他帐户关联,因此if($checkuser != 0)
该声明的问题在于,如果用户未更改其电子邮件并更新其详细信息,则会收到错误消息,指出电子邮件已存在。
我希望在电子邮件存在后进行集成,检查else if(($_POST["myusername"]) == ($row['email']))
之类的内容,然后继续更新。(myusername变量名称包含电子邮件),这意味着如果发布的电子邮件与其当前电子邮件相同,则继续更新。
但是我迷路了,因为我对PHP比较新,我在括号和括号方面遇到了麻烦。
这是我的代码
if($_POST['usubmit']=='Update')
{
$Uerr = array();
if (!$_POST['fullname'] || !$_POST['myusername'])
{
$Uerr[] = '» Name or Email must be filled in!';
}
if (!checkEmail($_POST['myusername']))
{
$Uerr[]='» Your email is not valid!';
}
// If there are no errors
if(!count($Uerr))
{
/* Now we will check if username is already in use or not */
$queryuser=mysql_query("SELECT * FROM customer WHERE email='" . mysql_real_escape_string($_POST["myusername"]) . "'");
$checkuser=mysql_num_rows($queryuser);
if($checkuser != 0)
{
$Uerr[]='» Sorry this email is already registered!';
}
else
{
$updateDetails = mysql_query("UPDATE customer SET
name = '" . mysql_real_escape_string($_POST["fullname"]) . "',
dob = '" . mysql_real_escape_string($_POST["dob"]) . "',
address = '" . mysql_real_escape_string($_POST["address"]) . "',
email = '" . mysql_real_escape_string($_POST["myusername"]) . "',
telephone = '" . mysql_real_escape_string($_POST["telephone"]) . "'
WHERE cus_id = '$cus_id'");
if ($updateDetails)
$_SESSION['Umsg']['Ureg-success']="» Your details have been updated successfully!";
else {
$Uerr[]='» error updating your account'.mysql_error();
}
}
}
if(count($Uerr))
{
$_SESSION['Umsg']['Ureg-err'] = implode('<br />',$Uerr);
}
header("Location: account.php");
exit;
}
答案 0 :(得分:2)
这应该有效
if($_POST['usubmit']=='Update')
{
$Uerr = array();
if (!$_POST['fullname'] || !$_POST['myusername'])
{
$Uerr[] = '» Name or Email must be filled in!';
}
if (!checkEmail($_POST['myusername']))
{
$Uerr[]='» Your email is not valid!';
}
// If there are no errors
if(!count($Uerr))
{
/* Now we will check if username is already in use or not */
$queryuser=mysql_query("SELECT * FROM customer WHERE email='" . mysql_real_escape_string($_POST["myusername"]) . "' AND cus_id !=" . $cus_id(mysql_real_escape_string));
$checkuser=mysql_num_rows($queryuser);
if($checkuser != 0)
{
$Uerr[]='» Sorry this email is already registered!';
}
else
{
$updateDetails = mysql_query("UPDATE customer SET
name = '" . mysql_real_escape_string($_POST["fullname"]) . "',
dob = '" . mysql_real_escape_string($_POST["dob"]) . "',
address = '" . mysql_real_escape_string($_POST["address"]) . "',
email = '" . mysql_real_escape_string($_POST["myusername"]) . "',
telephone = '" . mysql_real_escape_string($_POST["telephone"]) . "'
WHERE cus_id = '$cus_id'");
if ($updateDetails)
$_SESSION['Umsg']['Ureg-success']="» Your details have been updated successfully!";
else {
$Uerr[]='» error updating your account'.mysql_error();
}
}
}
if(count($Uerr))
{
$_SESSION['Umsg']['Ureg-err'] = implode('<br />',$Uerr);
}
header("Location: account.php");
exit;
}
答案 1 :(得分:2)
我有一个包含用户详细信息和更新语句的表单 如果用户想要更新这些细节,我添加了验证 电子邮件无法与其他帐户关联,因此 该陈述的问题是,如果用户没有改变他们的 发送电子邮件并更新其详细信息,他们将收到错误信息 已经存在。
为什么不直接检查是否存在其他帐户除了他的帐户以外的电子邮件,只需对您的查询进行一些更改即可解决。
$queryuser=mysql_query("SELECT * FROM customer WHERE email='" .
mysql_real_escape_string($_POST["myusername"]) . "' AND cus_id!=" . intval($cus_id));
答案 2 :(得分:1)
我做了一些丑陋的事,但效果很好。
我在一些隐藏的输入上添加实际信息,如:
<input type="hidden" name="actual_email" value="<?php echo $object->email; ?>" />
现在您只需要检查隐藏输入上用户输入(可见的)上的电子邮件是否相同,如果是,则忽略电子邮件验证,因为这意味着用户未更改其电子邮件。 / p>
答案 3 :(得分:0)
当您让用户更改其信息时,他们应该只能访问其帐户(出于安全和隐私目的)。因此,在获取信息时,您应该使用他们的电子邮件作为标识符。