首页 > 解决方案 > 提交表单后如何保留切换复选框状态?

问题描述

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

<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')

因为我觉得这可以以更好的方式完成。

感谢您阅读我的问题。

标签: javascriptphphtml

解决方案


您描述的解决方案本质上正是您所需要的。如果这是你想要的,你可以让它更短一点:

<?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, 添加到PHPsince version 7.0。如果未设置运算符的左侧部分,它的作用是返回运算符的右侧部分。

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

与以下结果相同:

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

尽管您的代码或我上面建议的代码在功能上都没有问题,但混合PHP通常HTML被视为不好的做法。我建议使用模板引擎 - 例如,Smarty.


推荐阅读