有人可以看看下面的代码,告诉我我在做什么错。我要完成的工作是使前几天变为只读状态,如果过去以及在给定的时间过去时也不能更改。数据保存在mysql表中(对不起我的英语不好)谢谢
<?php
require_once '../../configuratie.php';
include template. 'header.php';
date_default_timezone_set('Europe/Amsterdam');
$time=date('Hi');
$datum = isset($_GET['datum']) ? $_GET['datum'] : date('Y-m-d ');
$prevDay = date('Y-m-d', strtotime($datum .' -1 day'));
$currentDay = date('Y-m-d H:i:s', strtotime($datum .' now'));
$nextDay = date('Y-m-d', strtotime($datum .' +1 day'));
$row = $conn->prepare(" SELECT * FROM tabelPL WHERE aangemaakt >= '".$currentDay."' order by aangemaakt ");
$row->execute();
$row = $row->fetch(PDO::FETCH_ASSOC);
if(isset($_POST['submit_ochtend'])) {
$P20 = filter_input(INPUT_POST, 'P20', FILTER_SANITIZE_STRING);
答案 0 :(得分:1)
您的主要问题似乎在这里:
<?php if ( ($time >= "0600") && ($time <= "1400") === $prevDay) : ?>
($time <= "1400")
的评估结果为True或False,您尝试将其与日期进行比较。
相反,$currentDay
需要像这样对服务器日期进行单独评估。
<?php if ( ($time >= "0600") && ($time <= "1400") && date("Y-m-d") == $currentDay) : ?>
此外,您无需接受!empty($row['P20']
的接受。占位符文本仅在没有内容时显示。因此,您可以随时添加它,然后浏览器会确定是否需要它。因此,您的整个输出可以简化为:
<?php
if (($time >= "0600") && ($time <= "1400") && (date("Y-m-d") == $currentDay)) {
echo'<textarea id="P20_ocht" name="P20" class="form-control animated" placeholder="Type hier uw tekst">'.$row['P20'].'</textarea>';
} else {
echo'<textarea id="P20_ocht" name="P20" class="form-control animated" placeholder="Type hier uw tekst" readonly>'.$row['P20'].'</textarea>';
}
?>
最后要考虑的是安全性。仅仅因为您添加了一个只读标签并不意味着某人无法在其浏览器中编辑HTML来删除它。因此,如果这是一个问题,您还想在PHP或SQL中设置一个例外,以抛出对过去日期的UPDATE请求,该日期可能类似于:
$update_query = "UPDATE tabelPL SET P20 = ?, aangemaakt = NOW() WHERE id = ? AND aangemaakt >= ? LIMIT 1";
$stmt = $conn->prepare($update_query);
$stmt->bindParam(1, $P20, PDO::PARAM_STR);
$stmt->bindParam(2, $id, PDO::PARAM_INT);
$stmt->bindParam(3, $currentDay, PDO::PARAM_STR);
$stmt->execute();