使用 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&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 参数的开头,&
标志着 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&tutor=link">Tutor</a></li>
<li><a href="?searchKey=1&institute=link">Institute</a></li>';
如果您希望一次传递多个变量,则需要将搜索键放入一个数组中。
【讨论】:
我不清楚这一点:在你所有的调用中传入 searchKey=1 或其他东西并使用:你能举个例子吗? 刚刚修改了我的示例,但认为 #2 更符合您的需要。以上是关于使用 3 个 $_GET 值的主要内容,如果未能解决你的问题,请参考以下文章
使用Where-Object后使用Get-Random创建一个空值表达式