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

时间:2015-01-26 10:03:49

标签: php html

我有这个代码,我显示不同的状态名称:

$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>';
}
它显示了按钮&#39;可以点击,我也希望能够点击它们。

我在if语句中添加了unsethttp_build_query,但是如果选择了2个按钮并再次单击其中一个按钮以取消选中它们,则它们都将被取消选中

2 个答案:

答案 0 :(得分:3)

在你的循环中,如果选择了每个链接,当你到达循环结束时,你将取消设置所有内容。

试试这个:

  • 在取消$ 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_ *函数 - 它们是depricated - 使用mysqli或pdo-mysql代替(抱歉 - 由于我的代表,不能发布更多的两个链接 - 如果你点击“depricated”链接你会找到pdo-mysql的链接)

答案 1 :(得分:0)

在条件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">';
}