我正在尝试使用户发送一封电子邮件,该电子邮件尚未被他使用以下代码引用。但是,即使MySQL数据行中已经存在相同的电子邮件,否则else语句也会将电子邮件更新为数据。
if(isset($row)){
if (array_key_exists("email", $_POST)){
$query = "SELECT id FROM users WHERE email = '".mysqli_real_escape_string($link,$_POST['email'])."' LIMIT 1";
$ans = mysqli_query($link, $query);
if(mysqli_num_rows($ans) > 0){
$nofriend = $_POST['email']." is already registered.";
}
else{
$referredemails = $row["rfremails"];
$array = explode(",", $referredemails);
print_r($array);
for($i = 0; $i < sizeof($array); $i++){
if($array[$i] == $_POST["email"]){
$nofriend = "This e-mail is already referred by you.";
}
else{
$referdate = getdate();
$timestamp = "$referdate[mday] $referdate[month] $referdate[year]";
$opngems = $row["gems"];
$query = "UPDATE users SET rfremails = '".$referredemails.",".$_POST["email"]."', gems = '".$opngems."+1-".$timestamp."-".$_POST["email"]."' WHERE id = '".mysqli_real_escape_string($link,$_SESSION['id'])."' LIMIT 1";
mysqli_query($link,$query);
header("Location: showupdate.php");
}
}
}
}
}
答案 0 :(得分:0)
这是由于for循环中的条件引起的
for($i = 0; $i < sizeof($array); $i++){
if($array[$i] == $_POST["email"]){
//stuff
} else {
//....$query = "UPDATE users SET rfremails =...
}
}
当用户引用了一封以上电子邮件时,此条件将被评估为false,从而将处理其他代码段,从而导致数据库中的更新。
在这种情况下使用帮助变量是明智的。例如:
$noFriend = false;
for ($i = 0; $i < sizeof($array); $i++) {
if ($array[$i] == $_POST["email"]) {
$noFriend = true;
...
}
if ($noFriend === false) {
//update
}
当您第一次发现相同的引用电子邮件时,还可以使用 break 语句来加快处理速度。