0

検索ページに問題があります。ページが読み込まれているとき、次のようなURLから値が取得されます。

http://localhost/myweb/search.php?subject=Business+%26+Accounting+Studies

この値は、検索結果を表示するために使用されました。まず、この値をチェックして、ページ上でこの値がtrueかどうか、文字列かどうかなどを確認します。

検証コード:

// Check for a valid keyword from search input:
if ((isset($_GET['subject'])) && (is_string ($_GET['subject']))) {

    foreach ( $_GET AS $key => $subject) {
        $searchKey = $key;
        $searchKeyword = '%'.$subject.'%';
    }

    echo '<pre>', print_r( $_GET), '</pre>';

}else { // No valid keyword, kill the script.
    echo 'This page has been accessed in error.';
    include ('includes/footer.html');
    exit();
}

このコードは現在私のために働いています。しかし、検索ページが読み込まれた後、URLを介して別の変数を渡すと、問題が発生します。この2つの変数を渡す理由は、特定の条件下で検索結果をフィルタリングする必要があるためです。

search.phpページで2つのHTMLリンクを使用して、この2つの変数を渡します。こんな感じ。

echo '<li><a href="?tutor=link">Tutor</a></li>
      <li><a href="?institute=link">Institute</a></li>'; 

そして、私はこのようにこの値をチェックします:

$tutor = isset($_GET['institute']) ? '0' : '1'; 
$institute = isset($_GET['tutor']) ? '0' : '1';

私の問題は、ページが最初に読み込まれたときに、すべての検索結果が正しく表示されることです。ただし、フィルタリングリンクをクリックしても機能せず、ページに検索結果がまったく表示されません。

更新:デバッグ結果。

これはprint_r($_GET)、ページを初めて読み込んだときの結果です。

Array
(
    [subject] => Mathematics
)

フィルタリングに使用するリンク(家庭教師、研究所)をクリックすると、このようになります。

Array
(
    [subject] => Mathematics
    [tutor] => link
)

フィルタリングが行われず、ページに結果が表示されません。

同じリンクをもう一度クリックするとこんな感じになります。

Array
(
    [subject] => link
    [tutor] => link
)

この場合も、フィルタリングは行われず、ページに結果が表示されません。

この問題を解決する方法を教えてもらえますか?

ありがとうございました。

4

4 に答える 4

1

リンクの1つをクリックすると、基本的にhttp://localhost/myweb/search.php?tutor=linkまたはにhttp://localhost/myweb/search.php?institute=linkそれぞれ送信されます。あなたがする必要があるのはもっと似たようなものです

echo '<li><a href="?subject=' . $_GET['subject'] . '&tutor=link">Tutor</a></li>
      <li><a href="?subject=' . $_GET['subject'] . '&institute=link">Institute</a></li>
于 2013-02-16T06:02:26.490 に答える
1

リンクが正しくありません。

2番目の変数をURLに追加する必要があります。
$ subject = $ _GET ['subject'];

echo '<li><a href="?tutor=link&subject='.$subject.'">Tutor</a></li>
      <li><a href="?institute=link&subject='.$subject.'">Institute</a></li>'; 

また、これだと思いませんか

$tutor = isset($_GET['institute']) ? '0' : '1'; 
$institute = isset($_GET['tutor']) ? '0' : '1';

する必要があります

$tutor = isset($_GET['institute']) ? '1' : '0'; //if set then 1
$institute = isset($_GET['tutor']) ? '1' : '0'; //if set then 1

foreach ( $_GET AS $key => $subject) {
        $searchKey = $key;
        $searchKeyword = '%'.$subject.'%';
    }

foreach ( $_GET AS $key => $subject) {

if ($key == 'subject') {
            $searchKey = $key;
            $searchKeyword = '%'.$subject.'%';
     }
} 
于 2013-02-16T06:03:12.637 に答える
0
try to use `urlencode();` and `urldecode();` 

それがあなたの問題を解決すると思います。 詳細については、http://php.net/manual/en/function.urlencode.phphttp ://www.php.net/manual/en/function.urldecode.phpを確認してください。

于 2013-02-16T06:07:15.000 に答える
0

foreachループで検索キーワードを置き換えているようです。

foreach ( $_GET AS $key => $subject) {
    $searchKey = $key;
    $searchKeyword = '%'.$subject.'%';
}

したがって、サブジェクトとチューターを含む$ _GETがある場合、結果は次のようになります。

$searchkey = 'tutor';
$searchkeyword = '%link%';

これは正しくありません。単に書く:

$searchkey = 'subject';
$searchkeyword = "%{$_GET['subject']}%";

foreachは使用しないでください。

全体を編集すると、次のようになります。

// Check for a valid keyword from search input:
if ((isset($_GET['subject'])) && (is_string ($_GET['subject']))) {

    // foreach ( $_GET AS $key => $subject) {
        $searchKey = 'subject';
        $searchKeyword = '%' . $_GET['subject'] . '%';
    // }

    echo '<pre>', print_r( $_GET), '</pre>';

} else { // No valid keyword, kill the script.
    echo 'This page has been accessed in error.';
    include ('includes/footer.html');
    exit();
}
于 2013-02-16T06:14:52.453 に答える