2017-01-05 2 views
1

Я пытаюсь остановить или отключить кнопку отправки, если пользователь получил сообщение о том, что письмо существует в базе данных.Запрос на предотвращение формы на отправке ответа назад с php

Я постарался установить, если между ними, но не повезло. На jquery нет гуру.

Некоторые говорят, что я должен использовать e.preventDefault(); но где я его положу? Пробовали повсюду, но либо скрипты не работают, либо пользователь может зарегистрироваться в любом случае.

Может быть, лучше всего проверить все, начиная с php ?? Просто подумал, что jQuery лучше использовать плагин Validate.

Любой ключ? Спасибо =)

У этого сценария:

Jquery:

$("#email").keyup(function (e){ 
    clearTimeout(x_timer); 
    var e_mail = $(this).val(); 
      if (e_mail.length > 4) { 
     x_timer = setTimeout(function(){ 
      check_email_ajax(e_mail); 
     }, 1000); 
    } 
}); 

    function check_email_ajax(e_mail){ 
     $("#email-result").html('<img src="../cms/assets/images/loading.gif" width="20px" height="20px" />'); 
     $.post('ajax/register.ajax.php', {'email':e_mail}, function(data) { 
      $("#email-result").html(data); 
     }); 
    } 

PHP:

if(isset($_POST["email"])) { 

     if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND  strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { 
     die(); 
    } 

$email = filter_var($_POST["email"], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH); 

$statement = $link->prepare("SELECT email FROM FF_Users WHERE email=?"); 
$statement->bind_param('s', $email); 
$statement->execute(); 
$statement->bind_result($email); 
if($statement->fetch()){ 
    die('<i class="fa fa-times-circle" style="color:red;" aria-hidden="true"></i> <small>(taken)</small>'); 
}else{ 
    die('<i class="fa fa-check" style="color:green;" aria-hidden="true"></i> <small>(Yeey :-))</small>'); 
}} 
+0

Рассматривали ли вы _enabling_ кнопку отправки после того, как электронная почта проверяется , и отключить его в противном случае? –

+0

@XerenNarcy Да, как и я написал, он пытался скрыть кнопку отправки (или показать), но не повезло. – KommerSnart

ответ

0

Не уверен, что это было лучшее решение, но оно работает так, как должно.

<input id="submit" type="submit" value="Submit"> 

, если электронная почта найдено:

echo '<script> $(document).ready(function() { $("#submit").attr("disabled", "disabled"); }); </script>'; 

, если адрес электронной почты не найден:

echo '<script> $(document).ready(function() { $("#submit").removeAttr("disabled"); }); </script>'; 

Он работает :-)

0

Вы можете работать whitout представить кнопки отлично, с button type="button". Я думаю, что вы ищете что-то вроде этого:

function check_email_ajax(e_mail){ 
     $("#email-result").html('<img src="../cms/assets/images/loading.gif" width="20px" height="20px" />'); 
     $.post('ajax/register.ajax.php', {'email':e_mail}, function(data) { 
      $("#email-result").html(data); 
      var result= $("i").attr("id") 
      if (result==red){ 
      //If this is the result you stay on the page and user see the red message :) 
      } 
      if (result==green){ 
      //If result is green I imagine you want to go where the action in form tag says, so delete action from the form, you can simply redirect where you want: 
      url = "your-file.php" 
      $(location).attr("href", url) 
      } 
     }); 
    } 

Добавить идентификатор для иконок:

if($statement->fetch()){ 
    die('<i class="fa fa-times-circle" id="red" style="color:red;" aria-hidden="true"></i> <small>(taken)</small>'); 
}else{ 
    die('<i class="fa fa-check" id ="green" style="color:green;" aria-hidden="true"></i> <small>(Yeey :-))</small>'); 
}} 

Надеется, что это помогает.

+0

Спасибо за помощь =) Я попробовал ваш скрипт, но в консоли я получаю сообщение об ошибке: ReferenceError: Не могу найти переменную: зеленый (если выдается красный флаг и существует электронная почта пользователя). Также попытался изменить die(); to echo(); вместо этого, то же самое. – KommerSnart

+0

Попробуйте с эхом ""; вместо echo(); Он должен работать, потому что возвращает только с идентификатором, а зеленый - не переменная, как вы говорите в ошибке. Msge – SilverSurfer

+0

Извините за задержку ответа, пробыли в течение нескольких дней. Но вернемся к сценарию, если я попытаюсь использовать оповещение, чтобы показать результат, он становится неопределенным, несмотря ни на что, поэтому он просто не получит id из php-файла ?! Также попробовал (это), а также эхо без(). – KommerSnart

Смежные вопросы