2017-07-20 2 views
-1

私のコードは次のとおりです。foreachループを使用して送信した後もチェックボックスをオンにしていますか?

<form method="POST" action="" style="margin-top: 30px;"> 
<div class="form-group" style="display: inline-block;"> 
    <label for="Name" class="label-control" >Device Price</label> 
    <input type="text" name="price" class="form-control"> 
</div> 

<div class="row" style="margin-bottom: 20px;"> 
    <div class="col-md-3">  
     <?php 
     $r = 0; 
     $sql = "SELECT * FROM Subscribes "; 
     $result = $db->query($sql); 
     while ($row = $result->fetch_assoc()) { 
      if ($r == 5) { 
       echo "</div><div class='col-md-3'>"; 
       $r = 0; 
      } 
      $r++; 
      $p = $row['price']; 

      echo "<label style='font-size: 16px; margin: 20px;'>"; 
      echo "<input name='checkbox[]' type='checkbox' "; 
      echo "value=" . $p . " >" . $row['sub_name']; 

      if ($p == 0) { 
       echo "<label style='color:#f00'> Free </label>"; 
      } 
      echo "</label>"; 
     } 
     ?> 

    </div>    
</div> 

<div class="row">  
    <div class="col-md-12"> 
     <div class="form-group" style="margin-left: 35%;"> 
      <button class="btn btn-info" name="sum" style="font-size: 24px;">TOTAL</button> 
      <label style="margin-left: 6%; font-size: 24px;"> 
       <?php 
       if (isset($_POST['sum'])) { 
        $price = $_POST['price']; 
        $price = $price + $price * .52; 
        $total = $price; 
        if (!empty($_POST['checkbox'])) { 

         foreach ($_POST['checkbox'] as $value) { 
          $total = $total + $value; 
         } 
        } 
        echo $total; 
       } 
       ?></label> 
     </div> 
    </div> 
</div> 

+0

あなたの質問については、関連する記述を追加してください。 –

答えて

0

あなたがチェックボックスにcheckedプロパティを置くことができますあなたの場合は<input type="checkbox" checked>"

を、あなたは最初のブロックのaswellでPOSTデータをチェックし、追加する必要があります提出されたチェックボックスへのプロパティchecked

echo "<input name='checkbox[]' type='checkbox' "; 
echo "value=" . $p; 

//if value is in the array of submitted checkboxes, add the checked property 
if(array_search($p ,$_POST["checkbox"]) >= 0) echo "checked"; 

echo ">" . $row['sub_name']; 
+0

は動作していませんXXX –

0

あなたは、ほぼちょうどchecked[$r]が上にあるかどうかを確認するために掲示値を確認することができますが、ユーザーがチェックボックスの一部を残した場合に、それらは掲載されません。

したがって、各チェックボックスを識別する方法が必要です。あなたがそれらをエコーするときは、このようにそれらに名前を付けることによってこれを行うことができます:ユーザーがフォームを送信する際

$id = $row['id']; // or whatever your id is 
echo "<input name='checkbox[$id][]' type='checkbox' value=$p >" 

さて、あなたはチェックボックスをチェックする必要があるかを正確に知っています。だから、完全に

echo "<input name='checkbox[$id][]' type='checkbox' value=$p $checked>" 

を::だからあなたは単にあなたがそれらをレンダリングする際に起因checkedを追加することができます

<?php 
    $r = 0; 
    $sql = "SELECT * FROM Subscribes "; 
    $result = $db->query($sql); 

    while ($row = $result->fetch_assoc()) { 
     if ($r == 5) { 
      echo "</div><div class='col-md-3'>"; 
      $r = 0; 
     } 

     $r++; 
     $p = $row['price']; 
     $id = $row['id']; 
     $checked = null; 

     if(array_key_exists('checkbox', $_POST) && array_key_exists($id, $_POST['checkbox']){ 
      $checked = "checked"; 
     } 

     echo "<label style='font-size: 16px; margin: 20px;'>"; 
     echo "<input name='checkbox[$id][]' type='checkbox' value=$p $checked>" . $row['sub_name']; 

     if ($p == 0) { 
      echo "<label style='color:#f00'> Free </label>"; 
     } 
     echo "</label>"; 
    } 
?> 
+0

[送信]ボタンをクリックする前に動作しますが、これは最初の[how-to-ask](https://stackoverflow.com/help/how-to-ask)をご覧ください。未定義のインデックス: エラーが が表示されますこれはお知らせですエラーがそう –

+0

ため にチェックし、提出した後 を選択された、あなただけの配列のキーがアクセスしようとする前に存在して確認する必要があります。もちろん、まだフォームが提出されていない場合は存在しません。私はコードを更新しました。 –

+0

を消え、すべてのチェックボックス – BizzyBob

関連する問題