如何使用 ajax 和 php 从 db 中检索数据?

Posted

技术标签:

【中文标题】如何使用 ajax 和 php 从 db 中检索数据?【英文标题】:How can I retrive data from db with ajax and php? 【发布时间】:2015-09-05 05:09:47 【问题描述】:

我正在尝试在提交表单之前检查一个字段是否刚刚出现在数据库中。

所以我将 keyup 事件添加到该字段以从 dbajax 获取数据。

所以我在表单中添加了这段代码:

$(document).ready(function ()
    $("#matricola").keyup(function () 
         $.ajax(
             type:"get",
             url: "getMatricolaAjax.php",
             data: 'type':'user', 'matricola':$("#matricola").val(),
             dataType: "text",
             success: function(result)
                console.log("OK");
                $("#matricola").val("");
                alert("Matricola "+ result +" già presente!!");
             ,
             error: function()
                console.log("KO");
             
           );
      );
  );

这是我的getMatricolaAjax.php

<script src='js/jquery-2.1.4.js' type="text/javascript"></script>
    <?php
    require_once 'config.php';
    require_once FUNCTION_PATH.'/dbFunction.php';

    if($_GET['type'] == "user")
        $queryMatricolaMatch = 'select * from user where matricola = "'.$_GET['matricola'].'"';
    else
        $queryMatricolaMatch = 'select * from 150ore where matricola = "'.$_GET['matricola'].'"';
    
    echo $queryMatricolaMatch;
    $conn = dbConnect($USERDB, $PASSWORDDB, $NAMEDB);
    $matricola = dbQueryGetResult($queryMatricolaMatch);
    dbDisconnect($conn);

    echo $matricola;

它适用于一半,因为在result 我从getMatricolaAjax.php 获得所有html 代码..

为什么??

我怎样才能只得到matricola??

【问题讨论】:

我不确定您的 dbQueryGetResult() 函数是如何设置的,但通常查询 mysql 数据库会返回一个数组(您可能认为是“所有 html 代码”)所以如果您想获得特定的结果,匹配时需要指向该数组键 如您所见,result 变量包含您使用 ajax 调用的 php 脚本的输出。如果您需要其他输出,您应该修改您的脚本或制作另一个仅返回您需要的脚本。 getMatricolaAjax.php 中不应包含任何输出,例如脚本标签、样式标签。您只需要通过 php 回显。 getMatricolaAjax.php 中不需要任何 HTML 标签或 JavaScript 。所以删除它们,然后让我们知道你得到的输出 @RNKushwaha 好的!我删除了所有导入和回显。但现在我加载资源失败:服务器响应状态为 500(内部服务器错误),因此 ajax 的响应进入错误而不是成功...为什么? 【参考方案1】:

评论或删除dataType: "text",然后重试。

   $.ajax(
         type:"get",
         url: "getMatricolaAjax.php",
         data: 'type':'user', 'matricola':$("#matricola").val(),
         // dataType: "text", 
         success: function(result)
            console.log("OK");
            $("#matricola").val("");
            alert("Matricola "+ result +" già presente!!");
         ,

或者你可以在 PHP 中使用 json_encode() 来获取 JSON 对象数组的数据。

【讨论】:

【参考方案2】:

在提交表单之前,您应该使用 POST 检查数据库中的值。

$(document).ready(function ()
       $("#matricola").keyup(function (e)  
         var thevalue = $(this).val();
         $.post('getMatricolaAjax.php','type':'user','matricola':thevalue, 
           function(data)  
            console.log("OK");
            $("#matricola").val("");
            alert("Matricola "+ data +" già presente!!");
           );
         );
      );

还有php文件

<?php
require_once 'config.php';
require_once FUNCTION_PATH.'/dbFunction.php';
$conn = dbConnect($USERDB, $PASSWORDDB, $NAMEDB);

if($conn->real_escape_string($_POST['type']) == "user")
    $queryMatricolaMatch = 'select * from user where matricola = "'.$conn->real_escape_string($_POST['matricola']).'"';
else
    $queryMatricolaMatch = 'select * from 150ore where matricola = "'.$conn->real_escape_string($_POST['matricola']).'"';


$matricola = dbQueryGetResult($queryMatricolaMatch);
dbDisconnect($conn);

echo $matricola;

这应该可以,但我不知道 dbQueryGetResult 应该做什么,所以你也应该发布它。 注意:如果您使用 PDO 编辑删除 'real_escape_string' 函数并使用其他清理方法

【讨论】:

以上是关于如何使用 ajax 和 php 从 db 中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery .ajax 从 mySQL DB 中检索记录

使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

如何在 laravel php 中使用 ajax 根据日期范围从 mysql 数据库中检索数据?

在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行

使用ajax codeigniter php根据日期检索数据库值