• 締切済み

チェックボックスと入力フォームが一致しない

チェックボックスにチェックを入れた箇所のみ入力フォームがあり、 入力フォームにテキストを入れ、チェックを入れた箇所のみDBにデーターがSETされるような形で作りたいのですが、以下のコードですと、 チェックされた部分にデータは入るのですが、ずれてデータがセットされてしまいます。 チェック如何に関わらず、チェックボックスのデータを上から、チェックしたボックスに順番にデータが入ってしまうような形です。 ループの部分がおかしいのでしょうか? 昨日からいろいろ試しているのですが、うまくいきません、、、 よろしくお願いします。 ★入力前 □ [あああ] □ [いいい] □ [ううう] □ [えええ] □ [おおお] ★データ入力 □ [あああ] ■ [イイイ] □ [ううう] ■ [エエエ] □ [おおお] ★データ反映後 □[あああ] □[あああ] □[ううう] □[イイイ] □[おおお] ソースコードはこのような形になっています。 ■入力フォーム部分 <?php while ($row = mysql_fetch_array($result)) { //登録状態判別 if($row[reg] == 0){ $reg_status = '<span style="color:#ff0000;">未入金</span>'; }elseif($row[reg] == 1){ $reg_status = '<span style="color:#0000ff;">会員</span>'; } $clo_date =$row["clo_date"]; $clo_date2 = str_replace('-', '', $clo_date); echo ' <tr> <td><input type="checkbox" value="'.$row["reg"].','.$row["dispName"].','.$row["userName1"].','.$row["userName2"].','.$row["userID"].','.$row["tel"].','.$row["email"].','.$row["add_date"].','.$row["up_date"].','.$row["clo_date"].','.$row["no"].','.$row["passwordCheck"].'" name="user[chk][]" /></td> <td>'.$reg_status.'</td> <td>'.$row["dispName"].'</td> <td>'.$row["userName1"].''.$row["userName2"].'</td> <td>'.$row["userID"].'<input type="hidden" name="userID[]" value="'.$row["userID"].'" /></td> <td>'.$row["tel"].'</td> <td>'.$row["email"].'<input type="hidden" name="user[email][]" value="'.$row["email"].'" /></td> <td>'.$row["add_date"].'</td> <td>'.$row["up_date"].'</td> <td><input type="text" size="8" value="'.$clo_date2.'" name="user[clo_date][]" /> </tr> '; } ?> ■MYSQL接続データSET部分 $i = 0; foreach($_POST['user']['chk'] as $val){ $clos = $_POST['user']['clo_date'][$i]; //valueの値を配列に分割 $split = explode(",", $val); $sql = "UPDATE user SET reg =1 WHERE userID = '$split[4]'"; $sql2 = "UPDATE user SET clo_date ='$clos' WHERE userID = '$split[4]'"; mysql_query("SET NAMES utf8",$mysql_con); mysql_query($sql,$mysql_con); mysql_query($sql2,$mysql_con); }

みんなの回答

回答No.2

user[chk]はチェックした物だけPOSTされます。 対してuser[clo_date]はすべてのデータがPOSTされます。 故にuser[chk][0]とuser[clo_date][0]は相対していません。 入力フォームのecho部を、データSET部分と同じく、 user[chk][$i] user[clo_date][$i] とするとよろしいかと。

回答No.1

$i はインクリメントしなくてOK?

ango_s
質問者

補足

失礼しました。 その部分を書き忘れていました。 ■MYSQL接続データSET部分 $i = 0; foreach($_POST['user']['chk'] as $val){ $clos = $_POST['user']['clo_date'][$i]; $i++; //valueの値を配列に分割 $split = explode(",", $val); $sql = "UPDATE user SET reg =1 WHERE userID = '$split[4]'"; $sql2 = "UPDATE user SET clo_date ='$clos' WHERE userID = '$split[4]'"; mysql_query("SET NAMES utf8",$mysql_con); mysql_query($sql,$mysql_con); mysql_query($sql2,$mysql_con); }

関連するQ&A