2016-05-15 20 views
0

チェックボックスに問題があります。私は両方のチェックボックスをチェックすることができますが、送信した後はチェックボックスが1つだけチェックされます。私はそれらの両方を送信した後にチェックしてほしい。チェックボックスは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

正しい。チェックボックスがチェックされていれば、あなたが与えた 'value'を送信します。チェックされていなければ、まったく送信されません。ですから、 'isset()'を使ってその存在を確認するべきです。ほとんどの場合、チェックボックスには 'value'は必要ありませんが、私はちょうど"安全 "であることが好きです。 –

0

上記のダークアブソルの答えに加えて、各要素の動的な名前を作成するか、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. 
    } 
} 
?>