0

我有一个问题可能听起来有点混乱,但我会尽力解释我的问题。

我的 sql 数据库中有 2 个表:表 1 称为事件,表 2 称为结果

事件表包含有关过去计算机游戏比赛的条目

eg. EventID   EventName  EventDate  Location 
      1       GG vs AU    04/08     Game room 1

结果表包含几乎相同的条目..但该单个条目的更多详细信息

eg.  EventID   MemberID       Score        Ranking 
       1         02        7(victory):5      1st

基本上,我将进入“事件”php 文件,然后我会看到条目。当我按下同一行中的任何条目时(例如 1、GGvsAU、04/08、Gameroom1),它会将我链接到结果表,这将为我提供有关该匹配的更深入的信息。在该示例中,eventID 为 1,因此当我按下同一行中的任何条目时,它会将我链接到 results.php?EventID=1

事件 php 文件运行良好,所以一切都很好.. 但是一旦我按下条目,它就会将我链接到结果 php 文件。

我现在遇到的问题是Results php文件。当我按下 Events.php 中的条目时,它会将我链接到 results.php?EventID=1,但它会显示数据库中的所有条目。我只想要 EventID1 的信息。

此外,是否可以根据下面的代码“隐藏”EventID 和“MemberID”?

事件.php

<?
        $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
    #Set Error Mode to ERRMODE_EXCEPTION.
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

$query = $pdo->query('SELECT EventID, EventName, EventDate, Location from events');
$rowset = array();

if ($query) {
  while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    // Build array of rows
    $rowset[] = $row;
  }    

  // Output header first
  $headrow = $rowset[0];
  print("<table border=\"1\">\n<tr>\n");
  // Use $rowset[0] to write the table heading
  foreach ($headrow as $col => $val) {
    printf("<th>%s</th>\n", $col);
  }
  print("</tr>");

  // Then output table rows.
  // Outer loop iterates over row
  foreach ($rowset as $row) {
     print("<tr>");
     // Inner loop iterates over columns using $col => $val
     foreach ($row as $col => $val) {
        // We don't know your column names, but substitute the first column (the ID) for FIRSTCOL here
        printf("<td><a href=\"listresults.php?EventID=%s\">%s</a></td>\n", $row['EventID'],$val);
     }
     print("</tr>");
  }
}
print("</table>");
?>

Results.php(我有问题的那个)

   <?
 #Get the event id from $_GET
    $int_event_id = $_GET["EventID"];
    if((int)$int_event_id)
    {
        $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
    #Set Error Mode to ERRMODE_EXCEPTION.
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
  $query = $pdo->query('SELECT * from results WHERE EventID ='$int_event_id' ORDER By EventID ASC');
}
    $rowset = array();

if ($query) {
  while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    // Build array of rows
    $rowset[] = $row;
  }    

  // Output header first
  $headrow = $rowset[0];
  print("<table border=\"1\">\n<tr>\n");
  // Use $rowset[0] to write the table heading
  foreach ($headrow as $col => $val) {
    printf("<th>%s</th>\n", $col);
  }
  print("</tr>");

  // Then output table rows.
  // Outer loop iterates over row
  foreach ($rowset as $row) {
     print("<tr>");
     // Inner loop iterates over columns using $col => $val
     foreach ($row as $col => $val) {
        // We don't know your column names, but substitute the first column (the ID) for FIRSTCOL here
        printf("<td><a href=\"index.php?ID=%s\">%s</a></td>\n", $row['EventID'],$val);
     }
     print("</tr>");
  }
}
print("</table>");

我真的很感谢任何可以帮助我解决这个问题的人!非常感谢!

最后修改与逼真的解决方案

4

2 回答 2

1

干得好。在“Results.php”中,您需要在查询中添加 where 子句以仅显示特定事件 ID 的数据。所以检查我下面的代码。

<?
    #从$_GET获取事件id
    $int_event_id = $_GET["EventID"];
    if((int)$int_event_id)
    {
       $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
       #将错误模式设置为 ERRMODE_EXCEPTION。
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

   $query = $pdo->query("SELECT * from results WHERE EventID ='$int_event_id' ORDER By EventID ASC");
}

?>

此外,您正在“events.php”中与“listresults.php”链接,不确定它是否是错字。它应该链接到“Results.php”对吗?

于 2012-05-31T08:14:57.240 回答
1

为了隐藏 ListResults.php 中的 EventID 和 MemberID 列,您可以简单地将它们排除在选择查询之外。

因此,不要查询所有列 (*):

SELECT * from results

像这样查询特定列:

SELECT Score, Ranking FROM results

就您而言,我怀疑您最终会想要成员名称,因此请尝试以下操作:

SELECT Member.Name AS Name, Result.Score AS Score, Result.Ranking AS Ranking
FROM results
INNER JOIN members
ON results.MemberID = members.MemberID
WHERE results.EventID = '$int_event_id'

这样做是从成员表中获取成员名称,其中 MemberID 与结果匹配。

于 2012-05-31T09:11:52.947 回答