提交表单后如何保持切换复选框状态?

时间:2019-10-30 15:34:17

标签: javascript php html

我正在尝试在提交后保留表单的复选框状态。这是复选框类型,您只能选中其中之一。我在这里看到一个问题,该问题涉及使用<?php if(isset($_GET['gender'])) echo "checked='checked'"; ?>通过PHP通过PHP保留复选框的状态,但使用我的代码:

<form action="example.com/example" method="GET">
    <input type="radio" value="male" name="gender" <?php if(isset($_GET['gender'])) echo "checked='checked'"; ?>>
    <input type="radio" value="female" name="gender" <?php if(isset($_GET['gender'])) echo "checked='checked'"; ?>>
    <input type="radio" value="other" name="gender" <?php if(isset($_GET['gender'])) echo "checked='checked'"; ?>>
    <input type="submit" value="submit">
</form>

那行php无效,因为它们都会被检查。有没有一种方法可以保留复选框的状态而不必使用类似以下内容:

if(isset($_GET['gender']) && $_GET['gender'] == 'value')

因为我感觉可以用更好的方法来完成。

感谢您阅读我的问题。

2 个答案:

答案 0 :(得分:1)

从本质上讲,您所描述的解决方案正是您所需要的。如果您要的话,可以将其缩短一点:

<?php 
    $gender = $_GET['gender'] ?? false;
    function checked(){ echo 'checked'; }
?>
<form action="example.com/example" method="GET">
    <input type="radio" value="male" name="gender" <?php if($gender == 'male') checked(); ?>>
    <input type="radio" value="female" name="gender" <?php if($gender == 'female') checked(); ?>>
    <input type="radio" value="other" name="gender" <?php if($gender == 'other') checked(); ?>>
    <input type="submit" value="submit">
</form>

此处使用的??运算符是null coalescence operator,自PHP版本以来已添加到7.0中。如果未设置运算符的左部分,它的作用是返回操作符的右部分。

$gender = $_GET['gender'] ?? false;

具有与以下相同的结果:

if(isset($_GET['gender']))
    $gender = $_GET['gender'];
else
    $gender = false;

尽管您的代码或我上面建议的代码在功能上都没有问题,但通常将PHPHTML混合在一起是不正确的做法。我建议您使用模板引擎-例如Smarty

答案 1 :(得分:0)

如果您只希望检查一个,那么您的代码将像这样。

def worker(aggregate, bit):
    prefix, out = aggregate
    key = prefix + bit
    return ('', out + s[key]) if (key in s) else (key, out)

remainder,string = reduce(worker, '110011111000011010110011', ('', ''))
print string