2015-01-15 69 views
0

我在我的应用程序中有一个窗体。此表格由2个textfields type ='date'组成。现在,当给出两个日期时,这些日期被发送到一个PHP脚本,该脚本使用strtotime来转换日期。PHP循环通过数组和检查日期

PHP脚本连接到一个mySQL数据库,该数据库返回带请求的结果。我想遍历所有请求,并检查请求的日期是否在表单发送的两个日期之间。

现在会发生什么:

$sql = "SELECT * FROM Requests"; 
    $stmt = $conn->prepare($sql); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

if($result) { 

foreach ($result as $row){ 
    $return[]=array('employeeid'=>$row['employeeid'] 
        'id'=>$row['id'], 
        'startdate'=>$row['startdate'], 
        'enddate'=>$row['enddate'], 
        'type'=>$row['type'], 
        'reason'=>$row['reason']); 
} 

header('Content-type: application/json'); 
echo '' . json_encode($return) .''; 
return true; 

} else { 
    return false; 
} 

上面的代码生成一个完美的JSON文件与要求。但正如我所提到的,我想检查上述请求的开始日期是否在表单发送的两个日期之间。

事情是这样的:

if (($request_startdate >= $startdate) && ($request_startdate <= $enddate)) { 
    //generate array with the requests 
} else { 
    //no requests between dates. 
} 

但如何遍历请求,并检查开始日期?

在此先感谢。

+4

不这样做的是,使用该数据库,那到底是什么它用于:'SELECT * FROM Requests WHERE startdate <?和enddate>?(你需要包含实际变量的正确语法) – Steve 2015-01-15 15:11:01

+0

你已经使用你的foreach循环处理了数据库结果 - 这样你就可以完成你在循环中列出的检查。然而,正如史蒂夫所说,在你的SELECT语句中这样做通常会更有意义。否则,您将在每次处理表单时提取数据库中的每条记录。 – 2015-01-15 15:14:18

回答

0

你正在服用的硬盘的方式,更容易到哪儿statment添加到您的选择查询:

我假设你的表单有两个字段命名DATE1,DATE2

$sql = "SELECT * FROM Requests where startdate>:date1 and enddate<:date2"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue(':date1',$_POST['date1'],PDO::PARAM_STR); 
    $stmt->bindValue(':date2',$_POST['date2'],PDO::PARAM_STR); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
0

将您的字符串输入转换为DateTime并将其格式化为ISO date format(或至少确保它们的格式为mySQL接受)

$sdt = DateTime::createFromFormat('format of your input', $request_startdate); 
$edt = DateTime::createFromFormat('format of your input', $request_enddate); 

修改SQL查询只是你要使用的行:

SELECT * FROM Requests 
WHERE startdate <= :sdt AND :edt >= :edt 

然后结合你的参数(see php doc):

$stmt->bindParam(':sdt', $sdt->format('YYYY-mm-dd 00:00:00'), PDO::PARAM_STR); 
$stmt->bindParam(':edt', $edt->format('YYYY-mm-dd 23:59:59'), PDO::PARAM_STR);