【问题标题】:working with 3 $_GET values使用 3 个 $_GET 值
【发布时间】: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 值。

标签: php 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 更符合您的需要。
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签