2016-05-15 5 views
-2

$ recruitcheck/$ badgecheckは実際に動作し、正しく返され、エコーが確認されますが、ストア/バインド/クローズのもので間違ったことをしていると思います。できます。私は何が欠けている原因です:コマンドが同期していない;今すぐこのコマンドを実行することはできませんか?

$ emailcheck/$ namecheckはクエリを正確に返さないので、エラーエコーを返す$ registerフェーズに迂回するので、$ emailcheck/$ namecheckは常にfalse/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_num_rows()を呼び出す前に、$emailcheck$namecheckのクエリに対してはmysqli_close()を呼び出してください。

+0

まさに私が言っていたことです。 @BaileyF私は101のデバッグ手法を追加したい:それが動作するまでいくつかのコードをカットし、それを1行ずつ戻す。これは唯一のテクニックではなく、必ずしも最高のものではありませんが、初心者にとっては本当に便利なことがあります。 –

+0

フェッチを挿入しましたが、それでも$ emailcheck/$ namecheckは実行されません。 –

+0

@BaileyF: '$ passcheck'、' $ recruitpass'、 '$ badgecheck'の内容を表示してください。 –

関連する問題