2017-07-18 218 views
0

創建一個PHP輸入形式POST日期,SQL查詢,在服務器端,我們有0000-00-00日期格式,但在本地,我們使用00/00/0000格式,怎樣才能把輸入表單來接受00/00/0000格式使用在SQL查詢中?現在我們強迫用戶把0000-00-00,它完美的作品,但很多人都抱怨這一點!PHP日期輸入格式

<form action="index.php" method="POST"> 
<cust>From: </cust><input name="start_date" placeholder=" 0000-00-00" /> 
<cust>Until: </cust><input name="end_date" placeholder=" 0000-00-00" /> 
<select name="RegioSelect" placeholder="Choose"><option></option> 
<?php 

$region = $_POST["RegioSelect"]; 
$fdate = $_POST["start_date"]; 
$edate = $_POST["end_date"]; 

if(empty($fdate)){ 
    $fdate = '2000-01-01'; 
    } else { 
    $fdate; 
    } 
if(empty($edate)){ 
    $edate = date("Y/m/d"); 
    } else { 
    $edate; 
    } 

我們正在考慮在服務器端進行轉換,但在這種情況下,我們不能使用日期來比較日期範圍。我們將它們轉換獲取用戶的信息,具體如下:

$new_fdate = strtotime($fdate); 
$FiDate = date('d/m/Y',$new_fdate); 

changed '$edate' to date("Y-m-d"); 
$new_edate = strtotime($edate); 
$EnDate = date('d/m/Y',$new_edate); 
?> 
<input type="submit" value="Select region"> 
</select></br> 
</form> 

<?php 

if(empty($region)){ 
    $region = ' '; 
} else {?><h4><?php echo $region; ?></h4><cust><b>From:</b><?php echo $FiDate; ?> <b>Until:</b> <?php echo $EnDate; ?></cust> 
<?php 
} 
?> 
+2

立即將表單值轉換爲ISO 8601'YYYY-MM-DD'並驗證其有效性。同樣,在爲用戶呈現數據時,請使用他們的* locale特定的*設置,該設置可能是也可能不是'YYYY/MM/DD'或其他全部內容。通常最好假定客戶端有一些任意格式,可以表示爲適合'strptime' /'strftime'的字符串,並且服務器*必須*使用'YYYY-MM-DD'來保持一致性。 – tadman

+1

儘可能使用PHP的[DateTime](http://php.net/manual/en/class.datetime.php)類可能會更容易。它有一個'createFromFormat'初始化方法,可以接受用戶輸入以及使用的格式('d/m/Y','Y-m-d'等)。當再次顯示時,您可以使用'format'方法輸出它。 – iainn

回答

0

解決了這個如下,現在它的工作原理對方身邊,輸入表單接受00/00/0000日期格式,但得到一次POSTED轉換到服務器端。

<form action="list.php" method="POST"> 
<cust>From: </cust><input name="start_date" placeholder=" 00/00/0000" /> 
<cust>Until: </cust><input name="end_date" placeholder=" 00/00/0000" /> 
<select name="RegioSelect" placeholder="Choose"><option></option> 
<?php 

$region = $_POST["RegioSelect"]; 
//ORIGINAL VARIABLES 
/*$fdate = $_POST["start_date"]; 
$edate = $_POST["end_date"]; 
*/ 
$fdate = date_format(date_create_from_format('d/m/Y', $_POST["start_date"]), 'Y-m-d'); 
$edate = date_format(date_create_from_format('d/m/Y', $_POST["end_date"]), 'Y-m-d'); 

if(empty($fdate)){ 
    $fdate = '01/01/2000'; 
    } else { 
    $fdate; 
    } 
if(empty($edate)){ 
    $edate = date("Y/m/d"); 
    } else { 
    $edate; 
    } 

因此,代碼告訴查詢選擇$fdate$edate之間的所有數據,如果$fdate是空取01/01/2000作爲第一次約會如果$edate是空取TODAY()結束日期。