2016-07-08 3 views
1

Я принимаю постоянный номер счета (pan) от пользователя и перед отправкой, я делаю проверку, если номер панорамирования уже существует в db. Он работает, и я также получаю сообщение об ошибке, что pan no уже зарегистрирован Если я игнорирую ошибку и не меняю номер панорамирования и продолжаю отправлять, он попадает в базу данных.Данные сохраняются в db во время ошибки

Я заметил, что после проверки проверки введенное число остается там. Я хочу знать, как я могу освободить поле ввода после получения ошибки. Если он остается пустым, кнопка отправки не будет работать. Итак, как я могу удалить введенный номер из поля ввода после появления ошибки и как я могу получить фокус курсора в поле ввода?

Благодаря

enter image description here

HTML

<input name="panno" type="text" id="panno" style="width:219px;" /> 
<span id="pan_status1"></span> 

ФУНКЦИЯ

$("#panno").change(function() 
      { 
       $("#pan_status1").html('<img src="images/9.gif" align="absmiddle">&nbsp;Loading Please wait...'); 
       var id=$(this).val(); 
       var dataString = 'panno='+ id; 
       $.ajax 
       ({ 
        type: "POST", 
        url: "checkp.php", 
        data: dataString, 
        cache: false, 
        success: function(html) 
        { 
         $("#pan_status1").html(html); 

        } 
       }); 

      }); 

CHECKP.PHP

<?php 

require("connection/config.php"); 
    if(isset($_POST['panno'])) 
    { 
    $mpan = $_POST['panno']; 

    $sql_check = mysql_query("select * from register where pan_no='".$mpan."'") or die(mysql_error()); 

    if(mysql_num_rows($sql_check)) 
    { 
    echo '<font color="red"><STRONG>'.$madhar.'</STRONG> is already registered.</font>'; 


      $response = array(); 
      $response['successStatus'] = 'error'; 
      $response['responseMessage'] = $erroMessage; 
      header('Content-type: application/json'); 
      echo json_encode($response);  

    } 
    else 
    { 
      $response = array(); 
      $response['successStatus'] = 'success'; 
      $response['responseMessage'] = $erroMessage; 
      header('Content-type: application/json'); 
      echo json_encode($response); 
    } 
} 
?> 

EDIT

Я сделал изменения в файле PHP. Теперь, когда я ввожу номер панорамирования и если введенный номер сковорода не существует в базе данных, я получаю следующий выход рядом с кнопкой ввода

{"successStatus":"success","responseMessage":null} 

и если он существует, я получаю следующее

123456789012 is already registered.{"successStatus":"error","responseMessage":null} 

Теперь, когда статус захватываются, как я могу сделать поле ввода пустым, если состояние ошибки

Я не хочу, чтобы показать вывод HTML/JSON, если состояние успеха и хочет показать ТОЛЬКО html, если статус - это ошибка.

+0

Вы должны проверить серверную сторону * всегда *. –

+0

[Little Bobby] (http://bobby-tables.com/) говорит *** [ваш скрипт подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can- я-не допустить, SQL-инъекцию-в-PHP) ***. Даже [избегая строки] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) небезопасно! –

+0

*** Пожалуйста, прекратите использование 'mysql_ *' функций (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). *** [Эти расширения ] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared- statements.php) и подумайте об использовании PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

0

Поскольку mysql (расширение php) устарело, вы должны mysqli выполнить код SQL. Далее следует избегать входящего запроса POST, потому что вы не хотите, чтобы его взломали через SQL Injection.

Вы можете ответить JSON, чтобы сообщить стороне клиента (jQuery), что у вас есть ошибка или нет.

Кроме того, не отправляйте PHP-ошибки клиенту, вы можете использовать решение try/catch.

+1

Это не то, что ОП задает –

+0

О, Алон, я думаю, что то, что сказал Кобуз, здесь. :-) Хотя это не может быть «прямым, буквальным» ответом, это, безусловно, актуально. ### Чтобы прояснить, возможно, что Cobuz может предложить: «бросать исключение» - очень удобный способ сделать проверку. Код на сервере может установить блок 'try {}' вокруг своего вызова внутренней функции, и вы соглашаетесь, чтобы этот код «выкинул исключение», если что-то пойдет не так. Исключение суммируется и может быть использовано для создания сообщения об ошибке. (Обычная 'функция' часто используется для выполнения этой части.) –

0

Это прямолинейно - достаточно, чтобы очистить поле, хотя пользователь может не пожелать вам этого сделать, особенно если это медленная машинистка. (Они могут сказать себе: «О, я поменял два номера!» и исправьте их фактический tpyo, затем нажмите кнопку еще раз.)

Я полагаю, что то, что вам нужно сделать здесь, чтобы ваш JavaScript помнить, что сервер сказал его (с помощью POST результата), что число не является действительным. (Или, еще лучше, помнить, что он еще не сказал вам, что определенное число равно.) Если пользователь все равно нажимает кнопку, вы можете дать ему информативное сообщение и ничего не отправлять серверу.

И тогда, независимо от того, вы должны также проверки поступающей информации на стороне сервера. Несмотря на то, что вы предоставляете AJAX-вызов для проверки номера PAN, сервер в конечном итоге несет ответственность за правильное обновление базы данных. Он должен еще раз проверить, чтобы убедиться, что число действительно, прежде чем отправлять его в базу данных. И вы должны предоставить соответствующие тесты этого результата в своем JavaScript: чтобы увидеть, удалось ли сообщение, а если нет, почему бы и нет.

Ваш JavaScript не должен сознательно отправлять отсутствующий или недействительный номер PAN на хост. Однако хост не должен предполагать, что клиент «делает правильные вещи». Конечная ответственность за содержание базы данных лежит на хосте.

+0

Я проверяю всю страницу перед отправкой, и в конце уже есть подтверждение, что если какое-либо из полей ввода пустое, это не позволяет идти вперед , Но в этом случае значение из поля ввода не очищается, поэтому он также принимает неверный ввод. не могли бы вы рассказать мне, какие изменения мне нужно очистить окно ввода после отображения ошибки? номер панорамирования уже зарегистрирован? – Sabha

+0

Мне нужна инструкция else в файле 'checkp.php'? которые можно снять, чтобы освободить поле ввода? – Sabha

+0

Что я имею в виду, так это то, что вы повторите * запрос, выполняемый этим битом кода *, во второй раз. * (Или, конечно, вы могли бы поставить тест в функцию, вызываемую из два места ...) Код, который собирается вставить новый PAN в таблицу, должен сначала проверить PAN. (На самом деле, он должен сделать это * тщательно. * Убедитесь, что он состоит из точно столько-то цифр и т. Д. Все. –