2017-03-26 4 views
0

2つを比較して、datesを比較して、10分が経過しているかどうかを確認します。PHP 10分経過したかどうかチェックする

これは私が持っているコードですが、どうやってそれを行うのか分かりません。

私のテーブル(timestamp、例:2017-03-26 22:33:45として保存されています)から最初の日付を取得し、nowであるtimeと比較したいと思います。

$sql = "SELECT saved_time from table1 where email = '$email'"; 
$stmt = $conn->prepare($sql); 
$stmt->execute(); 
while($row = $stmt->fetch()) { 
    $savedTime = $row[0]; 
} 
$now = time(); 
if (/*10 minutes has passed between saved time and now*/) { 
    echo "Your account is unlocked"; 
} else if (/*10 minutes hasn't passed*/) { 
    echo "Your account is locked"; 
} 
+1

チェックところで –

+2

($今<$ savedTime)場合。準備/実行を使用しています。 「本当の」準備文を使わないのはなぜですか?あなたは今もSQLインジェクションを開いたままにしています。 –

+0

'TIMESTAMPDIFF(MINUTE、.saved_time、NOW())> 10'のように、mysqlの解法が適切であれば' select * from table T。 – siddiq

答えて

3

このコードを試してみてください。

$timezone = "Asia/Kolkata";// Select Timezone as of your Preference or MySQL Server Timezone 
    date_default_timezone_set($timezone); 
    $sql = "SELECT saved_time from table1 where email = :email"; 
    $stmt = $conn->prepare($sql); 
    $stmt->execute(array(':email' => $email)); 
    while($row = $stmt->fetch()) { 
     $savedTime = $row[0]; 
    } 

    // Uncomment below Line if $savedTime is in MySQL DATETIME Format 
    // $savedTime = strtotime($savedTime); 
    $now = time(); 

    if (round(($now - $savedTime)/60,2) >= 10){ 
     echo "Your account is unlocked"; 
    } elseif (round(($now - $savedTime)/60,2) < 10){ 
     echo "Your account is locked"; 
    } 
+0

* "'ここでemail = '$ email'' "* - screams sql injection btw。 –

+0

@Fred -ii- suggetion ...ありがとうございました。上記のSQLインジェクション回避コードを更新しました。 –

+0

私はそれが動作すると仮定しているコードを見て、+1セキュリティを追加します。 – Xorifelse

0
if $now = time(); #(this will generate a timestamp) 

$savedTime = $row[0];は、MySQLの日付フィールドであると仮定すると、あなたは

$savedTimeTimestamp= date("Y-m-d H:i:s", $savedTime); 

を行うことができます...今10時間60秒は10分ですので、

if ($now > ($savedTimeTimestamp+600)) 

を行う必要がありますジョブ

0

mysql solあなたは、PHPでそれを必要とする場合utionは私が

$diff = $curr_time-$saved_time; 
if($diff > (10*60)) 

PHPで、その後の更新

$db_time = $row['saved_time'];//as you have stored in timestamp already 
$curr_time = strtotime(date('Y-m-d H:i:s')); 
$diff = round(abs($db_time - $curr_time)/60,2); 
if($diff > 10) 

そして、その後、あなたのため

​​

select * from table T where TIMESTAMPDIFF(MINUTE,.saved_time,NOW()) > 10 

結構です午前これがうまくいくかどうか確かめてください。しかしただのアイデア。

+0

$ diffは120分になります – Krillex

+0

mysqlタイムスタンプとPHPで選択されたタイムゾーンとのタイムゾーンの違いがあります。 'echo date( 'Y-m-d'、$ db_time);'を印刷してみてください。違いを見つけることができます。 mysqlを使う方が良いでしょう。 – siddiq

+0

なんらかの理由で私はそれを行うときに1970-01-01を得ます – Krillex

関連する問題