2016-05-15 33 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. 
    } 
} 
?>