2017-09-22 16 views
0

whileループで異なる値を持つチェックボックスが4つあります。&という名前の配列があります。最後のループされたチェックボックスのセットから選択された値が更新されていますが、選択したすべての値(1セットにつき1つ)が対応する行に独立して更新される必要があります。ループされたチェックボックスの配列値が繰り返されます

HTML

<input type="checkbox" name="size[]" value="S" /> 
<input type="checkbox" name="size[]" value="M" /> 
<input type="checkbox" name="size[]" value="L" /> 
<input type="checkbox" name="size[]" value="XL" /> 

PHP

<?php 
if(isset($_POST['update'])){ 
$select_id = "select * from customer where ip='$ip'"; 
$get_id = mysqli_query($db, $select_id); 

while ($row = mysqli_fetch_array($get_id)){ 
foreach($_POST['size'] as $size){ 

$product_id = $row['product_id']; 

$update_size = "update customer set size='$size' where product_id='$product_id'"; 
$run_size = mysqli_query($db, $update_size); 
} 
} 
} 
?> 

UPDATE - ALMOST THERE!

WHILEループのOUT

$i = 1; 
WHILEループで

$i++; 
<input type="checkbox" name="size[].$i." value="S" /> 
<input type="checkbox" name="size[].$i." value="M" /> 
<input type="checkbox" name="size[].$i." value="L" /> 
<input type="checkbox" name="size[].$i." value="XL" /> 
処理で

<?php 
if(isset($_POST['update'])){ 
$select_id = "select * from customer where ip='$ip'"; 
$get_id = mysqli_query($db, $select_id); 


while ($row = mysqli_fetch_array($get_id)){ 

$size = $_POST['size']; 
$product_id = $row['product_id']; 

foreach ($size as $_POST['size']); 
{ 

$update_size = "update customer set size='$size' where product_id='$product_id'"; 
$run_size = mysqli_query($db, $update_size); 
} 
} 
} 
?> 

今では、行ごとの変数の異なるセットを更新していますが、今1は正しい値であります、もう一つの配列はなぜですか?

答えて

0

私がしなければならなかったのは、

$size = array_shift($_POST['size']); 
0

foreachループが実行してサイズフィールドを更新するコードに従って、updateステートメントが実行されるたびに古い値が上書きされます。したがって、最後にループしたチェックボックスの値が保存されます。私は思うあなたのデータベース構造をチェックする必要があります。同じproduct_idに4つの異なる値を格納する場合は、別のテーブルを作成する必要があります(1対多の関係)。これが役立つことを願っています。

+0

申し訳ありませんが、1つのチェックボックスしか選択されていないため、1行に4つの値が格納されます。 – Steven

+0

チェックボックスをクリックすると、 ''または '' javascriptをチェックボックスに追加するとチェックボックスをオフにします。ここに参照があります:http://jsfiddle.net/MQM8k/ –

+0

ボックスの次のループが一意になるように、チェックボックスの名前を増やす必要があります。 – Steven

関連する問題