【问题标题】:Ajax call outputs the same messageAjax 调用输出相同的消息
【发布时间】:2019-09-18 11:27:23
【问题描述】:

我有下面的 ajax 调用来检查客户表中是否存在 card_number,但是,在这两种情况下,即使卡号存在,我也会得到相同的响应,即它不存在。所以最后两条消息都是“不存在”

agent_reload.php

<script type="text/javascript">
    $(document).ready(function()
    {
        $("#card_number").change(function() 
        { 
            var card_num = $("#card_number").val();

            $.ajax({  
                type: "POST",  
                url: 'CheckUserCardNumber.php',  
                data: "card_number="+card_number,  
                success: function(msg){            
                    var Result = $.trim(msg);

                    if(Result === "does_not_exists")
                    { 
                        alert("does not exist");
                    }  
                    else  
                    {  
                        alert("exists");
                    }  
                } 
            }); 

            return false;
        });
    });
</script>

CheckCardNumber.php

<?php
include('dbconnection.php');
if(isset($_POST['card_number']))
{
    $Card_Number = $_POST['card_number'];
    $sql = "select * from customers where card_id='$Card_Number'";
    $Result = $db->query($sql);

    if ($Result->num_rows != 0)
    {
        echo "exists";
    }
    else
    {
        echo "does_not_exists";
    }
}

【问题讨论】:

  • 你看过浏览器开发者工具中的请求/响应吗?
  • 另外,您从用户输入中获取一个字符串并将其直接用于您的 SQL。高度危险(可以进行测试,但不要这样发货)。 SQL注入
  • 你有一个错字。 var card_num 然后"+card_number
  • 您必须首先确保ajax请求有成功结果,似乎成功函数没有正确处理,请最好将结果更改为结果。
  • @BilelKabtni - “请更好地将结果更改为结果。” - 为什么会“更好”?这只是偏好和代码风格的问题。

标签: javascript php mysql ajax


【解决方案1】:

看起来您将 var 设置为 card_num 但将 card_number 传递给 ajax:

var card_num = $("#card_number").val();
.
.
.
data: "card_number="+card_number,

【讨论】:

  • 非常感谢,伙计们,看起来这是一个愚蠢的错误,我传递了一个错误的变量,就像@Rob Moll 提到的那样。我还修复了 SQL 注入。 prepare("select * from customers where card_id=?"); $stmt->bind_param("s", $Card_Number); $stmt->执行(); $Result = $stmt->get_result(); if ($Result->num_rows != 0) { echo "exists"; } 其他 { 回声“does_not_exists”; } }
【解决方案2】:

提示

一个好的编程习惯是使用驼峰命名和适当的缩进。

// <!-- CheckCardNumber.php --> 
<?php
if (isset($_POST['card_number'])) {

  include('dbconnection.php');

  $cardNumber = $_POST['card_number'];
  $sql        = "SELECT * from customers where card_id= '$cardNumber'";
  $result     = $db->query($sql);

  echo $result->num_rows > 0 ? 'Exists' : 'Does not exist.';
}

解决方案

在您的 ajax 请求中,如果您设置了正确的消息,则可以提醒您收到的任何响应。

另外,请确保您随请求发送的值是正确的。

            $.ajax({  
                type: "POST",  
                url: 'CheckUserCardNumber.php',  
                data: "card_number="+$(this).val(),  
                success: function(msg){            
                   alert(msg); 
                } 
            }); 

此外,请始终使用 PDO/Prepared MySQLI。 How can prepared statements protect from SQL injection attacks?

【讨论】:

  • “一个好的编程习惯是使用驼峰命名” - 我不会称之为“一个好的编程习惯”,而是一个个人喜好。
  • 这被认为是一种很好的做法,因为它可以避免混淆并增加一致性。我没有说这是最好的做法,但它是一个很好的做法。
  • 一个好的做法是保持一致,我同意。但是,如果您一直使用蛇皮、骆驼皮或任何其他外壳,这并不重要。
  • 我只是提出了海报可以研究的几个良好实践中的一个,我们真的需要争论我如何命名一个显然对海报有帮助的事情吗?
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
相关资源
最近更新 更多