Проверка PHP для дубликата номера сертификата MySQL Table - PullRequest
1 голос
/ 23 июня 2011

У меня есть форма, которая принимает несколько входных данных, а затем отправляет ее в базу данных, однако есть поле, в котором содержится номер сертификата для записи. Я хотел бы запросить базу данных до вставки данных, чтобы убедиться, что номер сертификата не присутствует Могу ли я сделать это, когда поле введено, т.е. когда пользователь выходит из поля и затем отображает уведомление?

Если так, то кто-нибудь может опубликовать пример того, как это сделать.

Таблица MySQL называется - контракт Поле MySQL называется - Guarantee_no

Форма POST для create.php (код ниже)

<?php
    include "includes/connection.php";

    $installer      = $_POST['inputInstaller'];
    $fitter         = $_POST['inputFitter'];
    $guarantee      = $_POST['inputGuaratnee_no'];
    $equipment      = $_POST['inputEquipment'];
    $certificate    = $_POST['inputCertificate_no'];
    $installed      = $_POST['inputInstall_date'];

    if(!$_POST['submit']){
        echo "Please Enter Data into the Form";
        printf("<script>location.href='index.php'</script>");
    } else {
        mysql_query("INSERT INTO contract (`id`,`user_id`,`installer`,`fitter`,`guarantee_no`,`contact_id`,`equipment`,`certificate_no`,`install_date`)
                       VALUES(NULL,'1','$installer','$fitter','$guarantee',NULL,'$equipment','$certificate','$installed')") or die(mysql_error());
        echo "Guarantee Record was Added, Thank You!";
        printf("<script>location.href='index.php'</script>");
    }               
?>

Заранее спасибо за помощь

Ответы [ 4 ]

1 голос
/ 23 июня 2011

По вашему вопросу. Если вы хотите использовать эту проверку в PHP. Вы можете использовать $_SESSION переменные.

В вашем файле действий. Использование:

<?php
    session_start();
    include "includes/connection.php";

    $installer      = $_POST['inputInstaller'];
    $fitter         = $_POST['inputFitter'];
    $guarantee      = $_POST['inputGuaratnee_no'];
    $equipment      = $_POST['inputEquipment'];
    $certificate    = $_POST['inputCertificate_no'];
    $installed      = $_POST['inputInstall_date'];

    if($installer == '' || $fitter == '' || $guarantee == '' || $equipment == '' || $certificate == '' || $installed == ''){
        $_SESSION['status'] = 'error';
    } else {
        mysql_query("INSERT INTO contract (`id`,`user_id`,`installer`,`fitter`,`guarantee_no`,`contact_id`,`equipment`,`certificate_no`,`install_date`)
                       VALUES(NULL,'1','$installer','$fitter','$guarantee',NULL,'$equipment','$certificate','$installed')") or die(mysql_error());
        $_SESSION['status'] = 'success';
   }               
header("location: index.php");
?>

Теперь в вашем index.php файле. Используйте вверху:

<?php
session_start();
if($_SESSION['status'] == 'error') {
$msg = "Fill all form fields";
}
if ($_SESSION['status'] == 'success'){
$msg = "Record succesfully added";
}
?>

Теперь используйте переменную $msg, в которой вы хотите напечатать сообщение. как:

<?php echo isset($msg) ? $msg : '' ?>

Примечание: Если вы не хотите перезагружать страницу, следует использовать Ajax с PHP. Это просто простой способ. Вы можете использовать соответственно.

Надеюсь, что это помогает .. ура .. !!

1 голос
/ 23 июня 2011

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

Но я бы посоветовал вам использовать один из множества уже написанных плагинов .

Я настоятельно рекомендую плагин jQuery Validator - у них есть пример , который делает именно то, что вы хотите , и вы можете увидеть код, который они используют.

0 голосов
/ 23 июня 2011

«Вывод» возможен, но для проверки потребуется система AJAX. Такие системы уязвимы для условий гонки (например, вылет, все в порядке, но за 10 секунд, которые потребовалось пользователю, чтобы дотянуться до мыши и щелкнуть «Отправить», кто-то другой создал ту же запись), поэтому вам все равно нужно будет отправить проверка времени.

Что касается проверки на стороне сервера, вы просто выполните запрос SELECT для поиска номера сертификата, и, если какие-либо строки возвращены, сертификат # используется. Если он используется, тогда не делайте вставку. Для большей безопасности вам нужно добавить несколько транзакций и блокировать их, чтобы время между проверкой и вставкой не было уязвимым для браконьерства другими пользователями.

0 голосов
/ 23 июня 2011

Вам придется использовать AJAX.Чтобы упростить задачу, лучше всего использовать jQuery.ajax

. Вам нужен следующий JavaScript-код:

$("#your_form_element").blur(function(){
  $.ajax({
       url: "test_for_dupe.php?val=" & $(this).val(),
       context: document.body,
       success: function(){
         alert("Certificate already in DB!");
       };
 });

};

Это общий пример.Ваше поле должно иметь идентификатор = your_form_element, и вам нужен PHP-файл с именем test_for_dupe.php, который выполняет запрос.Вы, вероятно, должны взглянуть на примеры jQuery и попытаться решить эту проблемуОтправьте другой вопрос, если вам нужна дополнительная помощь.Надеюсь, это поможет вам.

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