我有这段代码,我在其中显示不同的状态名称:
$request = $_GET;
$array = Statuses('Porting', $behavior='');
foreach($array["results"] as $ret) {
$sql="SELECT * from orders_porting where status = '".$ret["name"]."' ";
$rs=mysql_query($sql,$conn);
if($_GET[$ret["name"]] == '1') {
unset($request[$ret["name"]]);
$query = http_build_query($request);
echo '<a href="?'.$query.'">';
} else {
echo '<a href="?'.$query.'&'.$ret["name"].'=1">';
}
echo '<div class="TicketsMenuTabs""';
if($_GET[$ret["name"]] == '1') {
echo ' id="active"';
}
echo '>'.$ret["name"].' ('.mysql_num_rows($rs).')</div></a>';
}
它显示了可以单击的"按钮",我也希望能够取消单击它们。
我已经在 if 语句中添加了unset
和http_build_query
,但如果选择了 2 个按钮,然后我再次单击其中一个按钮以取消选中它,它们都变为未选中
在你的循环中,如果选择了每个链接,当你到达(循环的)结束时,你将取消设置所有内容。
试试这个:
- 取消设置$request变量中的链接后,执行输出并使用 $_GET 中的内容重置$request变量。
- 不要忘记设置$query变量(参见 Mickael 的 anwer)
所以它应该看起来像这样:
$request = $_GET;
$array = Statuses('Porting', $behavior='');
foreach($array["results"] as $ret) {
$sql="SELECT * from orders_porting where status = '".$ret["name"]."' ";
$rs=mysql_query($sql,$conn);
if($_GET[$ret["name"]] == '1') {
unset($request[$ret["name"]]);
$query = http_build_query($request);
$request = $_GET;
echo '<a href="?'.$query.'">';
} else {
$query = http_build_query($request);
echo '<a href="?'.$query.'&'.$ret["name"].'=1">';
}
echo '<div class="TicketsMenuTabs""';
if($_GET[$ret["name"]] == '1') {
echo ' id="active"';
}
echo '>'.$ret["name"].' ('.mysql_num_rows($rs).')</div></a>';
}
另外 - 尝试在读取之前检查 $_GET 中的密钥是否存在 - 如下所示:
$request = $_GET;
$array = Statuses('Porting', $behavior='');
foreach($array["results"] as $ret) {
$sql="SELECT * from orders_porting where status = '".$ret["name"]."' ";
$rs=mysql_query($sql,$conn);
if(isset($_GET[$ret["name"]]) && $_GET[$ret["name"]] == '1') {
unset($request[$ret["name"]]);
$query = http_build_query($request);
$request = $_GET;
echo '<a href="?'.$query.'">';
} else {
$query = http_build_query($request);
echo '<a href="?'.$query.'&'.$ret["name"].'=1">';
}
echo '<div class="TicketsMenuTabs""';
if(isset($_GET[$ret["name"]]) && $_GET[$ret["name"]] == '1') {
echo ' id="active"';
}
echo '>'.$ret["name"].' ('.mysql_num_rows($rs).')</div></a>';
}
最后但并非最不重要的一点是 - 我必须同意 Krzysiej 的评论 - 不要使用 mysql_* 函数 - 它们已被弃用 - 使用 Mysqli 或 PDO-MySQL 代替(对不起 - 由于我的代表,无法发布超过两个链接 - 如果您单击"弃用"链接,您将找到指向 PDO-MySQL 的链接)
在条件的 else 部分中if($_GET[$ret["name"]] == '1')
变量 $query
未设置,因为您在此处设置了变量:
if($_GET[$ret["name"]] == '1') {
unset($request[$ret["name"]]);
$query = http_build_query($request);
echo '<a href="?'.$query.'">';
}
试试这个:
$query = http_build_query($request);
if($_GET[$ret["name"]] == '1') {
unset($request[$ret["name"]]);
echo '<a href="?'.$query.'">';
} else {
echo '<a href="?'.$query.'&'.$ret["name"].'=1">';
}