2013-04-29 51 views
2

基本上,我使用HTML表單和PHP連接到MySQL數據庫,並且我希望用戶能夠選擇在實際返回結果之前如何從下拉菜單中對結果進行排序。通過HTML表單和PHP對錶格進行排序?

這裏是我的形式:

<p>View the complete list of books as sorted by: 
<form action="usersort.php" method="post"> 
<select name="sortby"><option value="book_name">Book Title</option> 
<option value="author">Author</option></select> 
<input type="submit" name="submit" value="Go"></form></p> 

這是我的PHP:

<?php 
echo '<table align="center" cellspacing="0" cellpadding="5" width="75%"> <tr> 
<td align="left"><b><a href="usersort.php?sort=book_name">Book Name</a></b></td> 
<td align="left"><b><a href="usersort.php?sort=author">Author</a></b></td>'; 
require ('mysqli_connect.php'); 

$sort = (isset($_GET['sortby'])) ? $_GET['sortby'] : 'books'; 

switch($sort) { 
case 'book_name': 
$order_by = 'book_name ASC'; 
break; 
case 'author': 
$order_by = 'author ASC'; 
break; 
default: 
$order_by = 'book_name ASC'; 
$sort = 'books'; 
break; 
} 

$q = "SELECT (book_name) AS name, (author) AS author, (publisher) AS publisher FROM books ORDER BY $order_by"; 
$r = @mysqli_query ($dbc, $q); 
if ($r) { 
echo '<table align="center" cellspacing="3" cellpadding="3" width="75%"> 
<tr><td align="left"><b>Book Name</b></td><td align="left"><b><Author</b></td></tr>'; 

while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) 
{echo '<tr><td align="left">' . $row['name'] . '</td><td align = "left">' . $row['author'] . '</td><td align = "left">' . $row['publisher'] . '</td></tr>'; 
} 

echo '</table>'; 

mysqli_free_result($r); 

} else { 
echo 'The current books could not be retrieved.'; 

echo '<p>' . mysqli_error($dbc) . '<br><br>Query: ' . $q . '</p>'; 

} 

?> 

我認爲,因爲我命名的HTML形式「sortby」我的PHP將獲取的選擇值值並將其插入「sortby」,但每當我嘗試通過表單訪問返回時,它總是隻使用切換條件中的默認情況?有人能告訴我我做錯了什麼嗎?

回答

1

您發佈的形式,並通過使用$ _POST而不是$ _GET

變化

$sort = (isset($_GET['sortby'])) ? $_GET['sortby'] : 'books'; 

$sort = (isset($_POST['sortby'])) ? $_POST['sortby'] : 'books'; 
+0

你可能意味着改變都$ _GET,不只是一。 – Steve 2013-04-29 02:26:14

+0

@Steve謝謝:) – 2013-04-29 02:27:40

0

這是因爲你的表格操作設置爲post而獲得的價值比get。您的PHP isset正在尋找一個全球$_GET當它應該在尋找$_POST

行應改爲:

$sort = (isset($_POST['sortby'])) ? $_POST['sortby'] : 'books'; 

你也應該清理縮進您switch聲明:

switch($sort) { 
    case 'book_name': 
     $order_by = 'book_name ASC'; 
     break; 
    case 'author': 
     $order_by = 'author ASC'; 
     break; 
    default: 
     $order_by = 'book_name ASC'; 
     $sort = 'books'; 
     break; 
} 
0
$sort = (isset($_POST['sortby'])) ? $_POST['sortby'] : 'book_name'; //<< HERE 

switch($sort) { 
case 'book_name': 
$order_by = 'book_name ASC'; 
break; 
case 'author': 
$order_by = 'author ASC'; 
break; 
default: 
$order_by = 'book_name ASC'; 
$sort = 'book_name'; //<< AND HERE 
break; 
} 
相關問題