2010-06-23 97 views

回答

11

你可以使用一個隱藏字段,並建立其價值的onsubmit,但如果我是你,我會簡單地使用數組表示法之名屬性,和內爆與陣列「 - 」作爲膠:這樣

<select name="date[year]"> 
... 
<select name="date[month]"> 
... 
<select name="date[day]"> 
... 

PHP:

$date = implode('-', $_POST['date']) 
//validate date format here 
+0

我遇到同樣的需求,因爲原來的海報,但我回避接觸PHP腳本作爲一個其作用CMS。我將如何去建立一個隱藏的領域onSubmit? – snlan 2014-09-06 16:22:40

+0

在窗體中創建一個隱藏的輸入,其中「date」爲'name'屬性,然後編寫一個js函數,獲取三個選擇的值,並將其注入到隱藏輸入的value屬性中,最後返回true,然後將其綁定到表單的提交事件。 – greg0ire 2014-09-06 19:32:37

1

你可以創建一個隱藏字段,以及表單提交之前填寫它

1

分別收集該數據的點是確保其格式是正確。如果你提交一個完整的日期到你的php腳本中,php腳本的驗證選項會涉及更多。最好提交3個表單域,以簡單的方式驗證它們,然後在php中創建日期。

如果你堅持提交一個完整的日期,一個隱藏的字段(如@kgb所說的)可能是最簡單的方法。

5

將它結合到您的PHP腳本中,沒有理由爲此添加對JavaScript的依賴。 Build on things that work。此外,如果您在服務器上執行此操作,則不會受到潛在的惡意或意外干擾。

+0

那麼,該項目已經(必然)與JavaScript相關,並且沒有辦法繞過它。 – 2010-06-23 15:49:29

0

你可以使用JavaScript或PHP本身來做到這一點,但沒有本地的xhtml手段,這是可能的(據我所知)。

如果您使用javascript來實現此目的(使用隱藏字段將數據提交給您的php腳本),您仍然必須在使用php處理或將數據插入數據庫之前驗證服務器端的字段。出於這個原因,我將跳過javascript選項,並直接使用我將使用的php方法。

我假設的形式DD白天,毫米爲一個月,YYYY爲一年的數值數據:

$day = $_POST['day']; // assume 23 
$month = $_POST['month']; // assume 06 
$year = $_POST['year']; // assume 2010 

$mysql_date_format = $year . "-" . $month . "-" . $day; // should result in 2010-06-23 

使用$mysql_date_format在您的腳本(S)根據您的需要。

2

如果你想這樣做,我建議你採取以下步驟:

  1. 寫你的HTML頁面,這樣即使沒有JS的東西意義 - 有一個正常的<input type="text" name="wtv" />有指示預期的格式YYYY-MM-DD的消息。
  2. 然後添加JavaScript使<input type="text" name="wtv" />成爲type="hidden";還添加了三個<select>元素 - 一個用於一天,一個月和一年。不要給這些<select>元素name屬性。
  3. 您需要一些JS來確保當用戶選擇不同的月份時,不會出現不可能的日期;所以如果我在幾個月中選擇「二月」,那麼過去28天不應該有空;但如果這是一個閏年......
  4. 向這三個<select>元素添加一個onchange事件處理程序,以便修改它們時,可以更改原始<input type="hidden" name="wtv" />的值以反映所選值。

當窗體的就是提交,因爲<select>元素沒有name屬性的信息將不會被髮送到服務器,但是你的隱藏<input />確實有一個名字,所以它會被髮送,格式爲一個約會。

我以前寫過一個這樣的小工具...我會嘗試獲取一個演示頁面並鏈接到它。

+0

不要擔心JS支持。該應用需要JS開啓。 – 2010-06-23 15:51:15

2

如果您執行以下操作,您可以得到您正在查找的結果。

<form method="post"> 
    <select name="date[]" id="year"> 
     <option>2010</option> 
     <option>2011</option> 
    </select> 
    <select name="date[]" id="month"> 
     <option>8</option> 
     <option>9</option> 
    </select> 
    <select name="date[]" id="day"> 
     <option>21</option> 
     <option>22</option> 
    </select> 
    <input type="submit"> 
</form> 

所得$_POST VAR持有以下

Array 
(
    [date] => Array 
     (
      [0] => 2011 
      [1] => 9 
      [2] => 22 
     ) 
) 

然後,所有你需要做的是$date = implode('-', $_POST['date']);

+0

好主意!但是,我需要在一個頁面上添加一堆這樣的內容,所以我需要明確指定索引:'date [0] []','date [1] []'等等,它。 – 2010-06-23 15:29:50

0

,我從你原來的職位注意到,您使用的是Datepicker()的jQuery插件來獲得首先是日期。爲什麼不把default date format設置爲'yy-mm-dd'

如果您想驗證當它到達PHP格式,請使用

date('Y-m-d', strtotime($_POST['date'])); 
+0

不,我*不*使用任何插件。除此之外,我在看這個的原因是因爲Safari無法正確解析YY-MM-DD或YYYY-MM-DD。 – 2010-06-23 16:19:33

+0

我推測你的原因是你提到這是後續問題,你在詢問Datepicker插件。我對這種混亂表示抱歉。此外,作爲單挑,我發現上週IE瀏覽器在日期上有困難,如果這個月是數值(2010-06-23與2010年6月23日)。 – Joseph 2010-06-23 19:37:36