Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP时间间隔至少为十天_Php_Mysql_Json_Pdo - Fatal编程技术网

PHP时间间隔至少为十天

PHP时间间隔至少为十天,php,mysql,json,pdo,Php,Mysql,Json,Pdo,这样做的目的是查询用户的最新配置文件更改的最新时间戳。如果在他们尝试更新时不足十天,他们将被拒绝。不管我怎么做,我都不能正确地得到10天的差异逻辑$戳记在数据库中是Y-m-d日期格式 <?php ini_set('display_errors',1); $json=$_POST['user']; $json=str_replace('\\','',$json); $user=json_decode($json); $pdo=new PDO('mysql://hostname=loc

这样做的目的是查询用户的最新配置文件更改的最新时间戳。如果在他们尝试更新时不足十天,他们将被拒绝。不管我怎么做,我都不能正确地得到10天的差异逻辑$戳记在数据库中是Y-m-d日期格式

    <?php
ini_set('display_errors',1);
$json=$_POST['user'];
$json=str_replace('\\','',$json);
$user=json_decode($json);
$pdo=new PDO('mysql://hostname=localhost;dbname=database', 'user', 'password');
$update = $pdo->prepare("update  `accounts` set  stamp=CURDATE(),`title`='{$user->title}' ,`radio_hanlde`='{$user->radio_handle}' , `carrier`='{$user->carrier}' ,`hometown`='{$user->hometown}'  WHERE user_id='{$user->user_id}' AND DATE_DIFF(CURRDATE(),stamp) > 10");
$update->execute();
if ($update->rowCount() != 0 ){
     echo json_encode(array('success'=>'1','message'=>'Your profile has been updated successfully!'));} 
     else {echo json_encode(array('success'=>'0','message'=>'It has been less than ten days since your latest profile change. You will have to wait!'));}
?>
 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
$today=date_创建(date('Y-m-d'));
$date2=创建日期(“2013-12-12”);
$diff=date_diff($today,$date2);

如果($diff函数strotime以秒为单位返回时间戳,那么您可以像下面这样非常简单地获得以秒为单位的diff

$secs = strtotime('now') - strtotime($stamp);
$days = $secs / 60 / 60 / 24;
if($days <= 10) {
    ..your code...
}
 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
$secs=strottime('now')-strottime($stamp);
$days=$secs/60/60/24;
如果($天)
使用此选项进行查询

 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
使用函数以秒为单位获取当前时间(Unix时间戳),并将任何日期格式转换为时间戳。以下是示例的重构代码:

 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
<?php

ini_set('display_errors', 1);

$messages = [
    'error_invalid_json' => 'Error. Invalid json',
    'error_account_not_found' => 'Error. Account is not found',
    'success' => 'Your profile has been updated successfully!',
    'wait_1_day' => 'It has been less than ten days since your latest profile change. You must wait until tomorrow!',
    'wait_n_days' => 'It has been less than ten days since your latest profile change. You have %s more to go!',
];

function message($message, $success = true)
{
    echo json_encode([
        'success' => ($success) ? 1 : 0,
        'message' => $message,
    ]);

    exit;
}

// get and validate incoming data
$json = $_POST['user'];
$json = str_replace('\\', '', $json);
if (empty($json)) {
    message($messages['error_invalid_json'], false);
}
try {
    $user = json_decode($json);
} catch (\Exception $e) {
    message($messages['error_invalid_json'], false);
}
if (empty($user->user_id)) {
    message($messages['error_invalid_json'], false);
}

// find last modified date
$pdo = new PDO('mysql://mydb', 'a_user', 'password');
$query = $pdo->query("Select stamp FROM accounts WHERE user_id='{$user->user_id}' LIMIT 1");
$stamp = $query->fetchAll(PDO::FETCH_ASSOC);
if (empty($stamp)) {
    message($messages['error_account_not_found']);
}

// calculcate when user is allowed to change profile
$daysShouldPassBeforeEdit = 10;
$allowEditAfter = ($stamp[1]) ? strtotime($stamp[1]) + $daysShouldPassBeforeEdit * 86400 : time(); // if empty `stamp` then user have not edited and allow to edit now

if (time() < $allowEditAfter) {
    $daysLeftBeforeAllowEdit = ceil(($allowEditAfter - time()) / 86400);

    if ($daysLeftBeforeAllowEdit == 1) {
        message($messages['wait_1_day'], false);
    } else {
        message(sprintf($messages['wait_n_days'], $daysLeftBeforeAllowEdit), false);
    }
}

// save changes
$stamp = date("Y-m-d");
$sql = "update  `accounts` set  stamp='$stamp',`title`='{$user->title}' ,`radio_hanlde`='{$user->radio_handle}' , `carrier`='{$user->carrier}' ,`hometown`='{$user->hometown}'  where user_id='{$user->user_id}'";
$pdo->exec($sql);
message($messages['success']);

PHP的mysqli和pdoapi具有检测更新是否影响任何行的函数(分别是mysqli_impact_rows()和PDOStatement::rowCount()),因此您几乎可以扔掉所有代码

 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
您只需更新给定用户符合条件的所有行,例如:

 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
UPDATE accounts
   SET stamp = '$stamp'
     , title = '{$user->title}' 
     , radio_hanlde [SIC] ='{$user->radio_handle}' 
     , carrier  = '{$user->carrier}' 
     , hometown = '{$user->hometown}'
 WHERE user_id  = '{$user->user_id}'
   AND DATEDIFF(CURDATE(),stamp) > 10;
如果PDOStatement::rowCount()返回的值不是0,则打印消息1,否则打印消息2

 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
根据以下示例,由操作员组装

 "(().data=\"".$data."\" and ()>=\"".$intervaloTempo."\"" )"

                                    $query = sprintf("select stamp from accounts where user_id='{$user->user_id}, mysqli_real_escape_string($link, $_SESSION['cliente_id']));
                                    $result = mysqli_query($link, $query);
                                    if (!$result) {
                                        die("Query error: " . mysqli_error($link));
                                        //con_close();
                                    }
$pdo->exec("
UPDATE accounts 
   SET stamp = '$stamp'
     , title = '{$user->title}'
     , radio_hanlde ='{$user->radio_handle}'
     , carrier = '{$user->carrier}'
     , hometown = '{$user->hometown}' 
 WHERE user_id = '{$user->user_id}' 
   AND DATEDIFF(CURDATE(),stamp) > 10
 "); 

if (PDOStatement::rowCount() < 1 ){
     echo json_encode(array('success'=>'0','message'=>'It has been less than ten days since your latest profile change. You will have to wait!'));
 } else {
     echo json_encode(array('success'=>'1','message'=>'Your profile has been updated successfully!'));
 }
$pdo->exec(“
更新帐户
SET stamp=“$stamp”
,title='{$user->title}'
,radio_hanlde='{$user->radio_handle}'
,carrier='{$user->carrier}'
,homely='{$user->homely}'
其中user_id=“{$user->user_id}”
和DATEDIFF(CURDATE(),stamp)>10
"); 
if(PDOStatement::rowCount()<1){
echo json_encode(数组('success'=>'0','message'=>'您最近的配置文件更改已经不到十天了。您必须等待!');
}否则{
echo json_encode(数组('success'=>'1','message'=>'您的配置文件已成功更新!');
}

从复习开始,谢谢你的回答,为了改进你的答案,考虑不仅要提供代码,还要考虑你的代码为什么和你所做的事情。例如什么是<代码> StotoTime/Code >函数ECC。我正在尝试这个DATEYDIFF(DATE1,DATE2)。打电话,但我似乎对date对象有一些问题。我已经绞尽脑汁想了好几天,似乎看不到错误。Danyal你可以查看我编辑的代码帖子,看看$wait返回10的地方会发生什么。这应该是个问题。打印两个日期,看看值是否正确..date_create($stamp[1]);特别是这个值$stamp[0]返回“Array”,$stamp[1]返回“”。我不明白。当我在sql workbench中查看时,它包含“2016-23-01”并且字段是非空日期。我在这里可能做错了什么?这是我的查询$query=$pdo->query(“从channel1_db.accounts中选择stamp,其中user_id='{$user->user_id}'));$stam=$query->fetchAll(PDO::FETCH_ASSOC);您做错了@Robert…迭代戳并获取一个变量..在foreach循环中分配值..并使用该变量comparison@RobertGoodrick这看起来是对的,但请看准备好的声明。好的,斯塔贝里!这就是我要说的!非常感谢你。是的,它与if有问题(PDOStatement::rowCount()>0){echo json_encode(数组('success'=>'0','message'=>'距离您最近的配置文件更改还不到十天。您必须等待!');}否则{echo json_encode(数组('success'=>'1','message=>您的配置文件已成功更新!');}不确定这些可能是什么-如果“>0”,为什么“<1”会起作用没有-但我不是一个PHP代码我也不是。我有一个设置了我的应用程序的PHP端,然后他消失了。但我慢慢地添加了一些函数和添加。是的>0会更合适。问题是我在这两种情况下都没有收到else回音好的。愚蠢的问题我知道,但请帮我解决这个问题是最后一笔交易。使用Limit 1 stamp[0]可以将我在另一个数组中寻找的值返回为{“stamp”:“2016-01-29”}。如何简单地提取日期?这就是我现在需要的全部内容。$stamp[0]->stamp..?????
$stamp[0]['stamp']