未选中 POST PHP 时复选框不保存 [重复]

Posted

技术标签:

【中文标题】未选中 POST PHP 时复选框不保存 [重复]【英文标题】:Checkboxes not saving when unchecked POST PHP [duplicate] 【发布时间】:2017-11-12 16:55:01 【问题描述】:

我知道 mysqli 已解密,但服务器不允许我在 Mysqli 下划线,但目前这不是我的问题,我的问题是,如果我的复选框未选中,它不会更新到 0 其中从 if then 声明 else。

<?php 
@mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());
@mysql_select_db("xxx") or die(mysql_error());
@mysql_query("SET NAMES utf8");        error_reporting(E_ALL);
ini_set('display_errors', 1);





$chk1 = $_POST['chk1'];

foreach($chk1 as $i=>$s)
    if($s == TRUE)
    
        echo $s, '<br/>';
        $sql = mysql_query("UPDATE `xxx`.`cars` SET `show` = '1' WHERE cars_id='".$s."'");
     else     
        echo $s, '<br/>';
        $sql = mysql_query("UPDATE `xxx`.`cars` SET `show` = '0' WHERE cars_id='".$s."'");
    
    

?>

*添加

<form action="./pages/checkbox.php" method="post">
<section class="content" class="table details">
    <table class="dashboard">
        <tr class="top">
            <td >#</td>
            <td Show</td>
            <td >Photo</td>
            <td Name</td>
        </tr>
    <tbody id="the-list">
<?
$result= mysql_query("SELECT * FROM cars");
$counter = 1;
?>
<?php
 while($row = mysql_fetch_array($result))
        echo '<tr>
            <td>' . $counter++ . '</td>
            <td><input value="'.$row['cars_id'].'" id="chk1" name="chk1[]" type="checkbox"';
            if ($row['show'] == true)  
                echo 'checked></td>'; 
                else 
                 
                echo 'unchecked></td>'; 
            
        echo '<td><img src="../xml/images/'.$row['cars_id'].'-1.JPG"  ></td>';     
        echo "<td><h3> ", $row['brand']," " . $row['model'], " " . $row['type'], " &euro; " . $row[cars_id'], " </h3></td>";
        echo '</tr>';
 
?> <input type="submit" name="Submit" value="Safe">
    </form> 

在“重复”帖子中,我没有找到如何将其放入 while 循环中,请描述这是同一个问题。

【问题讨论】:

不,因为我在那篇文章中没有看到在我的表单中隐藏了一段时间。 - 循环 如果您在不那么重复的帖子中找不到清晰的遮阳篷,这会让人们有点害怕提问,因为我真的没有看到我正在寻找的问题。 【参考方案1】:

如果未选中复选框,则不会发布。所以 ID 不在你的数组中。

检查你的帖子数据,你会发现复选框不见了。


取消选中复选框的最佳方法是覆盖它们。

<form method="post">
  <input type="hidden" name="checkbox" value="0">
  <input type="checkbox" name="checkbox" value="1">
  <button type="submit">Check result</button>
</form>

【讨论】:

也许这个问题不太聪明,但是我也在学习。如何查看我的发布数据? 谢谢,(抱歉想编辑我的帖子必须习惯***的界面)。但是,如果您看到我的帖子已编辑,我的表单在哪里,如果值是自动的,我应该在哪里放置隐藏输入,我不明白这是如何工作的。 虽然您的总体答案(未选中时根本不会发送复选框)是正确的,但发送带有表单的复选框列表并不是最佳解决方案。您必须做额外的工作(又名爆炸),并且您依赖客户端获取您不应该提供的信息。如果有人更改了ids 输入的内容会怎样?遵循相同的概念,但不要从表单中获取允许的复选框列表。您可以在 PHP 脚本中轻松地对该列表进行硬编码。 @ConorMancone 你能详细解释一下吗?谢谢,现在我把它放了,但仍然没有在 checkbox.php 中更新,所有这些都保存为 1 而不是 0 另一种解决方案是通过渲染将 ID 保存为会话。明天我可以通过会话更新我的答案。所以客户端不能操作 id。【参考方案2】:

复选框仅在选中时发布数据。 检查它是否发布了

    <?php
    if(isset($_POST["chk1"]))
    // Run your sql code in here to avoid unwanted output
// Set your check variable
$chk1=$_POST["chk1"];
// Then your loop
foreach($chk1 as $i=>$s)
    if($s == TRUE)
    
        echo $s, '<br/>';
        $sql = mysql_query("UPDATE `xxx`.`cars` SET `show` = '1' WHERE cars_id='".$s."'");
     else     
        echo $s, '<br/>';
        $sql = mysql_query("UPDATE `xxx`.`cars` SET `show` = '0' WHERE cars_id='".$s."'");
    
    
    
    ?>

【讨论】:

以上是关于未选中 POST PHP 时复选框不保存 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

未选中复选框时发布复选框值[重复]

PHP jquery设置复选框值,如果选中或未选中并发布

如果未选中复选框,如何提交 0,如果在 HTML 中选中复选框,如何提交 1 [重复]

带有链接的 HTML 表格行未选中复选框 [重复]

php数组转换字符串及复选框如何勾选中

PHP复选框总是返回[重复]