【问题标题】:Print sql table with JSON使用 JSON 打印 sql 表
【发布时间】:2017-11-25 22:51:06
【问题描述】:

我想打印所有 sql 表并在 html 表中显示它们。我是 php、JSON 和 AJAX 的新手。我成功发送用户名并在 php 中获得结果。我认为 JSON 部分或 AJAX 存在问题。谁能帮帮我?

index.php

<div class="col-lg-6">
  <p id="usr" style="color:gray; font-size: 48px;"></p>
  <script type="text/javascript">

      var usr = document.getElementById("dom-target");
      var username = usr.textContent;
      username = username.trim().replace(/ /g, '%20');
      document.getElementById("usr").innerHTML = username;
      var sendtophp = "username="+username;

      $.ajax({
        type: "POST",
        url: "getcoursetable.php",
        data: sendtophp,
        dataType:"json",
        success: function(response) {
          console.log(response);
          var trhtml ='';
          document.getElementById("demo").innerHTML = response;
          $.each(response, function (i, item) {
              trHTML += '<tr><td>' + item.cname + '</td><td>' + item.subject + '</td><td>' + item.course + '</td><td>'+ item.grade + '</td></tr>';
          });
          $('#results').append(trHTML);
        }
      });

  </script>
  <table id="results"></table>
</div>

getcoursetable.php

<?php
  include_once "connection.php";

  if(isset($_POST["username"])){
    $nick = $_POST["username"];

    $prep = "SELECT * FROM `enrolledtable` WHERE nickname='$nick'";

    $results = mysqli_query($con, $prep);

    $jsonData = array();
    while ($row = $results->fetch_row()) {
        $jsonData[] = $row;
    }
    echo json_encode($jsonData);
      }
 ?>

现在,我可以打印数据,但不像表格那样

<p id="demo">denemee,CS,300,B,denemee,CS,301,B ,denemee,CS,305,B ,denemee,CS,307,B,denemee,CS,408,A-,denemee,IE,208,B ,denemee,MATH,306,B</p>

【问题讨论】:

  • 1) 不要使用 mysql_* 函数,这些函数多年来被证明是不安全的 See reference。使用 mysqli_* 或 PDO。 2) 然后,要显示结果,请查找 Datatables -- 从一开始就学习这样做可以节省很多时间。
  • 在这个项目中,安全并不重要,但谢谢。数据表哪里出错了?
  • 安全总是很重要...
  • 我会注意安全@LouysPatriceBessette
  • 您的 PHP 结果数组(仍然可以在编辑历史记录中看到)已完美形成可与 Datatables 一起使用。这将为您节省很多时间...寻找它。重新发明轮子绝对没有任何收获。

标签: php jquery sql json ajax


【解决方案1】:

您的 ajax 函数正在寻找 json 类型的数据,因此您需要在 getcoursetable.php 的顶部声明它

header('Content-Type: application/json');

【讨论】:

  • 我添加了,我正在寻找这样做的好处。
  • 这绝对没有必要......LOL 内容类型 json 与 ajax 中的 json 编码调用它是荒谬的
【解决方案2】:

问题可能就在这里:

      console.log(response);
      var trhtml ='';
      document.getElementById("demo").innerHTML = response;
      $.each(response, function (i, item) {
          trHTML += '<tr><td>' + item.cname + '</td><td>' + item.subject + '</td><td>' + item.course + '</td><td>'+ item.grade + '</td></tr>';
      });
      $('#results').append(trHTML);

首先,JavaScript 是区分大小写的语言:trhtmltrHTML 不是同一个变量。

其次,如果你的句子“php的输出”意味着你报告了console.log()的输出,那么response在我看来就像一个字符串,你必须把它解析为Json。

此外,我不知道字符串 denemee 的开头是什么,但它破坏了 Json 表示法。

【讨论】:

  • 复制粘贴会导致区分大小写的错误,对于这个愚蠢的错误,我们深表歉意。 denemee 是昵称。 item.cname 不是你说的解析?我应该解析为 JSON。
  • 不知道 item.cname,我正在考虑console.log() 打印的响应字符串。很高兴你解决了你的问题。详细说明您的错误和过程可能对其他人有用;)再见
  • 因为cname是sql中的列名没人知道,我就不提了。谢谢你的努力。再见
【解决方案3】:

我解决了我的问题。这可以在php中取表并创建html表。

index.php

<div class="col-lg-6">
  <p id="usr" style="color:gray; font-size: 48px;"></p>
  <script type="text/javascript">

      var usr = document.getElementById("dom-target");
      var username = usr.textContent;
      username = username.trim().replace(/ /g, '%20');
      document.getElementById("usr").innerHTML = username;
      var sendtophp = "username="+username;

      $.ajax({
        type: "POST",
        url: "getcoursetable.php",
        data: sendtophp,
        dataType:"json",
        success: function(response) {
          var trhtml ='';
          $.each(response, function (i, item) {
              trhtml += '<tr><td>' + item[0] + '</td><td>' + item[1] + '</td><td>'+ item[2] + '</td></tr>';
          });
          $('.append').append(trhtml);
        }
      });

  </script>
  <table id="results">

    <tr>
    <th>Name</th>
    <th>Subject</th>
    <th>Course</th>
    <th>Grade</th>
    </tr>
    <tbody class="append">

    </tbody>
    </table>
</div>

getcoursetable.php

<?php
  header('Content-Type: application/json');
      include_once "connection.php";

      if(isset($_POST["username"])){
        $nick = $_POST["username"];

        $prep = "SELECT subject,course,grade FROM `enrolledtable` WHERE nickname='$nick'";

        $results = mysqli_query($con, $prep);

        $jsonData = array();
        while ($row = $results->fetch_row()) {
            $jsonData[] = $row;
        }
        echo json_encode($jsonData);
      }
 ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多