复制框在发布到数据库时在php中循环

时间:2014-02-12 10:20:22

标签: php html arrays checkbox foreach

我正在建立一个在复选框的基础上工作的成就系统(因为它没有与帖子相关)然而,我碰到了一个问题,我似乎无法绕过它,因为我不是那样的方便的循环和数组。

enter image description here

好的,所以我制作了一组复选框,这些复选框已发布在此页面上,并且适当填充,如下面的代码,可帮助我填写页面的这一部分。

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的值的数组。如果是这样,我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

为什么不给复选框提供成就的价值并摆脱隐藏的输入

<input type='checkbox' id='achievement' name='IsChecked[]' value = '<?php echo $row['AchievementId'];?>'>

然后在php

 foreach ($IsChecked as $AchievementId){