从另一个Sql Entry查看/编辑Sql Entry

时间:2012-05-31 07:37:20

标签: php sql

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

我的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和“ViewID”?

Events.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>");

我非常感谢能帮助我解决这个问题的人! 非常感谢!

上次修改后使用verisimilitude的解决方案

2 个答案:

答案 0 :(得分:1)

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

<?
    #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");
}

?>

你也在“events.php”中链接“listresults.php”,不确定它是否是拼写错误。它应该链接到“Results.php”吧?

答案 1 :(得分: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与结果匹配。