我是PHP和Mysql的新手,出于某种原因,它只检查语句if($email==$result2)输入是用户名还是电子邮件。我不知道为什么?有人能合乎逻辑地解释一下吗?我已经想了好几个小时了(谢谢。请客气。
<?php
session_start();
include_once("connect.php");
$email = $_POST['email'];
$username = $_POST['username'];
//echo $_POST['email'];
if(isset($_POST['email']) )
{
$extract= mysql_query("SELECT username, email FROM users");
$resultq = mysql_num_rows($extract);
while($row= mysql_fetch_array($extract))
{
$result = $row['username'];
$result2 = $row['email'];
//$pass = $_POST['pass'];
if($email == $result2 )
{ //check if there is already an entry for that username
echo "Email Address is already used!";
exit(); //break;
}
if ($username == $result )
{
echo " Username is already Taken!";
//mysql_query("INSERT INTO users (Username, Password) VALUES ('$user', '$pass')");
//header("location:index.php");
exit(); //break;
}
else
{
}
}
}
它的行为与编写的一样。如果任一if()
测试成功,则将脚本告知exit()
。
删除exit()调用。。。
您还真的需要了解查询中的WHERE
子句。您正在浏览整个用户表,并一次比较一个记录。这相当于开车去杂货店,买下整个商店的存货,开车回家。。。然后把它都扔进垃圾桶,因为你真正想要的只是一块糖果。
我认为你最好在你的电子邮件和用户名列中使用unique,这样你就不需要再检查了,mysql会帮你做的!
在注释掉第一个if语句(if($username==$result))后,它是否进入第二个if语句?
如果是这样的话,那么它会继续调用exit()函数。
伙计们,我从你们的一些评论中猜到了答案。出于某种原因,我需要将isset($_POST['username'])与isset($_POST['email'])一起包含,以便执行我的if语句。。。也许是isset检查username是否有值。
尝试这个
if($email == $result2 )
{ //check if there is already an entry for that username
echo "Email Address is already used!";
//---------removed that line
}
else if ($username == $result ) //add else if instead of if
{
echo " Username is already Taken!";
//mysql_query("INSERT INTO users (Username, Password) VALUES ('$user', '$pass')");
//header("location:index.php");
//----------removed that line
}
else
{
}
编辑:
更改此
if(isset($_POST['email']) )
至
if(isset($_POST['email']) or isset($_POST['username']))
这是为了检查两者。你只检查电子邮件,这就是为什么你没有得到第二个if。
将此行更改为以下行:
$extract= mysql_query("SELECT username, email FROM users");
然后使用where子句如下:
$extract= mysql_query("SELECT username, email FROM users where username='$username' and email='$email'");