使用 3 个 $_GET 值

Posted

技术标签:

【中文标题】使用 3 个 $_GET 值【英文标题】:working with 3 $_GET values 【发布时间】:2013-02-15 15:00:10 【问题描述】:

$_GET 数组有问题。在我的页面上,一个值来自这样的 URL。

http://localhost/search.php?subject=Mathematics

我检查这个 $_GET 值是这样的..

// Check for a valid keyword from search input:
if ( (isset($_GET['subject'])) && (is_string ($_GET['subject'])) )  // From SESSION
    foreach ( $_GET AS $key => $subject) 
        $searchKey = $key;
        $searchKeyword = '%'.$subject.'%';
    

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

现在它为我工作。但我的问题是我正在使用另外两个变量通过同一页面上的 URL 来过滤我的数据库值。

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';

我的问题是,当我尝试过滤数据库结果时,单击上面的链接它总是使用此代码,而不是显示过滤结果。

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

谁能告诉我如何使用这 3 个 $_GET 值。

【问题讨论】:

为什么不用两个查询参数? target=tutor&amp;link=...?这减少了您检查 $_GET['target'] 是否包含有效内容的工作,而不必检查三个不同的可能 $_GET 值。 【参考方案1】:

为什么不在else 中添加一个子句:

elseif(!isset($_GET['institute']) && !isset($_GET['tutor'])) 

    echo 'This page has been accessed in error.';
    include ('includes/footer.html');
    exit();

【讨论】:

【参考方案2】:

您需要确保网址如下所示:

http://localhost/search.php?subject=Mathematics&tutor=tutorName&institute=instituteName

? 表示 URL 参数的开头,&amp; 标志着 url 参数之间的分隔

【讨论】:

是的,我尝试过像这样更改我的链接 - echo 'Tutor 研究所'; 并将此代码更改为 - $tutor = isset($_GET['subject']) && isset($_GET['institute']) ? “0”:“1”; $institute = isset($_GET['subject']) && isset($_GET['tutor']) ? '0' : '1'; 你在那个 sn-p 中的学院和导师方向错误【参考方案3】:

您的问题似乎不是,您遇到了else 循环(或者更好地说:不是only 问题)。看起来您的第一个参数在第二个链接中丢失了。我认为,第二个链接应该像某种扩展搜索过滤器一样反应,应该应用于最近显示的内容,还是我完全理解错误?

也许这可以解决您创建后续 URL 的问题。

$params = array();

foreach($_GET as $key => $value) 
  $params[] = '&'.$key.'='.$value;


$url1 = '?tutor=link'.implode('', $params);
$url2 = '?institute=link'.implode('', $params);

当你输出链接时:

echo '<li><a href="'.$url1.'">Tutor</a></li>
      <li><a href="'.$url2.'">Institute</a></li>'; 

【讨论】:

【参考方案4】:

您的问题是您只检查 $_GET['subject'] 变量,该变量没有被传入。您可以通过几种方式执行此操作,所有这些都会导致更改:

if ( (isset($_GET['subject'])) && (is_string ($_GET['subject'])) )  // From SESSION

1) 在条件字符串中包含所有变量:

if ( ((isset($_GET['subject'])) && (is_string ($_GET['subject']))) || ((isset($_GET['institute'])) && (is_string ($_GET['institute']))) || ((isset($_GET['tutor'])) && (is_string ($_GET['tutor']))) ) 

2) 在所有链接中传入 searchKey=1 或其他内容并使用:

if ( isset($_GET['searchKey']) )  // From SESSION

修改后的链接:

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

如果您希望一次传递多个变量,则需要将搜索键放入一个数组中。

【讨论】:

我不清楚这一点:在你所有的调用中传入 searchKey=1 或其他东西并使用:你能举个例子吗? 刚刚修改了我的示例,但认为 #2 更符合您的需要。

以上是关于使用 3 个 $_GET 值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 发送 $_GET 值

ajax_get/post_两级联动

使用Where-Object后使用Get-Random创建一个空值表达式

htaccess mod 用斜杠将 $_GET 重写为变量

能够使用 $_GET 但不能接收数据 $_POST [重复]

php中__set和__get要怎么理解?