【问题标题】:How to fill a list with the output from a mysql query with Javascript and PHP如何使用 Javascript 和 PHP 用 mysql 查询的输出填充列表
【发布时间】: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,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!
  • 不确定您所期望的结果与您得到的结果,因为您的问题中没有具体示例,但是将结果作为关联数组获取并直接发送会不会更容易作为您的 JSON 响应的结果?您似乎做了很多工作来重建数组,但最终没有得到想要的结果。您能否在reproducible minimal example 中包含实际结果与期望结果

标签: javascript php jquery json list


【解决方案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); }) 对我没有任何帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多