【问题标题】:SQL query not working with jQuery AJAXSQL 查询不适用于 jQuery AJAX
【发布时间】:2013-04-27 13:15:53
【问题描述】:

我正在使用 jQuery 发布 2 个变量。然后我加载一个外部 php 文件以将这 2 个变量放入数据库中。由于某种原因,查询不起作用。如果我以正常方式尝试。它有效。

jQuery 代码

    $.post("/include/getResult.php", { 
finalscore:score, finalcredits:credit },
 function(data){

console.log("Data: " + data);

});

PHP 代码

session_start();
$finalscore = $_POST['finalscore'];
$finalcredits = $_POST['finalcredits'];
$query = mysqli_query($con, "SELECT score,credits FROM gebruikers WHERE leerlingennummer = '".$_SESSION['leerlingennummer']."'");
if(mysqli_num_rows($query) == 1)
{
    $row = mysqli_fetch_array($query);
    //get the current score and credits
    $score = $row['score'];
    $credits = $row['credits'];
    $score = 'succes';
}
echo $score;

由于某些奇怪的原因,查询不能以这种方式工作。

【问题讨论】:

  • SQL 查询 不能 与 jQuery AJAX 一起工作或不工作。他们从不见面。运行查询的是 PHP,而不是 AJAX
  • "SELECT score,credits FROM gebruikers WHERE leerlingennummer = '".$_SESSION['leerlingennummer']."'" SQL 注入吸引
  • @YourCommonSense 我看到 PHP 运行查询。但是 AJAX 调用 PHP 文件。如果我以正常方式加载 php 代码。但是通过 jQuery 它不起作用
  • @TimLuigjes 能解释一下 $_SESSION['leerlingennummer'] 的用途吗?什么时候设置这个会话变量?

标签: php jquery mysql sql


【解决方案1】:

它似乎运作良好。但是你需要添加/修改一些代码。

  1. 为了防止 SQL 注入

    $query = mysqli_query($con, "SELECT score,credits FROM gebruikers WHERE leerlingennummer = '".$_SESSION['leerlingennummer']."'");
    

    应该是

    $query = mysqli_query($con, "SELECT score,credits FROM gebruikers WHERE leerlingennummer = '".addslashes($_SESSION['leerlingennummer'])."'");
    
    • $_SESSION['leerlingennummer'] 可以为空白。检查您的代码。
  2. 添加更新查询

    if(mysqli_num_rows($query) == 1)
    {
        $row = mysqli_fetch_array($query);
        //get the current score and credits
        $score = $row['score'];
        $credits = $row['credits'];
        $score = 'succes';
        mysqli_query($con, "update gebruikers set `score` = '".addslashes($_POST['finalscore'])."', `credits` = '".addslashes($_POST['finalcredits'])."' where leerlingennummer = '".addslashes($_SESSION['leerlingennummer'])."'");
    }
    

此代码将 mysql 中的 score 修改为 'finalscore',将 mysql 中的 credits 修改为 'finalcredits'。 比,ajax 警报将“成功”。如果你想在更新前成为一个分数,你可以这样做:

if(mysqli_num_rows($query) == 1)
{
    $row = mysqli_fetch_array($query);
    //get the current score and credits
    $score = $row['score'];
    $credits = $row['credits'];
    mysqli_query($con, "update gebruikers set `score` = '".addslashes($_POST['finalscore'])."', `credits` = '".addslashes($_POST['finalcredits'])."' where leerlingennummer = '".addslashes($_SESSION['leerlingennummer'])."'");
}

【讨论】:

    【解决方案2】:

    PHP 代码

    session_start();
    $finalscore = $_POST['finalscore'];
    $finalcredits = $_POST['finalcredits'];
    $query = mysqli_query($con, "SELECT score,credits FROM gebruikers WHERE leerlingennummer = '".$_SESSION['leerlingennummer']."'");
    if(mysqli_num_rows($query) == 1)
    {
        $row = mysqli_fetch_array($query);
        //get the current score and credits
        $score = $row['score'];
        $credits = $row['credits'];
        $score = 'succes';
    }
    echo $score;
    

    AJAX

    $("YourSubmitButtonId").click(function(event){
    
        event.preventDefault();
    
         var Formdata = $("YourFormId").serialize(); 
    
            $.ajax({
    
            type:"POST";
            url:"/include/getResult.php",
            data:Formdata,
            success:function(response){
    
            $("reponceId").html(response);
    
            };
    
    
    
    
        });
    });
    

    【讨论】:

    • SELECT score,credits FROM gebruikers WHERE leerlingennummer = '".$_SESSION['leerlingennummer']."'" SQL 注入 吸引
    • 从表单获取的输入,或者用户输入的其他输入,在用于查询之前应该进行清理,这是一个严重的安全问题。您应该使用准备好的语句。
    • 他使用了他的代码。我喜欢使用准备好的声明与 PDO 合作
    • 我把表单中的数据放到了php文件中。问题是使用 jQuery 时查询似乎不起作用。当我在没有 jQuery 的情况下使用它时它可以工作。
    • 你能编辑你的 html,php 完整代码吗...你插入 jquery 库了吗
    【解决方案3】:

    我知道这很旧,但如果有人遇到类似问题,请务必检查您的 ajax 调用的文件是否包含原始文件使用的所有 (PHP) 函数。有时很容易错过小错误:)

    并在涉及 jQuery 函数的地方使用事件委托。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2016-04-07
      相关资源
      最近更新 更多