2015-12-06 45 views
0

我正在尝试编写一个Web应用程序,让学生输入他们的时间表。例如:星期一的第一期是数学,星期一的第二期是英语,...星期二的第一期是历史,星期二的第二期是生物,...等。如何以html格式将多个变量发送到php?

所以我写这样一个表格:

<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] [句点]。

如果有人能帮助我,我将不胜感激。

+0

你所做的只是很好,除非你仔细看看不同的方式来创建变量名称。我建议看看'sprintf()'。检查文档。哦,你必须修复这些“字符”。您不能使用相同的字符串分隔字符串。 – arkascha

+0

“许多变数”是什么意思?你不能检索处理程序文件上的$ _POST吗? –

+0

@Bonatoc:很难形容。用户输入对应于期间和日期的63个变量。我已经写了一个循环,所以我不能写入输入字段的名称,比如subject_of_third_period_monday。有没有什么办法可以让php在表格中对$ period和$ day进行regconize? –

回答

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>'; 
      } 
    } 

?> 

它是安全的,它的工作原理。

+0

非常非常感谢,它确实有效。我爱堆栈溢出。如果可能,你能详细说明你使用的语法$ {something}吗?我不太了解变量名称的操作。这是程序员通常做的事,还是他们使用替代方法? –

+1

'$ {...}'是一个不寻常的构造,在许多其他脚本语言中都没有看到。它被称为“变量变量”。该语法使您能够声明一个变量名称,其中包含从其他变量的值派生的字符串。欲了解更多信息,请参阅:http://php.net/manual/en/language.variables.variable.php – Rounin

+0

@Rounin - 并非如此不寻常,因为它也可以在Javascript中完成。 –

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']成二维数组你。 (注意:我不作任何承诺,这是免费的语法错误。)

0

在表单处理程序,你可以通过这样所有发布领域循环:

foreach($_POST as $field => $value) 
{ 

} 

其中$领域将是输入标签名称$值是它的价值。 如果您有其他表单元素,您可以使用某种前缀来检查需要哪些表单,例如,如果字段名以'the_subject'开头,那么您知道它是动态添加的字段之一。

0

肯定的是,你已经做了回答:)的一部分 第一个问题:你是不是正确转义你的字符串: 这里是1另一种方式

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>'; 

好运。