我的搜索页面存在问题。当页面加载时,有一个来自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
)
再次过滤未发生且未在页面上显示任何结果。
有人能告诉我如何解决这个问题吗?
谢谢。
答案 0 :(得分:1)
当您点击其中一个链接时,它实际上会分别将您转到http://localhost/myweb/search.php?tutor=link
或http://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();
}