如何使用 Javascript 和 PHP 用 mysql 查询的输出填充列表

Posted

技术标签:

【中文标题】如何使用 Javascript 和 PHP 用 mysql 查询的输出填充列表【英文标题】:How to fill a list with the output from a mysql query with Javascript and PHP 【发布时间】:2021-10-06 15:34:15 【问题描述】:

我正在尝试使用 mysql 查询的输出填充列表。我可以提供 1 件商品,但不能提供更多。 php 代码:('fetchBooks.php')

$con = mysqli_connect(HOST,USERNAME,PASSWORD,DB);   
$brand = $_GET['brand'];    
$res = mysqli_query($con, "CALL GetBooks('$brand')");   
$result = array();
while($row = mysqli_fetch_array($res))
    array_push($result, 
            array('brand'=>$row[0]));
   
echo json_encode(array('result'=>$result));

javascript 代码:

$.getJSON(
    'fetchBooks.php',
    'brand='+ brand,    
    function(result)                       
        const olEle = document.createElement("ol");
        olEle.setAttribute("id", "tomes");
        document.body.appendChild(olEle);
        $.each(result.result, function()   
            const liEle = document.createElement("li");
            const aEle = document.createElement('a');  
            aEle.innerText = this['brand'];         
                liEle.append(aEle);             
                olEle.append(liEle);
        );
           
);

一切正常,但如果我尝试:

array_push($result, array('brand'=>$row[0]), $row[1]);   or
array_push($result, array('brand'=>$row[0]), 'brand'=> $row[1]);

我似乎永远无法在输出中获得超过一项。我已经提出了一些其他想法,但我需要控制输出的每个元素,以便我可以将它们分别放置在网页上,例如标题、作者、描述等我知道“$.each”可能仅适用于每个记录的整个输出,而不是记录的“每个”元素。欢迎任何想法或帮助!

【问题讨论】:

警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough! 不确定您所期望的结果与您得到的结果,因为您的问题中没有具体示例,但是将结果作为关联数组获取并直接发送会不会更容易作为您的 JSON 响应的结果?您似乎做了很多工作来重建数组,但最终没有得到想要的结果。您能否在reproducible minimal example 中包含实际结果与期望结果 【参考方案1】:

你可以这样锻炼吗

    $result = array();
    while($row = mysqli_fetch_array($res))
        $result[] = array('brand'=>$row);
       

【讨论】:

好的,所以我将数组 $result[] 与每一行的输出打包在一起,然后我必须将下一行更改为: echo json_encode(array('result'=>$result[] ));还有我需要 'function(result[]) '? 您可以像您的代码一样使用 echo json_encode(array('result'=>$result)) 。在 jquery 每个函数 $.each(result.result, function(data) console.log(data); )。使用 $.each(result.result, function(data) var data = $.parseJSON(data); console.log(data.brand); ) 后检查所需的结果。 感谢您的回复,南莎。我使用了 $.each(result.result, function(data) var data = $.parseJSON(data); console.log(data.brand); )。按照建议并得到一个控制台错误“GET 192.168.1.162/tests/simple24/fetchBooks.php?brand=/var/www/html/...”这看起来很像我期望看到的 GET 命令所以不要非常理解错误。 [该行末尾应为“/var/www/html/books/China”]。如果它有效,我应该会看到“中国”类别的书名列表。 回顾一下:当我将 php 代码更改为: $result = array(); while($row = mysqli_fetch_array($res)) $result[] = array('brand'=>$row); 。然后我不再得到书名列表(但程序仍然启动。但是,它仍然记录错误。 $.each(result.result, function(data) var data = $.parseJSON(data); console. log(data.brand); ) 对我没有任何帮助。

以上是关于如何使用 Javascript 和 PHP 用 mysql 查询的输出填充列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript或php检测窗口关闭事件[重复]

如何使用javascript在php的输入框中生成随机值

用 PHP 加密消息,用 JavaScript 解密

PHP 如何读取Javascript 对象的值?

用 php 监听 WebSocket

Javascript 客户端如何连接到 PHP 套接字服务器?