【问题标题】:Pulling data and printing it in an HTML table提取数据并将其打印到 HTML 表格中
【发布时间】:2011-01-28 21:01:09
【问题描述】:

从包含字段“loginid、submissionid、title、url、datesubmitted、displayurl”的名为“submission”的 MySQL 表中,我想打印一个包含所有“title”和相应“datesubmitted”的 HTML 表,其中“loginid” " 等于 "$profile"。我尝试使用的代码如下。它不工作。任何想法为什么它不起作用?

提前致谢,

约翰

$profile = $_GET['profile'];  

$sqlStr = "SELECT loginid, submissionid, title, url, datesubmitted, displayurl
             FROM submission
            WHERE loginid = $profile
         ORDER BY datesubmitted DESC";    

$result = mysql_query($sqlStr);

$arr = array(); 
echo "<table class=\"samplesrec\">";
while ($row = mysql_fetch_array($result)) { 
    echo '<tr>';
    echo '<td class="sitename1"><a href="http://www.'.$row["url"].'">'.$row["title"].'</a></td>';
    echo '</tr>';
    echo '<tr>';
    echo '<td class="sitename2">'.$row["datesubmitted"].'</a></td>';
    echo '</tr>';
    }
echo "</table>";

【问题讨论】:

  • 看不到任何错误,除了潜在的 SQL 注入。你得到了什么,你期望什么?

标签: php mysql


【解决方案1】:

您的问题是关于调试,这是最重要的编程艺术。没有人可以为您找到错误,您必须自己做。借助一些小技巧。

$profile = $_GET['profile']; 更改为$profile = intval($_GET['profile'];)

$result = mysql_query($sqlStr);改成

$result = mysql_query($sqlStr) or trigger_error(mysql_error()." in ".$sqlStr);

然后在代码顶部的 2 行之后,再次运行它并查看它的内容。如果仍然没有,则您的表中没有匹配的记录。

ini_set('display_errors',1);
error_reporting(E_ALL);

【讨论】:

    【解决方案2】:

    您的查询可能失败。

    尝试回显 mysql_error() 的返回;在尝试查询以查看问题可能是什么之后。

    您还应该保护您的输入不被注入。如果 loginID 是用户名,则需要用引号将 mySQL 查询中的字符串括起来 - 如果 loginID 是用户名。如果它是一个整数,你可能没问题。

    有更强大的方法可以做到这一点,但很简单:

      $profile = mysql_real_escape_string($_GET['profile']);
    
      $sqlStr = "SELECT loginid, submissionid, title, url, datesubmitted, displayurl
                   FROM submission
                  WHERE loginid = '$profile'
               ORDER BY datesubmitted DESC";
    
      $result = mysql_query($sqlStr);
    
      if($result) {
          // Handle output
      } 
      else {
          echo 'query failed';
          // don't leave this here in production!
          echo mysql_error();
      }
    

    【讨论】:

    • "id" 倾向于表示一个数字,不需要引号。
    • 回答太快的情况,有 :D 看到了,已经开始编辑了!
    • 嗨...我试过了,但没有任何反应。它甚至没有说“查询失败”。就好像查询不存在一样。
    • 您可以编辑上面的帖子以包含连接信息吗?您的数据库连接可能已失败。 (显然,将密码、主机名、用户名等更改为通用名称!)。你也可以尝试一个你知道会像“SELECT NOW();”这样工作的简单查询。并尝试通过 mysql_query() 运行以确保。
    • 数据库正在连接。我刚刚尝试了一些需要数据库连接的其他代码,它运行良好。
    【解决方案3】:

    我可以看到的一个问题是您没有检查 mysql_query() 的返回值

    mysql_query() 如果执行查询失败,则返回false。所以你需要做一个检查,比如:

    $result = mysql_query($sqlStr);
    if(! $result) {
    
      //....error occured...prepare $message
      die($message);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 2019-04-27
      • 2023-04-09
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多