我正在建立一个在复选框的基础上工作的成就系统(因为它没有与帖子相关)然而,我碰到了一个问题,我似乎无法绕过它,因为我不是那样的方便的循环和数组。
好的,所以我制作了一组复选框,这些复选框已发布在此页面上,并且适当填充,如下面的代码,可帮助我填写页面的这一部分。
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>';
}
如您所见,我尝试拍摄2个变量,即AchievementId和IsChecked值(可以是0或1)当我要保存此信息时会出现问题。我在数据库中设置了一个充当中介的表(The Achievement_User,只有3个条目,分别是UserId,AchievementId和IsChecked Value)
我的开始是,我通过下面的代码与复选框一起发布了与AchievementId一起发布的所有成就。
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个主题(这是发布了多少个AchievementId,并且在检查时一切都是默认值)它为每个选中的值创建了一个额外的数组空间,这使得我的比较无用,因为我得到一个错误,然后是数组可以组合。
有什么方法可以解决它会使我的数字成就与我的IsChecked价值相匹配吗?
编辑:接下来,当我尝试合并数组时,整个foreach循环似乎不再起作用(即使它们在值中匹配)。所以我的想法可能是有一种方法可以从IsChecked发布已经附加了AchievementId的值的数组。如果是这样,我怎么能解决这个问题?
答案 0 :(得分:1)
为什么不给复选框提供成就的价值并摆脱隐藏的输入
<input type='checkbox' id='achievement' name='IsChecked[]' value = '<?php echo $row['AchievementId'];?>'>
然后在php
foreach ($IsChecked as $AchievementId){