Jquery Ajax: отображать анимацию jquery, если IP-адрес пользователя заблокирован и форма не отправлена ​​в таблицу SQL - PullRequest
0 голосов
/ 07 июля 2011

В целях тестирования у меня есть простая форма, которая запрашивает общую информацию, но пользователь может ввести информацию только один раз.Их IP-адрес записывается, поэтому, если они снова попытаются ввести информацию, данные не будут отправлены в таблицу SQL.Я использую Jquery Ajax для отправки формы.Если форма отправлена ​​успешно, появится сообщение «Информация отправлена».должно быть показано.Если IP-адрес пользователя сопоставляется с записанным IP-адресом, появляется сообщение «Вы можете отправить только один раз».Показано.

Моя проблема в том, что я не уверен, как заставить jquery ajax отображать «Вы можете отправить только один раз».сообщение после сопоставления обнаруженного IP-адреса с IP-адресом в базе данных.Он не должен использовать «error: function () ...»

Вот форма и скрипт Jquery Ajax:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("form#submit").submit(function() {

    var words     = $('#words').attr('value');
        $.ajax({
            type: "POST",
            url: "getuser.php",
            data: "words="+ words, 
            success: function(){
                $('form#submit').hide(function(){$('div.success').fadeIn();});
                },
            error: function(){
                $('form#submit').hide(function(){$('div.fail').fadeIn();});
                }

        });
    return false;
    });
});
</script>


<form id="submit" method="post">
<fieldset>
<legend>Enter Information</legend>

<label for="words">words:</label>
<input id="words" class="text" name="words" size="20" type="text">

            <button> Submit </button>
</fieldset>
</form>
<div class="success" style="display: none;">Information submitted.</div>
</div>
<div class="fail" style="display: none;">You only get to submit once.</div>

Вот скрипт PHP:

<?php

    mysql_connect("","","");
    mysql_select_db("");

//take IP address and match IP taken with IP in SQL table (I will do this myself later)

//if IPs match
if ($ip == $databaseIP)
{
   die();
}
else
{
        $words      = htmlspecialchars(trim($_POST['words']));

        $addClient  = "INSERT INTO test VALUES('','$words')";
        mysql_query($addClient) or die(mysql_error());
}    
?>

ОБНОВЛЕНИЕ: вот PHP-эквивалент того, что я хочу

 if ( $_POST['words']  )
    {

 if (!empty($_SERVER['HTTP_CLIENT_IP']))   
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }    
        $ipquery = mysql_query ("SELECT * FROM rate WHERE ip = '$ip' ");
        $ipquery = mysql_fetch_assoc($ipquery);
        $ipquery = $ipquery['ip'];

        if ($ipquery == $ip)
        {       
            echo "you only get to submit once";
        }
        else
        {
        mysql_query ("INSERT INTO rate VALUES ('','$words')");          

        echo "information submitted";   
        }
    }

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Я бы повторил вашу методологию здесь. Пусть PHP вернет строку, либо You have submitted, либо You have already done this, please stop submitting. Now. No really, stop.. Затем в вашей функции success установите, чтобы это был текст (val()) div успеха.

1 голос
/ 07 июля 2011

Если ваш PHP-скрипт возвращает ошибку HTTP при обнаружении IP-адреса, тогда ваш код должен работать. Не уверен, что die () возвращает и ответ об ошибке.

Понятно. У меня есть нечто подобное. Это то, что мой PHP возвращает

if ( isset($_GET["ajax"]) ) {
    echo $success ? "success" : "error";
}

И мой обработчик AJAX:

  $.ajax( {
    url: contactForm.attr( 'action' ) + "?ajax=true",
    type: contactForm.attr( 'method' ),
    data: contactForm.serialize(),
    success: submitFinished
  } );

function submitFinished( response ) {
  response = $.trim( response );

  if ( response == "success" ) {

    ...

  } else {

    ...
  }
}

Это должно дать вам то, что вам нужно.

Изменить: Новый ответ.

<script>
$(document).ready(function(){
    $("form#submit").submit(function() {

    var words     = $('#words').attr('value');
        $.ajax({
            type: "POST",
            url: "getuser.php",
            data: "words="+ words, 
            success: function(response){
                $('form#submit').hide(function(){$('div.status').append(response).fadeIn();});
                },
            error: function(){
                $('form#submit').hide(function(){$('div.status').append("Error while processing request.").fadeIn();});
                }

        });
    return false;
    });
});
</script>

Я не проверял это, но это должно работать для вашего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...