我正在尝试编写一个学生输入时间表的网络应用程序。例如:周一的第一个周期是数学,周一的第二个周期是英语,...周二的第一个周期是历史,周二的第二个周期是生物学,...等等。
所以我写了一个这样的表格:
<form method="post" action="timetable_handling.php">
<?php
for ($period=1;$period<=9;$period++)
{
echo "<tr>";
for ($day=1;$day<=7;$day++)
{
echo "<td><input name="the_subject_of_the_nth_$period_on_$day" type="text"></td></tr>";
//the problem is here
}
}
?>
</form>
所以我的问题是,有没有办法将许多变量传递给另一个php文件来处理而不必手动明确地写出它的名字?
编辑1:我的意思是无论如何都要对名称中的句点和日期信息进行编码,这样当它发送到timetable_handling.php时我可以循环遍历它以将其保存到sql数据库中。类似数组$ subject [day] [period]。
如果有人能帮助我,我将不胜感激。
答案 0 :(得分:0)
是。如果格式化变量名称,如
for ($day=1;$day<=7;$day++)
{ ?>
<td><input name="subject['<?= $period ?>'][<?= $day ?>]" type="text"></td></tr>
//the problem is here
<?php }
PHP会将$_POST['subject']
转换为2D数组。 (注意我不承诺这没有语法错误。)
答案 1 :(得分:0)
在表单处理程序中,您可以遍历所有已发布的字段,如下所示:
foreach($_POST as $field => $value)
{
}
其中$ field是输入标记名称,$ value是值。 如果您有其他表单元素,您可以使用某种前缀检查您需要哪些表单元素,例如,如果字段名称以'the_subject'开头,则您知道它是动态添加的字段之一。
答案 2 :(得分:0)
当然,你已经做了部分答案:) 第一个问题:你没有正确地转义你的字符串: 这是另一种方式
echo '<td><input name="'.$period.'_on_'.$day.'" type="text"></td></tr>';
至于处理帖子,这里是你可以做的。您可能需要调整它以获得确切的预期结果。但是你在谈论多维数组。
if (isset($_POST)){
$something=array();
foreach ($_POST as $single=>$value)
{
array_push($something, array('period_'.substr($single,0,1) => array('day_'.substr($single,-1)=>$value)));
}
}
echo '<pre>'.print_r($something,true).'</pre>';
祝你好运。
答案 3 :(得分:0)
从时间表数据录入页面开始:
<form method="post" action="timetable_handling.php">
<table>
<?php
for ($period=1; $period<=9; $period++)
{
echo '<tr>';
for ($day=1; $day<=7; $day++)
{
echo '<td><input name="subject_of_period_'.$period.'_on_day_'.$day.'" type="text"></td>';
//the problem is here
}
echo '</tr>';
}
?>
</table>
<input type="submit" value="Submit Form" />
</form>
然后在timetable_handling.php
:
<?php
for ($day=1; $day<=7; $day++)
{
for ($period=1; $period<=9; $period++ )
{
${'subject_of_period_'.$period.'_on_day_'.$day} = htmlspecialchars($_POST['subject_of_period_'.$period.'_on_day_'.$day],ENT_QUOTES);
echo '<p>Subject of Period '.$period.' on Day '.$day.' is '.${'subject_of_period_'.$period.'_on_day_'.$day}.'</p>';
}
}
?>
它很安全且有效。