2016-07-22 56 views
-1

我试图在一个php页面内使用查询两次时遇到MySQLi和PHP的问题。问题是,第一个查询完美,但第二个不起作用。第一个查询设置了会话,但第二个查询不。这里是我的代码(我也有连接到数据库文件,表格及其它文件)..MySQLi第二个查询不起作用

$connection = new mysqli($server,$username,$password,$database); 

$username = $_POST['username']; 
$email = $_POST['email']; 

if($select1 = $connection->query("SELECT * FROM users WHERE username = '$username'")) { 
    $counter1 = $select1->num_rows; 
    if($counter1 != 0) { 
     $_SESSION["accesserror"] = "Error: <em>That username is already used by other member.</em>"; 
    } 
} 
else if($select2 = $connection->query("SELECT * FROM users WHERE user_email = '$email'")) { 
    $counter2 = $select2->num_rows; 
    if($counter2 != 0) { 
     $_SESSION["accesserror"] = "Eror: <em>That E-Mail is already used by other member.</em>"; 
    } 
} 
+0

而不是设置一个变量,显示真正的错误('mysqli'的最佳实践示例)。此外,不要sql注入您的分数 – Drew

回答

0

更换else if

else if($select2 = $connection->query("SELECT * ... 

随着if

if($select2 = $connection->query("SELECT * ... 

的问题你的代码是只要第一个查询成功运行,执行永远不会进入else if(即使第一个查询没有返回结果,它仍然运行succ essfully)。为了经常检查这两个条件,则需要分开单独if

这两个

PS:这将是更有效地运行一个查询,你应该永远插入用户提供的值,如$username直接在您的疑问;这是为了避免SQL注入。你的代码非常脆弱。这里是一个更安全,更高效的版本:

$username = mysqli_escape_string($_POST['username']); 
$email = mysqli_escape_string($_POST['email']); 
$sql = "SELECT * FROM users WHERE username='$username' OR email='$email'"; 
if($select = $connection->query($sql) && $select->num_rows) { 
    while($row = $select->fetch_assoc()){ 
     if($row['username']===$username){/* add the "username taken" error */} 
     if($row['email']===$email){/*add the "email taken" error */} 
    } 
}elseif($select===false){ 
    //Todo: handle server error. probably a badly formed query 
    //error details in $connection->error 
}else{ 
    // OK to register 
} 
+0

感谢您的帮助和建议。 – dovlapsy

+0

@dovlapsy不客气。我已经为我的解决方案添加了一些代码。如果我帮你解决了你的问题,一定要选择我的解决方案,这就是我们在这里感谢帮助者的方式。欢迎来到StackOverflow! – BeetleJuice

+0

我选择了你的解决方案,但无法使用utnil我达到了15的声望。感谢您发布的代码,但我想让用户确切知道什么是错误的(用户名或电子邮件),所以我不得不使用2个查询。再次感谢! :) – dovlapsy