2015-12-06 43 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>'; 

好運。