PHP / HTML选择和取消选择链接以更改URL


PHP / HTML select and unselect links to change URL

我有这段代码,我在其中显示不同的状态名称:

$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 语句中添加了unsethttp_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">';
}