2013-07-09 47 views
0

我創建了一個動態生成的表單,目的是允許用戶記錄項目里程碑。用戶可以輸入里程碑的日期和描述,然後給出一個選項以添加一行以記錄另一個(請參閱此圖像以進行說明:https://dl.dropboxusercontent.com/u/11993667/milestones_ex.png)。我,但無法將其保存到數據庫(我是一個關於PHP的事情)。使用foreach提交動態生成的表單

的形式用下面的函數產生:

function create_milestones_form() { 
    global $wpdb; 

    $inc = array(
     'yes' => ($data['incorporated']==1)?'checked="checked"':'', 
     'no' => ($data['incorporated']!=1)?'checked="checked"':'', 
    ); 

    $site = array(
     'yes' => ($data['has']==1)?'checked="checked"':'', 
     'no' => ($data['incorporated']!=1)?'checked="checked"':'', 
    ); 

    return <<<EOHTML 
    <form method='post'> 

    <script type="text/javascript" src="http://upsmart.com/wp-content/plugins/upsmart_sitemanager/js/create_business_milestone.js"></script> 

    <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" /> 

    <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" /> 


    <TABLE id="dataTable" width="350px" border="1"> 
    <TR> 
     <TD><INPUT type="checkbox" name="chk[]"/></TD> 
     <TD> 
     <select name="month"> 
      <option value="1">January</option> 
      <option value="2">February</option> 
      <option value="3">March</option> 
      <option value="4">April</option> 
      <option value="5">May</option> 
      <option value="6">June</option> 
      <option value="7">July</option> 
      <option value="8">August</option> 
      <option value="9">September</option> 
      <option value="10">October</option> 
      <option value="11">November</option> 
      <option value="12">December</option> 
     </select> 
     <select name="day"> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      <option value="3">3</option> 
      <option value="4">4</option> 
      <option value="5">5</option> 
      <option value="6">6</option> 
      <option value="7">7</option> 
      <option value="8">8</option> 
      <option value="9">9</option> 
      <option value="10">10</option> 
      <option value="11">11</option> 
      <option value="12">12</option> 
      <option value="13">13</option> 
      <option value="14">14</option> 
      <option value="15">15</option> 
      <option value="16">16</option> 
      <option value="17">17</option> 
      <option value="18">18</option> 
      <option value="19">19</option> 
      <option value="20">20</option> 
      <option value="21">21</option> 
      <option value="22">22</option> 
      <option value="23">23</option> 
      <option value="24">24</option> 
      <option value="25">25</option> 
      <option value="26">26</option> 
      <option value="27">27</option> 
      <option value="28">28</option> 
      <option value="29">29</option> 
      <option value="30">30</option> 
      <option value="31">31</option> 
     </select> 
     <select name="year"> 
      <option value="2013">2013</option> 
      <option value="2012">2012</option> 
      <option value="2011">2011</option> 
      <option value="2010">2010</option> 
      <option value="2009">2009</option> 
      <option value="2008">2008</option> 
      <option value="2007">2007</option> 
      <option value="2006">2006</option> 
      <option value="2005">2005</option> 
      <option value="2004">2004</option> 
      <option value="2003">2003</option> 
      <option value="2002">2002</option> 
      <option value="2001">2001</option> 
      <option value="2000">2000</option> 
      <option value="1999">1999</option> 
      <option value="1998">1998</option> 
      <option value="1997">1997</option> 
      <option value="1996">1996</option> 
      <option value="1995">1995</option> 
      <option value="1994">1994</option> 
      <option value="1992">1992</option> 
      <option value="1991">1991</option> 
      <option value="1990">1990</option> 
     </select> 
     </TD> 
     <TD> <INPUT type="text" name="txt"/> </TD> 
     </TR> 
    </TABLE> 
    <input type='submit' value='Save'/> 
    </form> 
EOHTML; 
} 

一旦點擊保存,它是(或應該)使用下面的函數保存到數據庫:

function create_milestones_save() { 
    global $wpdb; 
    $result = $wpdb->query($wpdb->prepare("REPLACE INTO upsmart_milestones 
              (wordpress_id,month,day,year,description) 
              VALUES(%d,%d,%d,%d,%s)", 
              array(
               get_current_user_id(), 
               $_POST['month'], 
               $_POST['day'], 
               $_POST['year'], 
               $_POST['txt'], 
             ) 
    )); 

    if($result === false) return false; 
    return true; 
} 

所以情況是這樣的:只有一個里程碑,我可以保存而不會出現任何問題,但是我無法保存它以節省多個里程碑;這是有道理的,因爲我沒有循環任何變量。我猜我需要將每個變量(month,day,year和txt)作爲數組發送到create_milestones_save(),然後使用foreach循環將每個條目存儲在數據庫中。我只是不確定我將如何在PHP中編寫代碼。

非常感謝你提供任何幫助。

回答

0

與複選框爲chk []相同,輸入應該命名爲month [],day [],year []和txt []。 然後,例如$ _POST [「month」]將是一個包含所有里程碑的月份的數組。 你也應該給每個複選框一個唯一的值,例如一個越來越多的數字。

然後你就可以通過他們循環是這樣的:

<?php 
foreach ($_POST["chk"] as $chk_value) 
{ 

    $id = (int)$chk_value; // The position of the milestone in the form 

    $day = $_POST["day"][$id]; 
    $month = $_POST["month"][$id]; 
    $year = $_POST["year"][$id]; 
    $txt = $_POST["txt"][$id]; 

    // Execute query with data in $day, $month, $year and $txt 
} 
?> 

請注意,這個循環將只有通過選擇一個複選框里程碑循環。

+0

所以我需要做任何事情$ _POST [「月」]使其成爲一個數組?或者會簡單地改變月份到月份[]來照顧那個嗎? – neanderslob

+0

是的,每月更改[]會照顧到這一點。 –

+0

非常感謝。如果我使用'txt'作爲關鍵字,我可以跳過複選框編號嗎?基本上我只是使用複選框刪除。我可以保存可見的窗體中的所有行。我如何改變循環來完成這個? – neanderslob