2013-08-23 117 views
0

我是PHP和Mysql的新手,因为某些原因,它只会检查语句,如果($ email == $ result2)输入是用户名或电子邮件。我不知道为什么?有人可以从逻辑上解释它,我坚持几个小时搞清楚它。 :(谢谢请善待。我不知道这段代码有什么问题SQL

<?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 
    { 

    } 
} 

}

+0

什么意思 –

+0

这可能会非常慢。如果你的用户表中有大量的行呢?这是很多数据要返回和迭代。我认为你应该重构这个以在你的查询中包含电子邮件和用户名参数*,并让数据库为你完成工作。 –

+0

删除'exit()'。删除空的'else'。如果你希望第二个条件只在第一个条件为false时被检查,那么使用'else if'。如果没有,使用'if'。无论哪种情况,我都不需要'exit()'。 – Ariane

回答

0

我想你更好地使用你的电子邮件地址和用户名栏中唯一的,那么你就不需要再检查一下,MySQL会为你做的!

4

这就像写的。如果任if()测试成功,你告诉脚本exit()行为。

拆下出()调用...

你也真的需要在查询中学习WHERE条款。您正在吮吸整个用户表并逐个比较记录。这相当于驾车去杂货店,购买整个商店的库存,把它带回家......然后把它扔在垃圾里,因为你真正想要的只是一块糖果。

+0

,但它只检查($ email == $ result2),即使我的输入是与数据库匹配的用户名,它也会说已经使用的电子邮件地址。我不知道是什么问题... – Daryl

+0

所以开始调试。看看你的表单是否正确提交。看看$ email是否应该是你认为的。看看$ result2是你认为它应该是什么,等等...... –

+0

每当我删除isset()时它都很奇怪,它会检查并运行我所有的语句,但给我一个错误,无法识别的索引,只要我把isset()错误消失,我的问题回来了......任何解释?我试过WHERE子句,但使用where子句我只能检查是否((用户名==数据库)&&(密码==数据库)),没有明确标识是否用户名或密码被采取,这一直强调我12小时,我可以找不到任何解决方案 – Daryl

0

试试这个

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'])) 

此功能来检查他们。你正在检查电子邮件那就是为什么你没有得到第二个如果。

0

在注释掉第一个if语句(if($ username == $ result))后,它会进入第二个if语句(if($ username == $ result))吗?

如果是这样,那么它会持续触及exit()函数。

0

伙计们,我有点猜测了你的意见。由于某种原因,我需要包含isset($ _ POST ['username'])以及isset($ _ POST ['email']),以便我的if语句全部执行......也许它是isset检查是否存在是用户名的值。

+0

检查我编辑的答案。 –

0

改变这一行的下面一行:

$extract= mysql_query("SELECT username, email FROM users"); 

然后使用where子句如下:“它只是检查声明”

$extract= mysql_query("SELECT username, email FROM users where username='$username' and email='$email'");