2017-03-17 139 views
0

我有一個Android應用程序,用於在PHP數據庫中存儲用戶數據。我需要根據日期進行一些驗證。MySQL數據庫爲每個用戶預定義一個日期。每當用戶在當天插入兩次數據時,日期會增加1天。如果日期超過當前日期,則會顯示消息「用戶已經提交了當天的數據」。PHP DateTime()函數無法正常工作

我的PHP文件是:

<?php 
    require "conn.php"; 
    $user_mobile = $_POST["mobile_num"]; 
    $user_pass = $_POST["password"]; 


    $mysql_qry = "select * from employee_data where mobile like '$user_mobile' and password like '$user_pass';"; 
    $result = mysqli_query($conn,$mysql_qry); 
    if(mysqli_num_rows($result) > 0) { 
     $row = mysqli_fetch_assoc($result); 
     $name= $row["name"]; 
     $_POST['user'] = $name; 
     $last_updated = $row["last_updated_date"]; 
     $_POST['user'] = $name; 
     $_POST['date'] = $last_updated; 
     echo "Login successful. Welcome_" .$name; 
     echo "_Date:" .$last_updated; 

    $now = new DateTime("Asia/Kolkata"); 
    $n = ($now->format('Y-m-d')); 


    if(($last_updated > $n)) { 
     echo "exceeded"; 
     } 

?> 

但正在發生的事情是,如果「$ LAST_UPDATED」(即正在改變每次日)是當前日期,那麼就不用if條件裏面去。因此,如果「$ last_updated」是今天的日期,則用戶獲得「用戶已經提交了當天的數據」的消息。我試着做一個「$ n」的回聲,它給出了當前的日期。所以,它不應該去if條件,因爲($ last_updated == $ n)。但它在if條件(if($ last_updated == $ n))內進行。我不知道爲什麼會發生這種情況。誰能幫我解決這個問題?

+0

您的代碼易受sql注入攻擊。請修復。 – Gordon

+0

什麼是'last_updated_date'字段數據類型? – hassan

回答

0

您的問題是,既然你們不守時在數據庫中,當你現在其中包括比較不同時間的日期,現在總是會大於您從數據庫中提取的日期。

數據庫時間2017-03-17變成2017-03-17 00:00:00 php時間。

當你生成PHP現在的時間將是2017年3月17日XX:XX:XX,這將永遠是比數據庫時間

$last_updated = new DateTime($row["last_updated_date"],new DateTimeZone("Asia/Kolkata")); 

    $today = new DateTime('now',new DateTimeZone("Asia/Kolkata")); //gets current date time 
    $today->setTime(0,0); // back to the beginning of the day 

    //echo $last_updated->getTimestamp . | . $today->getTimestamp; // for debugging purpose 
    if(($last_updated->getTimestamp >= $today->getTimestamp)) { 
    // note that I have used '>=' to allow the current date 

    } 

您也可以使用DateTime-> DIFF()函數更大。

參考:http://php.net/manual/en/class.datetime.php

1

你需要比較他們爲對象..嘗試這樣的事情..

$now = new DateTime("Asia/Kolkata"); 

if (new DateTime($last_updated) > $now) { 
    echo "exceeded"; 
} 

我不知道,如果你的時區設置正確的服務器上,但可以肯定,你可以做的一個以下以及..

$now = new DateTime('Asia/Kolkata'); 

if (new DateTime($last_updated, new DateTimeZone('Asia/Kolkata')) > $now) { 
    echo "exceeded"; 
} 

或者甚至可能破越好..

date_default_timezone_set('Asia/Kolkata'); 

$now = new DateTime('now'); 

if (new DateTime($last_updated) > $now) { 
    echo "exceeded"; 
} 
+0

這不起作用。其實$ last_updated只是date.Its格式爲2017-03-17.So此代碼不起作用。你可以讓我知道如何檢查只有約會的條件?這就是爲什麼我試圖用($ now-> format('Y-m-d'))來獲取日期。 – Pranami

+0

你需要刪除這行'$ n =($ now-> format('Y-m-d'));' – Rick

1

試圖改變自己的

$now = new DateTime("Asia/Kolkata"); 

到:

$now = new DateTime(null, new DateTimeZone('Asia/Kolkata'));