JQuery $ .post & php оператор if перестает работать - PullRequest
1 голос
/ 15 мая 2011

Это довольно специфично, и я пока не нашел ответа.
Я пишу сценарий для проверки, если имя уже введено на сервер SQL с использованием JQuery $ .POST.

Передняя часть выглядит так:

register.php

<div id="container" class="container">
    <div id="wrapper" class="wrapper">
        <div id="title" class="title">
            Welcome to Taskar!
        </div>
        <div id="login" class="login">
            <form method="post" action="registermembers.php">
            <div id="exists">
                Register Your Company Below:
            </div>
            <input type="text" id="company" name="company" value="Company Name"/> <br />
            <br />
            <input type="text" id="password" name="password" value="Default Password"/> <br />
            <input type="submit" name="submitcompany" value="Submit" />
            </form>

            <script>
            $(document).ready(function() {
                $('#company').keyup(function() {
                    var $company = $(this).val();
                    var $reg = $('#exists').html();
                    $.post('include/reg_post.php', { company: $company, reg: $reg }, function(company) {
                    $('#exists').html(company);
                    });
                });
            });
            </script>

        </div>
    </div>
</div>

Код бэкэнда выглядит так:

reg_post.php

<?php
include 'include/db.php';

$reg = $_POST['reg'];
$company = $_POST['company'];
$email_hash = $_COOKIE['email_hash'];
$password = $_COOKIE['password'];

$sql = "SELECT * FROM taskar_employee WHERE (company = '$company')";
$result = mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($result) <= 1){
        echo $reg;
    } else {
        echo "This Company Already Exists!";
    } ?>

Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я тестирую это, все работает нормально вплоть до того, как я ввожу название компании, которое находится в базе данных. Это показывает мне, что компания уже зарегистрирована. Когда я нажимаю клавишу Backspace или набираю другую букву, она все равно говорит мне, что компания все еще существует, хотя, очевидно, ее не будет.

Похоже, что оператор if хочет остановить продолжение функции $ .post после получения противоположного оператора?

Что вы, ребята, думаете?

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Ваша проблема заключается в том, как вы используете переменную $reg.

$reg содержит HTML-содержимое элемента #exists, поэтому для начала нужно зарегистрировать свою компанию:с.Но после того, как вы нажали название компании, которая существует, вы заменяете этот HTML на «Эта компания уже существует!».С этого момента $reg, как для JavaScript, так и для PHP, будет всегда"Эта компания уже существует!"(поскольку вы всегда передаете $reg в своем POST).

Вероятно, было бы намного проще, если бы содержимое этого div не передавалось или не обрабатывалось кодом PHP вообще.Было бы проще, если бы ваш PHP-скрипт просто возвращал «1», если компания существует, и «0», если нет (или некоторые другие одинаково простые флаги).

Тогда, на стороне JavaScript, вы можете простоделать:

$.post('include/reg_post.php', { company: $company }, function(exists) {
    var message;
    if (exists === '1') {
        message = 'This Company Already Exists!';
    }
    else {
        message = 'Register Your Company Below:';
    }
    $('#exists').html(message);
});
1 голос
/ 15 мая 2011

Вы передаете $('#exists').html(); для возврата в случае, если компания не найдена.Проблема в том, что в случае обнаружения компании вы заменяете html в #exists.Затем в следующий раз, когда вы позвоните по почте, вы передадите этот текст обратно, поэтому в этом случае:

if(mysql_num_rows($result) <= 1){
    echo $reg;
} else {
    echo "This Company Already Exists!";
} 

ваш $reg теперь установлен на This Company Already Exists!, поэтому независимо от того, что произойдет, вы собираетесь вернутьсяэтот текст.

...