从可变长度二维数组发布数据
Posting data from variable length 2 dimensional array
我在 post 从二维数组读取数据并回显它们时遇到一些问题。
我看过很多关于多维数组的题目和教程,但是大多都是以定长数组为例。在我的例子中,数组的两个维度都是可变的。我正在做的项目是为不同年级的学生提供奖励。
示例:3 年级可能有 5 个奖项,每个奖项颁发给可变数量的学生。 A奖给5名学生,B奖给2名学生,依此类推。
同样,六年级可能有15个奖项等等。
有table个记录了哪个年级有哪个奖项以及每年要分配的奖项数量
我已经能够以一种形式(在 html/php 中)显示年级及其各自的奖项。但我拼命想弄清楚如何 post 来自二维数组的数据并回显它们(我的想法是将它们插入 tables 如果我可以回显它们)。
学生名单来自table(显示学生姓名但选择学生代码)
<?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;
}
以上解释的不是很清楚还请见谅。包括我写的代码。
任何建议和帮助将不胜感激,因为在此之后我可以睡个好觉..:)
您忘记在您的名称属性键中回显:
<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;
}
我在 post 从二维数组读取数据并回显它们时遇到一些问题。
我看过很多关于多维数组的题目和教程,但是大多都是以定长数组为例。在我的例子中,数组的两个维度都是可变的。我正在做的项目是为不同年级的学生提供奖励。
示例:3 年级可能有 5 个奖项,每个奖项颁发给可变数量的学生。 A奖给5名学生,B奖给2名学生,依此类推。 同样,六年级可能有15个奖项等等。
有table个记录了哪个年级有哪个奖项以及每年要分配的奖项数量
我已经能够以一种形式(在 html/php 中)显示年级及其各自的奖项。但我拼命想弄清楚如何 post 来自二维数组的数据并回显它们(我的想法是将它们插入 tables 如果我可以回显它们)。
学生名单来自table(显示学生姓名但选择学生代码)
<?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;
}
以上解释的不是很清楚还请见谅。包括我写的代码。
任何建议和帮助将不胜感激,因为在此之后我可以睡个好觉..:)
您忘记在您的名称属性键中回显:
<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;
}