如何在php中使用foreach循环将数据从数据库检索到jquery-ui手风琴

Posted

技术标签:

【中文标题】如何在php中使用foreach循环将数据从数据库检索到jquery-ui手风琴【英文标题】:How to use foreach loop in php for retrieve data from data base to jquery-ui accordion 【发布时间】:2020-02-21 14:15:41 【问题描述】:

如何在 php 中使用 foreach 循环将数据从数据库检索到 jQuery-ui 手风琴。我想使用 jQuery 手风琴从数据库中获取数据。我尝试了很多方法,但由于缺乏知识,我无法做到。我为此使用了 jQuery-ui。

这是我为此编写的代码

<body>
    <div class="container" style="width:900px;">
   <div id="accordion"></div>
  </div>
</body>
</html>
<script>
$(document).ready(function()
 $.ajax( 
   url: "fetch.php",
   method:"POST",
   dataType: "json",       
   success: function(data)

   
  console.log(data);
    $( function() 
    $( "#accordion" ).accordion();
    //console.log(data);
    var device_ID;
    var sensor_ID;
 );
      
 );

);
</script>

这是 PHP 部分:

<?php
//fetch.php
$connect = mysqli_connect("localhost", "root", "", "kapra_iot");
$query = "
 SELECT * FROM `view_sensor`
";
$result = mysqli_query($connect, $query);
//$output = array();
while($row = mysqli_fetch_array($result))

 $sub_data["device_ID"] = $row["device_ID"];
 $sub_data["device_Name"] = $row["device_Name"];
 $sub_data["sensor_ID"] = $row["sensor_ID"];
 $sub_data["sensor_Name"] = $row["sensor_Name"];
 $sub_data["lower_Value"] = $row["lower_Value"];
 $sub_data["mid_Value"] = $row["mid_Value"];
 $sub_data["upper_Value"] = $row["upper_Value"];
 $data[] = $sub_data;

foreach($data as $key => &$value)

 $output[$value["device_ID"]] = &$value;

foreach($data as $key => &$value)

 if($value["sensor_ID"] && isset($output[$value["sensor_ID"]]))
 
  $output[$value["sensor_ID"]]["nodes"][] = &$value;
 

foreach($data as $key => &$value)

 if($value["sensor_ID"] && isset($output[$value["sensor_ID"]]))
 
  unset($data[$key]);
 

echo json_encode($data);
//echo '<pre>';
//print_r($data);
//echo '</pre>';

?>

【问题讨论】:

你的问题不清楚 只是我想知道如何将jquery-ui手风琴与mysql和php一起使用 api.jqueryui.com/accordion 这里有很多工作要做。当 GET 适用于您的脚本时,不确定为什么要使用 POST。请提供生成的 JSON 示例以供测试。 【参考方案1】:

我会像 Kumar Praveen 一样将您指向文档。 Accordion 将使用 h3 标记和每个内部 div 标记的内部部分显示不同部分的标题。

循环遍历结果并按照前面描述的语法将其添加到您的手风琴 div。

$(document).ready(function () 

    $.ajax(
        url: "fetch.php",
        method: "POST",
        dataType: "json",
        success: function (data) 

            for (device in data)
            
                $("#accordion").append("<h3>"+device['device_id']+" " + device['device_Name'] + "</h3>");
                $("#accordion").append("<div><p> Insert here all the relevant data of your device including all the other variables</p></div>");
            

            $("#accordion").accordion();

        
    );

);

【讨论】:

【参考方案2】:

使用Widget Factory,您可以将手风琴扩展到远程源。

$(function() 
  var testData = [
    "device_ID": 1001,
    "device_Name": "Device 1",
    "sensor_ID": 597,
    "sensor_Name": "Sensor 1",
    "lower_Value": 0,
    "mid_Value": 50,
    "upper_Value": 100
  , 
    "device_ID": 1002,
    "device_Name": "Device 2",
    "sensor_ID": 598,
    "sensor_Name": "Sensor 1",
    "lower_Value": 0,
    "mid_Value": 500,
    "upper_Value": 1000
  , 
    "device_ID": 1003,
    "device_Name": "Device 3",
    "sensor_ID": 599,
    "sensor_Name": "Sensor 1",
    "lower_Value": 0,
    "mid_Value": 0.05,
    "upper_Value": 0.1
  ];

  $.widget("custom.buildList", $.ui.accordion, 
    options: $.extend(this.options, 
      source: "",
      data: []
    ),
    _create: function() 
      console.log("Init");
      this.element.addClass("custom-list");
      var action;
      if (this.options.source == "") 
        action = "html";
       else if (typeof this.options.source == "string") 
        action = "ajax";
       else 
        action = "array";
      
      console.log("Action", action);
      if (action !== "html") 
        if (action === "ajax") 
          this.options.data = this._getData(this.options.source);
        
        this._makeList(this.element);
      
      console.log("Return to _create");
      return this._super();
    ,
    _getData: function(url) 
      console.log("Getting Data", url);
      $.getJSON(url, function(resp) 
        this.options.data = resp;
      );
    ,
    _makeList: function(tObj) 
      console.log("Making List");
      var myData;
      if (this.options.data.length == 0) 
        myData = this.options.source;
       else 
        myData = this.options.data;
      
      console.log("List Data", myData);
      $.each(myData, function(i, d) 
        var hd = $("<h3>").html(d.device_Name);
        var bd = $("<div>");
        var ls = $("<ul>").appendTo(bd);
        $.each(d, function(k, v) 
          $("<li>").html(k + ": " + v).appendTo(ls);
        );
        tObj.append(hd, bd);
      );
    
  );

  $("#accordion").buildList(
    source: testData
  );
);
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="container" style="width:900px;">
  <div id="accordion"></div>
</div>

此扩展允许将 URL 或数组作为 Source 选项传入。因此,如果您想使用它从 PHP 脚本中获取数据,您可以这样做:

$("#accordion").buildList(
  source: "fetch.php"
);

扩展的小部件将从 URL 或数组中收集数据并构建所需的 HTML,然后再调用小部件的其余部分。我不得不用一个数组进行测试。您还需要修改_makeList() 函数以满足您的各种需求。

如果您愿意,它也可以默认返回 HTML。此外,您拥有与使用标准 Accordion 小部件相同的所有选项。

【讨论】:

以上是关于如何在php中使用foreach循环将数据从数据库检索到jquery-ui手风琴的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

如何从foreach循环php中的对象数组中删除对象

使用 PHP for 和 foreach 循环从 JSON 数据中检索视频信息时遇到问题 - YouTube API 3

laravel:当计数达到给定值时如何从 foreach 循环中删除选定的数据

如何在 PHP 的 foreach 循环中优化大型 mySQL?

PHP - 提交日期/时间/从foreach循环中选择输入值到$ _POST不返回任何内容