0

我的搜索页面有问题。当页面加载时,有一个值来自类似这样的 URL。

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

此值用于显示我的搜索结果。首先,我在我的页面上检查此值以确保它是否为真,它是否为字符串等。

验证码:

// 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

您的链接不正确。

您需要将第二个变量添加到 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 回答
1

当您单击其中一个链接时,它实际上会将您发送到http://localhost/myweb/search.php?tutor=linkhttp://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 回答
0
try to use `urlencode();` and `urldecode();` 

认为它会解决你的问题。检查http://php.net/manual/en/function.urlencode.php http://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 回答