我如何解决这个$ _GET数组问题?

时间:2013-02-16 05:51:39

标签: php get

我的搜索页面存在问题。当页面加载时,有一个来自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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您的链接不正确。

您需要将第二个变量添加到网址 $ subject = $ _GET [&#39; subject&#39;];

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.'%';
     }
} 

答案 2 :(得分:0)

try to use `urlencode();` and `urldecode();` 

认为它会解决你的问题。检查http://php.net/manual/en/function.urlencode.php http://www.php.net/manual/en/function.urldecode.php 寻求进一步的帮助

答案 3 :(得分: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();
}