2016-11-29 23 views
0

在我的數據庫項目的第一次迭代中,我成功創建了一個頁面,該頁面在單擊每個表列標題時使用$_GET標籤。我第一次爲我正在訪問的數據庫表中的每個主條目創建一個單獨的頁面。

對於第二次迭代,我選擇使用一個頁面來顯示與以前相同的信息,但是使用$_GET標記鏈接到頁面時,將從數據庫中選擇。

我試圖找出爲什麼下面的代碼將正確地排序我顯示錶:

$query = "SELECT Review.username, Review.service_date, Review.review_date, 
      Review.review_rating, Review.review_details, Review.service_id, 
      Plumber.company_name 
      FROM Review 
      INNER JOIN Plumber 
      ON Review.service_id = Plumber.service_id 
      WHERE Plumber.service_id='1'"; 

    if ($_GET['sort'] == 'username') { 
     $query .= " ORDER BY username"; 
    } else if ($_GET['sort'] == 'service_date') { 
     $query .= " ORDER BY service_date DESC"; 
    } else if ($_GET['sort'] == 'review_date') { 
     $query .= " ORDER BY review_date DESC"; 
    } else if ($_GET['sort'] == 'review_rating') { 
     $query .= " ORDER BY review_rating DESC"; 
    } else { 
     $query .= " ORDER BY review_date"; 
    } 

    $response = @mysqli_query($db, $query); 

    $plumber; 

    if($response){ 
     echo '<table align="left" cellspacing="5" cellpadding="8" width="50%"> 
     <td align="left"><b><a href="Plumber1.php?sort=username">Username</a></b></td> 
     <td align="left"><b><a href="Plumber1.php?sort=service_date">Service Date</a></b></td> 
     <td align="left"><b><a href="Plumber1.php?sort=review_date">Review Date</a></b></td> 
     <td align="left"><b><a href="Plumber1.php?sort=review_rating">Review Rating</a></b></td> 
     <td align="left"><b>Review Details</b></td>'; 

     while($row = mysqli_fetch_array($response)) { 
      echo '<tr><td align="left">' . 
      $row['username'] . '</td> 
      <td align="left">' . $row['service_date'] . '</td> 
      <td align="left">' . $row['review_date'] . '</td> 
      <td align="left">' . $row['review_rating'] . '</td> 
      <td align="left">' . $row['review_details'] . '</td>'; 

      echo '</tr>'; 

      $plumber = $row['company_name']; 
     } 

     echo '</table>'; 
    } else { 
     echo "Couldn't issue database query<br />"; 
     echo mysqli_error($db); 
    } 

當此代碼不會:

$query2 = "SELECT Review.username, Review.service_date, Review.review_date, 
      Review.review_rating, Review.review_details, Review.service_id, 
      Plumber.company_name 
      FROM Review 
      INNER JOIN Plumber 
      ON Review.service_id = Plumber.service_id 
      WHERE Plumber.service_id='$plumber_id'"; 

    $response2 = @mysqli_query($db, $query2); 

    if ($_GET['sort'] == 'username') { 
     $query2 .= " ORDER BY username"; 
    } else if ($_GET['sort'] == 'service_date') { 
     $query2 .= " ORDER BY service_date DESC"; 
    } else if ($_GET['sort'] == 'review_date') { 
     $query2 .= " ORDER BY review_date DESC"; 
    } else if ($_GET['sort'] == 'review_rating') { 
     $query2 .= " ORDER BY review_rating DESC"; 
    } else { 
     $query2 .= " ORDER BY username"; 
    } 

    if ($response2) { 

     echo '<table align="left" cellspacing="5" cellpadding="8" width="50%"> 
     <td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=username">Username</a></b></td> 
     <td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=service_date">Service Date</a></b></td> 
     <td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=review_date">Review Date</a></b></td> 
     <td align="left"><b><a href="Plumber.php?id='.$plumber_id.'&sort=review_rating">Review Rating</a></b></td> 
     <td align="left"><b>Review Details</b></td>'; 

     while($row = mysqli_fetch_array($response2)) { 
      echo '<tr><td align="left">' . 
      $row['username'] . '</td> 
      <td align="left">' . $row['service_date'] . '</td> 
      <td align="left">' . $row['review_date'] . '</td> 
      <td align="left">' . $row['review_rating'] . '</td> 
      <td align="left">' . $row['review_details'] . '</td>'; 

      echo '</tr>'; 

      $plumber = $row['company_name']; 
     } 

     echo '</table>'; 
    } else { 
     echo "Couldn't issue database query<br />"; 
     echo mysqli_error($db); 
    } 

兩者之間唯一的區別頁面不是靜態地在我的SQL查詢的WHERE子句中定義變量,而是將其從$_GET標記中拉出的值傳遞給我,並且我重命名了視圖變量。

在定義$ query2之後立即添加'$query2 .= " ORDER BY var";'將成功地對我用於var的任何行進行排序。我在if塊的每一行中使用了header('location: url'),用於確定$_GET['sort']的哪個值被傳入,以確保每條線路都已到達,並且每個線路都被成功重定向。

任何人發現我做錯了什麼?我的教授(也就是我)並不擔心使用準備好的陳述等的恰當做法 - 它只是需要功能性。我只是想弄清楚破了什麼。

很抱歉的小說,如果我打破一些規則,這是我在這裏的第一次發佈

Here's what the table looks like for reference

+3

如果打印生成的查詢,你就可以很容易地發現問題 – e4c5

+0

我會怎麼做呢?我是一個完整的PHP新手,我不得不在上週教自己一切 – tmpka

+0

'echo $ query,「
」,$ query2' – Dave

回答

0

我逃脫了你的變量。這將在大多數情況下解決查詢問題。

$query2 = "SELECT Review.username, Review.service_date, Review.review_date, 
     Review.review_rating, Review.review_details, Review.service_id, 
     Plumber.company_name 
     FROM Review 
     INNER JOIN Plumber 
     ON Review.service_id = Plumber.service_id 
     WHERE Plumber.service_id='".$plumber_id."'"; 



$response2 = @mysqli_query($db, $query2); 

這只是一個貝蒂建議:

switch ($_GET['osrt']) { 
    case 'something': 
     $query = ""; 
     break 
    case 'somethingelse': 
     $query = ""; 
     break; 
    default: 
     $query = ""; 
     break; 
}