【问题标题】:How to validate an input to see if it matches a record in the database如何验证输入以查看它是否与数据库中的记录匹配
【发布时间】:2016-07-08 15:03:15
【问题描述】:

我正在尝试创建一个查询数据库并返回结果是否存在于数据库中的输入。我让它部分工作,但只要我只输入一个字母,我的盒子就会发出绿光。如果它一直保持红色,直到它真正找到完全匹配然后变成绿色,那会更好。编辑:我刚刚意识到我的查询也有问题。它现在正在正确查询数据库。原来的问题是我的主要问题。

$(document).ready(function(){
    $("#load").keyup(function (e){
        e.preventDefault();
       ;

    searchRequest = $.ajax({
        url: 'check_load_no.php',
        data: $('#load').serialize(),
        type: 'POST',
        success: function (data) {
            $(".verify").css('box-shadow', '0px 0px 9px 2px #84f850');
            $(".error").css('display', 'none');
            $(".success").css('display', 'block');

        },
        error: function (data) {
            $(".verify").css('box-shadow', '0px 0px 9px 2px #ad0037');
            $(".success").css('display', 'none');
            $(".error").css('display', 'block');
        }

    });

    });
   });

下面是我的php

<?php include('../model/conn.php'); ?>
<?php include('../model/conn2.php') ?>

<?php
$sql = "SELECT cmt_2 FROM oeordhdr_sql WHERE cmt_2 = '{$_POST['load']}'";
$query = (odbc_exec($conn,$sql));
$row = (odbc_fetch_row($query));
if($row['cmt_2']){
    echo 'yeah';
}

HTML

  <h1>Please add the info based on your load number</h1>
        <form action="" method="post">
        <div class="card" >
            <input class="verify" id="load" type="text" name="load" placeholder="Load Number" required/>
    <span class="error" style="display: none;"><i class="fa fa-exclamation-triangle fa-lg" aria-hidden="true"> </i>I'm not finding anything</span>   
    <span class="success" style="display: none;"> <i class="fa fa-check-cube fa-lg" aria-hidden="true"> </i> Congratulations, that record exists!</span><br> 
<button  class="update_button" type="submit" name="add" value="update">Update</button></div></form>

【问题讨论】:

  • 也许只有在输入了至少 2-3 个字符的情况下才运行查询?
  • 注意:出于安全原因,在 odbc_exec() 之前使用 odbc_prepare() - 阅读 - php.net/manual/en/function.odbc-prepare.php
  • 我的印象是odbc_exec()准备和执行?php.net/manual/en/function.odbc-exec.php还有一个odbc_execute需要你先准备。
  • 这很容易受到 SQL 注入的影响,因为您将用户输入连接到 SQL 中。您应该改用参数化的预处理语句。
  • @MikeBrant 示例?

标签: php jquery ajax sql-server-2008 ajaxform


【解决方案1】:

即使 PHP 脚本没有回显“是”,您的错误处理程序也不会被调用,因为服务器响应仍然是 HTTP 200。因此,您的成功处理程序将始终触发(当然,除非有您的服务器/应用程序的实际问题)。

如果您想触发错误处理程序,您必须让服务器发送一个 400 或 500 系列 HTTP 响应代码(在这种情况下可能是 404),以应对未找到匹配项的情况。

或者,您可以将所有逻辑放在成功处理程序中,而根本不更改服务器端代码。您只需要测试是否存在“是”的值。

您还应该考虑在 DOM 元素上添加/删除 CSS 类,而不是在函数中专门指定 CSS。这将允许您稍后根据需要更改 CSS,而无需更改此函数。

【讨论】:

  • 我也尝试将逻辑放入成功处理程序中。它现在保持红色,永远不会变绿。我检查了数据库,在 number.3259267999 后面有空格。所以我用空格尝试了它,仍然没有运气。
  • 我将查询中的“=”更改为 LIKE,现在在输入完整数字时返回“是”,但没有变绿还有其他想法吗?
【解决方案2】:
success: function (data) {
     if(data==="yeah")
     {
        $(".verify").css('box-shadow', '0px 0px 9px 2px #84f850');
        $(".error").css('display', 'none');
        $(".success").css('display', 'block');
     }
     else
     {
        $(".verify").css('box-shadow', '0px 0px 9px 2px #ad0037');
        $(".success").css('display', 'none');
        $(".error").css('display', 'block');
     }
}


检查响应是否是您需要的,然后才添加 .success 类

【讨论】:

  • 这给了我同样的结果。编辑:实际上这使它什么都不做。没有发光的红色或绿色
  • 我只是认为 class .error 你为处理程序错误所做的,但现在我认为它是为了响应?如果 db 中没有此类数据,则添加类 .error?
  • 它现在保持红色,永远不会变绿。我检查了数据库,有空格。3259267999。所以我用空格尝试了它,仍然没有运气。
  • 我不知道您是否注意到我的代码中有错误 - 忘记了一个大括号,不知道它是否有帮助。我编辑了它
  • 我将查询中的“=”更改为 LIKE,现在在输入完整数字时返回“是”,但没有变绿还有其他想法吗?
【解决方案3】:

决定使用php而不是更改css来输出错误/成功消息

$("#load").keyup(function (e){
        e.preventDefault();


    searchRequest = $.ajax({
        url: 'check_load_no.php',
        data: $('#load').serialize(),
        type: 'POST',
        success: function (data) {
            console.log(data);
            if(data==="yeah")
            {
                $(".validate").html(data);

            }
            else
            {
                $(".validate").html(data);


            }
        }

    });

    });

我的 php

 $sql = "SELECT cmt_2 FROM oeordhdr_sql WHERE cmt_2 LIKE '{$_POST['load']}'";
    $query = odbc_exec($conn,$sql);
    $row = (odbc_fetch_row($query));
    if($row){
        echo '<span class="success" style="display: block;"> <i class="fa fa-check-cube fa-lg" aria-hidden="true"> </i> Congratulations, that record exists!</span>';

    }else{
        echo'<span class="error" style="display: block;"><i class="fa fa-exclamation-triangle fa-lg" aria-hidden="true"> </i>I\'m not finding anything</span>';
    }

我的 HTML

<h1>Please add the info based on your load number</h1>
        <form action="" method="post">
        <div class="card" >
            <input class="verify" id="load" type="text" name="load" placeholder="Load Number" required/>
    <div class="validate"></div><br> 
<button  class="update_button" type="submit" name="add" value="update">Update</button></div></form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2022-01-10
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2020-11-27
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多