Что я пропускаю, что вызывает: Команды не синхронизированы; Вы не можете запустить эту команду сейчас?

$ Recruitcheck/$badgecheck на самом деле работает, и он возвращается правильно, и он обеспечивает проверенное эхо, но я предполагаю, что я делаю что-то не так с вещами store/bind/close, так как у меня возникли проблемы с выяснением, как именно это работает,

Проблема возникает с $emailcheck/$namecheck, потому что он не точно возвращает запрос, и он как бы обходит этап $register, где он возвращает эхо ошибки, поэтому $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;}

Проверка рекрута на самом деле работает, так как она изменяется при неправильном вводе по сравнению с правильным вводом, но код неправильно переходит к следующим проверкам.

1 ответ

Решение

Ты звонишь mysqli_close() за $emailcheck а также $namecheck запросы, прежде чем позвонить mysqli_num_rows() на них.

Другие вопросы по тегам