チェックボックス形式のスポーツのリストを含むサインアップフォームがあります(mysqlテーブルから取得)。投稿時に、検証可能なフォームに関連する変数を使用してセッションを作成します。スポーツのチェックボックスを保存することを除いて、すべてが計画どおりに機能します。私はすでに配列を介して投稿値を渡しているので、配列を介して配列を渡すようなもので、運が悪いところです。ポストからショーまでチェックされたスポーツが欲しいだけです。さらに、そのリストが2回目または3回目の検証で更新された場合、配列を更新したいと思います。コードは次のとおりです。事前に感謝します。
郵便番号
if(isset($_POST['signup']) == 'Finish') {
//start session to store variables for post-submit validation
session_start();
//sanitizes input and prevents sql injection attacks
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
$_SESSION[$key] = $value;
}
$_SESSION['sport'] = array_unique(array_values(array_merge($_SESSION['sport'], $data['sport'])));
フォームコード
<table class="signup_sportstable" border="0" cellpadding="0" cellspacing="4">';
$result = mysql_query("SELECT * FROM sports ORDER BY sport ASC");
$i = 0;
$max_columns = 3;
while($row = mysql_fetch_array($result)) {
foreach ($_SESSION['sport'] as $sport_id) {
$checked = 'checked';
}
// make the variables easy to deal with
extract($row);
// open row if counter is zero
if($i == 0)
$content .= '<tr>';
// make sure we have a valid product
if($sport != "" && $sport != null)
$content .= '<td><input type="checkbox" name="sport[]" value="'.$sport_id.'" id="sport[]" '.$checked.'>'.$sport.'</td>';
// increment counter - if counter = max columns, reset counter and close row
if(++$i == $max_columns) {
$content .= '</tr>';
$i=0;
} // end if
} // end while
// clean up table
if($i > 0) {
for($j=$i; $j<$max_columns;$j++) $content .= "<td> </td>";
$content .= '</tr>';
}
$content .= '
</table>
アップデート!!!
セッションが作成されると、最初にチェックされたボックスをチェックするだけでなく、すべてのボックスをチェックすることを最初に言及するのを忘れていました。これは、コードに基づくチェック済みの条件が常に true であったためであると通知されたので、...
置換:
foreach ($_SESSION['sport'] as $sport_id) {
$checked = 'checked';
}
と:
if (in_array($sport_id, $_SESSION['sport'])) {
$checked = 'checked';
} else {
$checked = '';
現在、2 つのチェックボックスが記憶されていますが、送信するたびに、最初にチェックしたチェックボックスのすぐ右側にあるチェックボックスがチェックされます。送信をもう一度押すと、右側に別の場所が表示されます。}