【问题标题】:Save once checkbox value already inside another loop在另一个循环中保存一次复选框值
【发布时间】:2018-07-26 01:55:36
【问题描述】:

我有这个代码:

<?php
if(isset($_POST['submit'])) {
 if(isset($_POST['sharks'])) {
      $_SESSION['value'] = $_POST['sharks'];
  } else {
      $_SESSION['value'] = '';
  }
}
?>
<form action="" method="POST">
  <?php
  echo '<input name="sharks" type="checkbox" value="1" id="sharks" ';
    if ($_SESSION['value'] == 1) {
      echo ' checked="checked"';
    }
  echo ">";
  ?>
  <br>
  <button type="submit" name="submit" value="Save">Salva</button>
</form>

我已经在一个用户循环中,我只想在他们旁边添加一个复选框并保存连接到该用户的复选框的值。


当我尝试保存复选框时,会发生这种情况:


谢谢大家

更新: 这张图片可以帮助很多: https://i.imgur.com/vXjSqcF.png
这是我的表,我只想在每个用户旁边添加一个复选框并保存他们的状态。

【问题讨论】:

  • 简单解释问题...
  • 您有多个复选框,但它们的名称相同,您应该使用 sharks[] 作为名称。所以在 PHP 中 $_POST['sharks'] 是一个带有键的数组 0,1...x
  • 所有复选框的输入名称都是唯一的吗?
  • @Alexandre Painchaud,她的问题仍然没有说清楚。
  • @Elle,如果出现唯一复选框,您必须使用 foreach 循环来包装您的代码。

标签: php loops checkbox


【解决方案1】:

很难根据假设做出答案。我假设您的字段名称是相同的。一般来说,在输入名称相同的情况下,要么在您选择一个值时立即检查所有值,要么根据条件提交只检查一个值。这很常见,因为您没有为用户定义唯一的输入名称。但是,为了选择尽可能多的用户,请遵循以下代码结构:

<?php
if(isset($_POST['submit'])){ $_SESSION['mysession'] = $_POST; }else{ $_SESSION['mysession'] = array('user1'=>'', 'user2'=>'', 'user2'=>'', 'user3'=>'');}
?>

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST"> 
<input type="checkbox" name="user1" value="1" <?php if (isset($_POST['user1'])){ echo "checked";}?> > 
<input type="checkbox" name="user2" value="2" <?php if (isset($_POST['user2'])){ echo "checked";}?> > 
<input type="checkbox" name="user3" value="3" <?php if (isset($_POST['user3'])){ echo "checked";}?> > 
<button type="submit" name="submit" value="Save">Try</button>
</form>
 
<?php var_dump($_SESSION['mysession']); ?>

如果您需要为所有用户将值 1 插入数据库,只需将每个复选框输入的值更改为 value="1"

因此,您不需要为每个复选框设置单独的保存按钮。我希望你一定会得到想要的输出。

【讨论】:

    【解决方案2】:

    这基本上可以帮助你:

    <?php
    
    $selected_attribute = $_SESSION['value'] == 1 ? "checked" : "";
    echo("<input name='sharks' type='checkbox' value='1' id='sharks' ".$selected_attribute.">");
    
    ?>
    

    【讨论】:

    • 感谢您的回答,但它返回“0”。看到这个截图:i.imgur.com/gMLMPkt.png
    • 我用一个有用的截图更新了我的问题;)
    • 不错,但是当我将状态设置为检查并重新加载页面时,状态不会保持检查状态:(
    • 因为选择时需要设置$_SESSION['value'] = 1;
    • 没问题并检查我的编辑:代码已改进,因此您可以这样使用。
    【解决方案3】:

    尝试改进/清理您的代码:

    <?php if(isset($_POST['submit'], $_POST['sharks'])) {
        $_SESSION['value'] = $_POST['sharks'];
    } else {
        $_SESSION['value'] = '';
    } ?>
    
    <form action="" method="POST">
    
        <input name="sharks" type="checkbox" value="1" id="sharks" <?php echo $_SESSION['value'] == 1 ? "checked" : ""; ?>
        <br>
        <button type="submit" name="submit" value="Save">Salva</button>
    </form>
    

    这应该可行。

    【讨论】:

    • 感谢清理它。无论如何都可以,但是当我使用按钮保存状态时,所有复选框都被选中:(请记住我已经处于循环中,也许“提交”操作会影响所有复选框
    • @Elle 如果你在一个循环中,那么首先你不应该使用ID属性一个静态值。其次,为了解决这个问题,您需要在会话值中保存一些更unique 的内容。或者,你可以试试这个:将所有选中的复选框值存储在**值会话**中,然后使用in_array检查复选框的值是否保存在会话中。希望这是有道理的。
    • 好的,谢谢,我会努力的,别担心。无论如何谢谢大家:)
    • @Elle,不要计算反对票。这只是一个虚拟的生活。继续来寻找自己的方式。这里也有许多开明的用户,他们不认为投票是他们唯一使他们可信的业务。我的赞成票投给你。虽然没有任何区别。
    猜你喜欢
    • 2014-06-29
    • 2011-01-10
    • 1970-01-01
    • 2013-04-15
    • 2015-10-20
    • 1970-01-01
    • 2023-03-13
    • 2018-06-23
    相关资源
    最近更新 更多