-1

次のコードがあります。

<?php
include "include.php";
session_start();
// Defining variables from home.php if set
if(isset($_POST['title'])){
$title = mysql_real_escape_string($_POST['title']);
}
if(isset($_POST['author'])){
$author = mysql_real_escape_string($_POST['author']);
}
if(isset($_POST['isbn'])){
$isbn = mysql_real_escape_string($_POST['isbn']);
}
if(isset($_POST['keyword'])){
$keyword = mysql_real_escape_string($_POST['keyword']);
}
if(isset($_POST['sort'])){
$sort=@$_POST['sort'];}
// Determine the WHEREs to use
$where = array();
if ( ! empty($title))
$where[] = "booktitle LIKE '%" . $title . "%'";
if ( ! empty($author))
$where[] = "author LIKE '%" . $author . "%'";
if ( ! empty($isbn))
$where[] = "isbn LIKE '%" . $isbn . "%'";
if ( ! empty($keyword))
$where[] = "description LIKE '%" . $keyword . "%'";

//Determine the ORDERs to use
$order = array();
if ((isset($sort)) && ($sort=='lowhigh'))
$order[] = "price ASC";
if ((isset($sort)) && ($sort=='highlow'))
$order[] = "price DESC";
// Build the query
$query = 'SELECT * FROM book';
if ( ! empty($where))
$query .= ' WHERE ' . implode(' AND ', $where);
if(! empty($sort))
$query .= ' ORDER BY ' . implode($order);
//Display results
$result = mysqli_query($con, $query) or die("Error in query $query: " . mysqli_error());
while ($row = mysqli_fetch_array($result)) {
  ?><a id="1" href="book.php" border="0"><img src="<?php echo $row[12]; ?>" width="112px" height="150px" /></a>
<a href="book.php?booktitle='<?php echo $_SESSION['booktitle']=$row[1];?>'"><b><?php echo  $row[1] . ", (" . $row[5] . ")";?></b></a><br><?php
echo $row[2];
echo "<br><div style='text-align:right'> <b>&pound;" . $row[9] . "</b></div>";
echo "<b>Book description:</b> " . substr($row[3],0,300) . "...<br /><hr>";
}
mysqli_close($con);             //closes the connection
?>

フロント エンド ページの 4 つのテキスト フィールドからの入力を渡し、結果を表示します。これはすべてうまくいきます。表示された結果を並べ替えるときです。たとえば、Price: 低から高を選択すると、データベース内のすべての結果が配置され、実行された検索の結果だけでなく、すべてが表示されます。元の検索を思い出す方法を教えてください。

これは私のフォームです:

<form id="rform" name="formsort" action=""  method="post">
<select name="sort" id="sort" onChange="document.forms['formsort'].submit()">
<option value="default">Sort Results</option>
<option value="lowhigh">Price: Low to High</option>
<option value="highlow">Price: High to Low</option>
</select>
</form>
4

4 に答える 4

1

実行された検索をphpに「記憶」させるにはどうすればよいですか

これは実際には PHP ではなく、HTTP プロトコルの一般的な考え方です。したがって、問題を解決するには、標準に従う必要があります。

検索には、POST ではなく GET メソッドを使用する必要があります。これは HTTP 標準で定義されており、まさに GET メソッドの目的です。POST は検索に使用しないでください。

したがって、GET メソッドを使用している限り、データは自動的に保持されます。

唯一の問題は、ページネーション リンクにある可能性があります。それらに現在のクエリ文字列を追加するには、http_build_query()関数を使用する必要があります。

ページの条件の数を実際に減らすことができます。2つの別々のものを使用する代わりに

if(isset($_GET['title'])){
    $title = mysql_real_escape_string($_POST['title']);
}
if ( ! empty($title))
$where[] = "booktitle LIKE '%" . $title . "%'";

1つを使用する必要があります

if(isset($_GET['title'])){
    $title = mysql_real_escape_string($_POST['title']);
    $where[] = "booktitle LIKE '%" . $title . "%'";
}
于 2013-03-29T07:28:51.870 に答える
0

私の見解では、なぜそんなに抜本的な選別を行うのでしょうか? 結果をphp経由でテーブルに表示するだけで、 jqueryテーブルを任意の方法でソートするために使用できます

http://tablesorter.com/docs/
http://joequery.github.com/Stupid-Table-Plugin/

于 2013-03-29T01:06:17.837 に答える
0

申し訳ありませんが、コードをもう一度確認したところ、それが明確であり、解決策も明確であることがわかりました:)

広告 3 の非表示要素を (タイトル、本、著者) で名前を付けた各要素を順番に並べ替える形式にし、検索アクションから投稿された値を保存するので、結果を並べ替えるときに、これらの制約も適用されるため、再度投稿されます :)

つまり、使用している並べ替えフォームの内側に次のコードを追加する必要があります。

<?php
    if(isset($_POST['title']))
        {
            echo '<input type="hidden" name="title" value="'.$_POST['title'].'" />';
        }
    if(isset($_POST['author']))
        {
            echo '<input type="hidden" name="author" value="'.$_POST['author'].'" />';
        }
    if(isset($_POST['isbn']))
        {
            echo '<input type="hidden" name="isbn" value="'.$_POST['isbn'].'" />';
        }
    if(isset($_POST['keyword']))
        {
            echo '<input type="hidden" name="keyword" value="'.$_POST['keyword'].'" />';
        }
    if(isset($_POST['sort']))
    {
        echo '<input type="hidden" name="sort" value="'.$_POST['sort'].'" />';
    }

?>

これがお役に立てば幸いです:)追加のヘルプが必要な場合はお知らせください:)

于 2013-03-29T00:53:24.520 に答える
-1

「ORDER BY」を使用すると、データベース自体ではなく、結果セットがソートされます。結果の新しいコピーを取得したい場合は、ORDER BY なしで取得してください。

また、PHP の 3 項 if 構造は、ここでははるかに適しています。それ以外の :

if(isset($_POST['title'])){
   $title = mysql_real_escape_string($_POST['title']);
}

あなたは言うことができます:

$title = (isset($_POST['title']) ? mysql_real_escape_string($_POST['title']) : "");
于 2013-03-29T00:58:23.580 に答える