【发布时间】:2014-03-10 14:31:17
【问题描述】:
目前我正在构建一个基于复选框的成就系统(因为它与帖子无关)但是,我遇到了一个问题,我似乎无法将头绕在它周围,因为我不是那样方便使用循环和数组。
好的,所以我制作了一组复选框,这些复选框发布在此页面上并适当填写,如下面的代码可以帮助我填写页面的该部分。
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)当我要保存此信息时会出现问题。我在数据库中设置了一个表作为中介(Achievement_User,只有 3 个条目,分别是 UserId、AchievementId 和 IsChecked 值)
我的开始是通过下面的代码通过与复选框一起发布的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 个主菜(这是发布的成就 ID 的数量,并且在选中所有内容时是默认设置),它为每个选中的值创建一个额外的数组空间,这使我的比较无用,因为我得到一个错误,然后数组可以组合。
我有什么办法可以解决它,让我的成就 ID 数组与我的 IsChecked 值匹配?
编辑:接下来,当我尝试合并数组时,整个 foreach 循环似乎不再起作用(即使它们的值匹配)。所以我的想法是,也许有一种方法可以从 IsChecked 发布数组,并且已经附加了 AchievementId 的值。如果是这样,我怎么能解决这个问题?
【问题讨论】:
标签: php html arrays checkbox foreach