在我的數據庫項目的第一次迭代中,我成功創建了一個頁面,該頁面在單擊每個表列標題時使用$_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
如果打印生成的查詢,你就可以很容易地發現問題 – e4c5
我會怎麼做呢?我是一個完整的PHP新手,我不得不在上週教自己一切 – tmpka
'echo $ query,「
」,$ query2' – Dave