我错过了什么导致:命令不同步;你现在不能运行这个命令?

问题描述:

$ recruitcheck/$ badgecheck实际上可以正常工作,并且它可以正确返回,并且它提供了已验证的回显,但是我认为我在存储/绑定/关闭方面做了一些不正确的事情,因为我在准确计算有用。我错过了什么导致:命令不同步;你现在不能运行这个命令?

问题出现在$ emailcheck/$ namecheck中,因为它不能准确地返回查询,而且它有点绕过$ register阶段,它返回错误echo,所以$ emailcheck/$ namecheck总是假/ 0。

我以前工作过,但我试图实现一些安全功能,因此我添加了准备好的语句,并且在添加这些语句之前我几乎不知道我在做什么,所以如果此问题不恰当,信息不够。如果您发表评论,我将编辑该帖子以使其更具相关性。请给我机会。

$recruitcheck = mysqli_prepare($maindb, "SELECT aurapass, recruitbadge FROM auras WHERE auraname = ?"); 
      mysqli_stmt_bind_param($recruitcheck, "s", $recruitername); 
      mysqli_stmt_execute($recruitcheck); 
      mysqli_stmt_bind_result($recruitcheck, $passcheck, $badgecheck); 
      mysqli_stmt_fetch($recruitcheck); 
      if($passcheck == $recruitpass){ 
       if($badgecheck == "valid"){ 
        mysqli_close($recruitcheck); 
        echo "<script>alert('Recruiter badge verified.')</script>"; 
        $emailcheck = mysqli_prepare($maindb, "SELECT * FROM auras WHERE email = ?"); 
        mysqli_stmt_bind_param($emailcheck, "s", $email); 
        mysqli_stmt_execute($emailcheck); 
        mysqli_stmt_fetch($emailcheck); 
        $namecheck = mysqli_prepare($maindb, "SELECT * FROM auras WHERE auraname = ?"); 
        mysqli_stmt_bind_param($namecheck, "s", $auraname); 
        mysqli_stmt_execute($namecheck); 
        mysqli_stmt_fetch($namecheck); 
        if(mysqli_num_rows($emailcheck)>0 || mysqli_num_rows($namecheck)>0){ 
         die("<script>alert('New auraname/email is already taken.')</script>"); 
        } 
        else{ 
         mysqli_close($emailcheck); 
         mysqli_close($namecheck); 
         if($email == $emailconfirm){ 
          $register = mysqli_prepare($maindb, "INSERT INTO auras (recruitername, recruitmethod, email, birthday, country, gender, auraname) VALUES (?, ?, ?, ?, ?, ?, ?)"); 
          mysqli_stmt_bind_param($register, "sssisss", $recruitername, $recruitmethod, $email, $birthday, $country, $gender, $auraname); 
          mysqli_stmt_execute($register); 
          mysqli_close($register); 
          if(!$register) { 
           echo mysqli_error($maindb); 
           die("<script>alert('Error returned during registration: See bottom of page.')</script>"); 
          } 
          else{ 
          die("<script>alert('New aura registered successfully!')</script>"); 

$ passcheck/$ badgecheck只是绑定变量,他们被称为唯一的地方是,你看到他们在这里。否则:

$recruitpass = cleaninput($_POST["recruitpass"]); 

function cleaninput($info) { 
      $info = trim($info); 
      $info = stripslashes($info); 
      $info = htmlspecialchars($info); 
      return $info;} 

的recruitcheck实际工作,因为它与不正确与正确输入改变,但代码不正确地移动到下一个检查。

你叫mysqli_close()$emailcheck$namecheck查询你叫他们mysqli_num_rows()之前。

+0

正是我要说的。 @BaileyF我想添加一个101的调试技巧:剪切一些代码直到它工作,然后逐行放回去。这不是唯一的技术,并不总是最好的,但对于初学者来说可能是非常有用的,有时也可以快速找出问题的根源。 –

+0

我插入了一个fetch,但它仍然不运行$ emailcheck/$ namecheck。 –

+0

@BaileyF:请向我们展示'$ passcheck','$ recruitpass'和'$ badgecheck'的内容。 –