2016-05-15 5 views
-2

$ recruitcheck/$ badgecheck на самом деле работает, и он возвращается правильно, и он обеспечивает проверенное эхо, но я предполагаю, что я делаю что-то неправильное с материалом store/bind/close, так как у меня возникают некоторые проблемы с выяснением, как именно оно работает.Что мне не хватает, что вызывает: Команды не синхронизированы; вы не можете запустить эту команду сейчас?

Проблема возникает с помощью $ emailcheck/$ namecheck, потому что он неточно возвращает запрос, и это похоже на обход фазы $ register, где она возвращает эхо-ошибку, поэтому $ mailcheck/$ 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 на самом деле работает, так как она изменяется с неправильным против правильного ввода, но код не правильно переходить к следующей проверке.

ответ

0

Вы звоните mysqli_close() за $emailcheck и $namecheck вопросов, прежде чем звонить по телефону mysqli_num_rows().

+0

Именно то, что я собирался сказать. @BaileyF Я бы хотел добавить метод отладки 101: отрезать некоторые коды до тех пор, пока он не сработает, а затем поместите его обратно за строкой. Это не единственная техника, не всегда лучшая, но может быть действительно полезной для новичков, а иногда и для быстрого выяснения проблемы. –

+0

Я вставил fetch, но он все еще не запускает $ emailcheck/$ namecheck. –

+0

@BaileyF: Пожалуйста, покажите нам содержимое '$ passcheck',' $ recruitpass' и '$ badgecheck'. –