2017-03-17 142 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'));