【问题标题】:Posting data from variable length 2 dimensional array从可变长度二维数组发布数据
【发布时间】:2018-05-06 23:49:14
【问题描述】:

我在从二维数组发布数据并回显它们时遇到了一些问题。

我已经阅读了几个关于多维数组的主题和教程,但其中大多数都使用固定长度的数组作为示例。在我的情况下,数组的两个维度都是可变的。我正在参与的项目是为不同年级的学生提供奖励。

示例:3 年级可能有 5 个奖项,每个奖项颁发给不同数量的学生。 5名学生获得A奖,2名学生获得B奖,依此类推。 同样,第 6 年可能有 15 个奖项等等。

有表格记录了每个年级的所有奖项以及每年分配的奖项数量。

我已经能够以一种形式(html/php)显示年级和他们各自的奖项。但我拼命想弄清楚如何从二维数组中发布数据并回显它们(如果我能回显它们,我的想法是将它们插入表中)。

学生列表来自表格(显示学生姓名但选择学生代码)

<?php
    include 'db_connect.php';
    $query = mysqli_query($conn, "SELECT a.awardcode, a.year_grp, a.awardqty, b.awardname FROM awardallocation AS a INNER JOIN award AS b
        ON a.awardcode = b.awardcode
        WHERE a.year_grp = '$level' AND b.awardstatus != '0' ORDER BY b.awardname ASC ");

    $row = mysqli_num_rows($query);

    if($row > 0) {

        while ($result = mysqli_fetch_assoc($query)){
            $awardname = trim($result['awardname']);
            $awardcode = trim($result['awardcode']);
            $awardqty  = trim($result['awardqty']);
?>  
            <table>
              <tr>
                <th>Award Name: <?php echo $awardname; ?></th>          
              </tr>

              <tr style="background-color:#FFF9C4">
                    <?php
                    for($i = 0; $i < $awardqty; $i++ ){
                        ?>
                    <td>                
                        <select name="stud_code[$awardcode][$i]">
                            <option disabled selected value> -- Select Student -- </option>
                            <?php
//                          include 'db_connect.php';
                            $sql = mysqli_query($conn, "SELECT stud_code, surname, preferred_name FROM student WHERE year_grp = '$level' ORDER BY surname ASC ");
                            while ($row1 = mysqli_fetch_assoc($sql)){
                                $name = trim($row1['surname']).', '.trim($row1['preferred_name']);
                                echo '<option value = " '.$row1['stud_code'].'"> '.$name.' </option>';
                            } 
                            ?> 
                        </select>   
                    </td>
                    <?php } ?>  
              </tr>

            </table>
<?php           
        }
    }
?>      
        <table>
            <tr>
                <td><lable>Lock data to prevent changes in future?</lable><input type="checkbox" name="lock" value="1"/></td>
            </tr>
        </table>    
            <div class="button-section">            
                <input id="save_button" type="submit" name="submit" value="Save Selection"> 
                <input id="exit_button" type="submit" name="exit" value="Exit"  onclick="window.history.go(-1); return false;">
            </div>  
    </form> 
    </div> 
</body>

<?php

if(isset($_POST['submit'])) {

for ($row=1; $row<=count($_POST ['stud_code["awardcode"]']); $row++){   
    echo $_POST["awardcode"];
        for ($col = 0; $col < 3; $col++){
//      echo("<li>".$_POST['stud_code']['awardcode'][$i]."</li>");  
//$student = $_POST['stud_code[$awardcode][$i]'];

}
}
$lock = (isset($_POST['$lock']) ? $_POST['$lock'] : '0');       
$next_year = date("Y")+1;

}

如果上面的解释不是很清楚,请见谅。包括我写的代码。

任何建议和帮助都将受到高度赞赏,因为在此之后我可以睡个好觉.. :)

【问题讨论】:

  • 你需要向我们展示一个数组是什么样子的例子(做一个var_dump($_POST)),预期的结果应该是什么以及你尝试了什么。删除任何与手头问题没有直接关系的代码。
  • 您在学生代码值中放置了一个前导空格。这就是你修剪所有东西的原因吗?

标签: php multidimensional-array variable-length-array


【解决方案1】:

您忘记在名称属性键中回显:

<select name="stud_code[<?=$awardcode?>][<?=$i?>]">

我建议将名称更改为 Award_allocations 之类的名称。

<select name="award_allocations[<?=$awardcode?>][<?=$i?>]">

转储 $_POST 以检查它是否符合您的要求。您可以像这样遍历分配:

if(isset($_POST['submit']))
{
    foreach($_POST['award_allocations'] as $award_code => $student_codes) {
        printf("Award code: %s allocated to Student codes: %s\n",
            $award_code,
            implode(', ', $student_codes)
        );
    }
    $lock = isset($_POST['lock']) ? true : false;
}

【讨论】:

  • 嗨,Progrock,效果很好。谢谢一吨。在这种情况下,我可以使用 INSERT 查询替换 foreach 循环中的 printf 吗?类似于: $query = mysqli_query($conn, "INSERT INTO awardwinner (awardcode, stud_code) VALUES('$award_code', '$student_codes'");
  • 我不知道你的数据库格式。您必须对 student_codes 做一些事情,因为它们是数组格式。
  • 嗨,Progrock,我设法将数据插入到表中。谢谢你的线索。如果它是一个 3 维数组,你能展示一下方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
相关资源
最近更新 更多