PHP检查重复的证书号MySQL表

时间:2011-06-23 18:03:13

标签: php mysql forms

我有一个接受多个输入然后将其提交到数据库的表单但是有一个字段保存了我希望在插入数据之前查询数据库的记录的证书编号,以确保证书编号是还没有出席。我可以在输入字段时执行此操作,即当用户选中字段然后显示通知时?

如果是这样,有人可以发布一个如何做到这一点的例子。

调用MySQL表 - 合同 MySQL字段名为 - guarantee_no

Form 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 个答案:

答案 0 :(得分:1)

您自己编程,但由于客户端无法了解所有用户名,因此您必须询问服务器。提交后,告诉用户姓名,或使用AJAX。

但我会建议你使用众多已经编写过的插件之一。

我非常推荐jQuery Validator Plugin - 他们有example that does exactly what you want,你可以看到他们使用的代码。

答案 1 :(得分:1)

根据你的问题。如果要在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 : '' ?>

注意:如果您不想重新加载页面,则应使用带有PHP的Ajax。这只是一种简单的方法。您可以相应地使用。

希望它有所帮助... ... !!

答案 2 :(得分:0)

您将不得不使用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!");
       };
 });

};

这是一个通用的例子。您的字段必须具有ID = your_form_element,并且您需要一个名为test_for_dupe.php的PHP文件来运行查询。您可能应该查看jQuery示例并尝试解决此问题。如果您需要更多帮助,请发布另一个问题希望这能帮到你。

答案 3 :(得分:0)

'tab out'是可行的,但是需要一个AJAX系统来进行检查。这样的系统容易受到竞争条件的影响(例如,标签输出,一切正常,但在用户使用鼠标并点击提交所需的10秒内,其他人创建了相同的记录),因此您仍需要提交 - 时间检查。

对于服务器端检查,您只需执行SELECT查询以查找证书编号,如果返回任何行,则使用cert#。如果它正在使用,那么不要插入。为了更好的安全性,你需要将一些事务和锁定混合在一起,这样检查和插入之间的时间就不容易被其他用户偷猎。