我有一个注册表单,其中包含复选框形式的运动列表(从 mysql 表中提取)。在发布后,我创建了一个会话,其中包含与可以验证的表单相关的变量。除了存储运动的复选框外,一切都按计划进行。我已经通过一个数组传递我的帖子值,所以它就像通过一个数组传递一个数组,这就是我没有运气的地方。我只想要从帖子到显示的检查运动。此外,如果该列表在第二次或第三次验证时更新,我希望它更新数组。代码如下,先谢谢了。
邮政编码
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>
更新!!!
我一开始忘了提到,一旦创建会话,我的代码就会检查每个框,而不是只检查最初选中的框。我被告知这是因为我根据我的代码检查的条件总是正确的,所以......
替换:
foreach ($_SESSION['sport'] as $sport_id) {
$checked = 'checked';
}
和:
if (in_array($sport_id, $_SESSION['sport'])) {
$checked = 'checked';
} else {
$checked = '';
现在,它记住了两个复选框,但在每次提交后,它会立即检查我第一次检查的那个右侧的一个。如果我再次点击提交,它在右边的另一个位置。}