2016-05-15 83 views
0

我对复选框有问题。我可以检查这两个复选框,但提交后,只有一个复选框被选中。我希望他们在提交后都被检查。只能选中1个复选框? PHP

为什么他们都没有检查后提交?这个过程出了什么问题?

<?php 
$id = $_GET["id"]; 
$stmt = $dbConnection->prepare('SELECT * FROM paginas WHERE id = ?'); 
$stmt->bind_param('s', $id); 
$stmt->execute(); 
$result = $stmt->get_result(); 
if(mysqli_num_rows($result) > 0) { 
    while ($row = $result->fetch_assoc()) { 
     ?> 
     <a href="javascript:;" data-toggle="modal" data-target="#terugnaarpaginas" class="h1url">Terugkeren naar mijn pagina's</a> 
     <h1>Wijzig pagina: <?php echo $row["name"]; ?></h1> 
     <?php 
     if(isset($_POST["opslaan"])) { 
      if(empty($_POST["heading"])) { 
       echo '<p class="error">Titel kan niet leeg zijn</p>'; 
      } elseif(empty($_POST["content"])) { 
       echo '<p class="error">Content kan niet leeg zijn</p>'; 
      } else { 
       $heading = $_POST["heading"]; 
       $content = $_POST["content"]; 
       $updated = date("d-m-Y H:i:s"); 
       $id = $row["id"]; 
       $public = $_POST["public"]; 
       $menu = $_POST["menu"]; 
       $stmt = $dbConnection->prepare('UPDATE paginas SET heading = ?, content = ?, updated = ?, public = ?, menu = ? WHERE id = ?'); 
       $stmt->bind_param('ssssss', $heading, $content, $updated, $public, $menu, $id); 
       $stmt->execute(); 

       echo '<p class="success">Wijzigingen zijn succesvol opgeslagen. <a href="">Bekijken</a></p>'; 
      } 
     } else { 
?> 
<form method="POST" action=""> 
    <input type="text" name="heading" id="fulltext" placeholder="Titel" value="<?php echo $row["heading"]; ?>"> 
    <textarea id="fullbox" class="editor" name="content"><?php echo $row["content"]; ?></textarea> 
    <div class="pad"><input type="checkbox" name="public" id="public" value="<?php 
    if($row["public"] == "1") { 
     echo '0'; 
    } else { 
     echo '1'; 
    } 
    ?>" <?php 
    if($row["public"] == "1") { 
     echo ' checked'; 
    } else { 
     echo ''; 
    } 
    ?>><label for="public" class="checker">Gepubliceerd</label><input type="checkbox" name="menu" id="menu" value="<?php 
    if($row["menu"] == "1") { 
     echo '0'; 
    } else { 
     echo '1'; 
    } 
    ?>" <?php 
    if($row["menu"] == "1") { 
     echo ' checked'; 
    } else { 
     echo ''; 
    } 
    ?>><label for="menu" class="checker">Menu</label></div> 
    <div class="clear"></div> 
    <p id="left">Laatst gewijzigd: <?php echo $row["updated"]; ?></p><input type="submit" value="Bewaar wijzigingen" name="opslaan" class="nomp"> 
    <div class="clear"></div> 
</form> 
<?php 
     } 
    } 
} else { 
    echo '<p>Deze pagina bestaat niet.</p>'; 
} 
?> 

回答

0

复选框的value应始终1,而不是在你那里,并准备把它的数据库时,你应该做的条件:

$public = isset($_POST['public']) ? 1 : 0; 

否则,你将被提交每隔一个时间值0,即使您选中该框,该值也会关闭。

+0

哦,学到新的东西!我想''menu'也一样? –

+0

正确。如果复选框被选中,它会发送你给它的任何“值”。如果没有被选中,那么它将不会被发送。所以你应该使用'isset()'来检查它的存在。在大多数情况下,你根本不需要一个复选框的“值”,但我喜欢有一个“安全”的。 –

0

除了黑暗的Absol的答案上​​面你应该为每个元素创建动态名称或使用name="public[]捕获所有选定的值。

0

您必须在名称后面设置您的输入名称为[]。如check_list[]

例如:

<form action="test.php" method="post"> 
<input type="checkbox" name="check_list[]" value="value 1"> 
<input type="checkbox" name="check_list[]" value="value 2"> 
<input type="checkbox" name="check_list[]" value="value 3"> 
<input type="checkbox" name="check_list[]" value="value 4"> 
<input type="checkbox" name="check_list[]" value="value 5"> 
<input type="submit" /> 
</form> 
<?php 
if(!empty($_POST['check_list'])) { 
    foreach($_POST['check_list'] as $check) { 
      echo $check; //echoes the value set in the HTML form for each checked checkbox. 
         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5. 
         //in your case, it would echo whatever $row['Report ID'] is equivalent to. 
    } 
} 
?>