目前,我正在构建一个基于复选框的成就系统(因为它与帖子无关),然而,我遇到了一个问题,我似乎无法绕着它转,因为我对循环和数组没有那么方便。
好的,所以我做了一组复选框,这些复选框被张贴在这个页面上,并得到了满意的填充,如下面的代码所示,它帮助我填充页面的那个部分。
function MakeProfessionlist(){
$result = LoadListProffesion();
$i = 0;
echo '<table class="Overview">';
while($row = mysqli_fetch_array($result)){
$i++;
if(($i % 2) == 0){
echo "<td class='small'><td><input id='achievementHidden' type='hidden' value='0' name='IsChecked[]'>";
echo "<input type='checkbox' id='achievement' name='IsChecked[]' value = '1'>";
echo "<input name='AchievementId[]' type='hidden' value='".$row['AchievementId']."'></td>";
echo "<td class='big'>".$row["AchievementName"]."</td></tr>";
}else{
echo "<tr><td class='small'><input id='achievementHidden' type='hidden' value='0' name='IsChecked[]'>";
echo "<input type='checkbox'id='achievement' name='IsChecked[]' value = '1'>" ;
echo "<input name='AchievementId[]' type='hidden' value='".$row['AchievementId']."'></td>";
echo "<td class='big'>".$row["AchievementName"]."</td>";
}
}
echo '</table>';
}
正如您所看到的,我尝试通过两个变量,即AchievementId,和IsChecked值(可以是0或1),在保存这些信息时发生问题。我在数据库中设置了一个充当中介的表( Achievement_User,只有3个条目,即UserId、AchievementId和IsChecked值)。
我的开始是通过下面的代码与复选框一起发布的成就来完成所有的成就。
if(isset($_POST['AchievementSaveData']))
{
// print_r($_POST);
$checkbox = isset($_POST['IsChecked']) ? $_POST['IsChecked'] : array();
$Achievement = isset($_POST['AchievementId']) ? $_POST['AchievementId'] : array();
foreach (array_combine($checkbox, $Achievement) as $IsChecked => $AchievementId){
$sql="SELECT * FROM Achievement_User WHERE UserId='".$UserId."' AND AchievementId ='".$AchievementId."'" ;
$result=mysqli_query($sql);
$count=mysqli_num_rows($result);
if ($count==1){
echo 'Update datarow with UserID '.$UserId.', AchievementId '. $AchievementId.' and with a value of '.$IsChecked;' <br>';
}
else{
echo 'Create datarow with UserID '.$UserId.', AchievementId '. $AchievementId.' and with a value of '.$IsChecked.' <br>';
}
}
}
现在的问题在于,当我选中一个复选框时,数组就会增加。它所做的40个主菜(也就是发布了多少个成就is,当选中所有东西都是默认的),它为每个选中的值创建了一个额外的数组空间,这使得我的比较毫无用处,因为我得到了一个错误,即数组可以组合。
有什么方法可以使我的成就数组与我的IsChecked值相匹配呢?
编辑:在旁边,当我试图合并数组时,整个foreach循环似乎不再工作了(即使它们在值上匹配)。因此,我的想法是,也许有一种方式,我可以张贴从IsChecked的数组,已经有价值的AchievementId附加到它。如果是这样的话,我又如何解决这个问题呢?
发布于 2014-02-12 02:48:43
为什么不直接把成绩的值交给复选框,去掉隐藏的输入呢?
<input type='checkbox' id='achievement' name='IsChecked[]' value = '<?php echo $row['AchievementId'];?>'>
然后在php中
foreach ($IsChecked as $AchievementId){
https://stackoverflow.com/questions/21724994
复制相似问题