【问题标题】:Checkbox looping in php while posting to database发布到数据库时复选框在php中循环
【发布时间】: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


    【解决方案1】:

    你为什么不把成就的价值给复选框,去掉隐藏的输入

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

    然后在php中

     foreach ($IsChecked as $AchievementId){       
    

    【讨论】:

    • 问题在于我无法定义未检查的方法(稍后更新语句,当我有一些成就时)。因此,我将 1 和 0 发布到数据库中。我想我通过更改 IsChecked[] 并在 IsChecked[] 中插入成就中的 ID 解决了这个问题。至少,现在我需要确定我是否实际上也可以使用数组中的 Key 来定义其中的变量,这可能会。已经有一段时间了,我现在对 PHP 很生疏。
    • 那些没有被检查的将不会到达,所以如果没有检查你的 $isChecked 数组将是空的,唯一的区别是在被检查的地方得到 1 的地方,你'将获得成就ID
    • 嗯,你说得很好,我会看看如何解决这个问题。我只需要以这种方式使用额外的 if else 语句更改更新查询,但我明白你的意思。
    • Jep 确实成功了,谢谢。这就是我在问题中需要的洞察力!
    • 在所有情况下都在考虑它,因为 ischecked 数组只包含选中的复选框,因为成就 ID 数组包含所有隐藏的输入,所以你无法做到已将两个数组映射在一起。很高兴知道它有效:)
    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2013-07-15
    • 2019-05-29
    • 2017-09-01
    相关资源
    最近更新 更多