我的脚本工作方式存在问题。应该发生的是:当表单加载时,它从.json文件中读取最后使用的数据并填充字段。它可以工作,但是当提交新数据时,它会使用旧数据填充表单,而不是新数据。
第一部分读取JSON文件并构建表单
<?php $old = json_decode((file_get_contents(dirname(__FILE__)."/json.json")), true); ?>
<!--Building the form-->
<table>
<form action="edit.php" method="POST">
<label for="time">Time:</label>
<input type="text" name="time" id="time" value="<?php echo ($old['time']); ?>"></input>
<br />
<label for="event">Event:</label>
<input type="text" name="event" id="event" value="<?php echo ($old['event']); ?>"></input>
<br />
<label for="event">Notes:</label>
<input type="textarea" name="notes" id="notes" value="<?php echo ($old['notes']); ?>"></input>
<br />
<input type="submit" name="task" value="Go" />
<input type="submit" name="task" value="Clear" />
</form>
下一节将决定如果按下清除按钮该怎么办
<?php if ($_POST['task'] == 'Clear'){
$time = '';
$event = '';
$notes = '';
$remainingtime = '';
$task = 'clear';}
else {
?>
这个最后一节填充新数组并将其保存为JSON文件。
<?php if ($old['time'] != $_POST['time']){
$time = preg_replace("/[^0-9]/","",$_POST['time']);
$remainingtime = ((microtime())+($timein*60)*1000);
$task = 'countdown';}
else {
$remainingtime = $old['time'];
}
$event = $_POST['event'];
$notes = $_POST['notes'];
$remainingtime = '';
$task = 'display';
}
$new = array ('time' => $time, 'event' => $event,'notes' => $notes , 'remainingtime' => $remainingtime , 'task' => $task);
file_put_contents((dirname(__FILE__).'/json.json'), json_encode($new));
}
?>
重复按下清除按钮时,表单将被清除并清除JSON文件。 按下Go按钮时,表单和JSON文件在新表单提交和JSON文件中的内容之间交替。
任何帮助都将不胜感激。
NB时间比较在我当前的代码中不起作用
答案 0 :(得分:2)
你说“这个最后一节”是节省的。如果您在页面顶部加载数据并将其保存在底部,则在生成表单后,它始终是显示的旧数据,因为这是您加载的内容。您不要之后更新文件,你已加载旧数据并显示它。
要解决此问题,请从此基本结构更改代码:
load data
display form using old data
decide what to do if the clear button is pressed
populate the new array
save the new array as the json file
到此:
decide what to do if the clear button is pressed
if there's new data:
populate the new array
save the new array as the JSON file
otherwise, load the old data
display form using the data (whether it's new or old
顺便说一下,与$post['time']
的比较没有意义。您共享的代码未定义$post
(不与超级全局$_POST
相同,但 令人困惑)。
答案 1 :(得分:0)
您的问题是$_POST
数据仍然存在。如果您重新提交表单,旧数据将再次插入。在将表单数据写入json文件后,您需要做的是重定向页面。
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
switch ($_POST['action']) {
case 'Clear':
// Do clear stuff
break;
case 'Go':
default:
// Do go stuff
break;
}
// Redirect
header("Location: ".$_SERVER['REQUEST_URI']);
exit;
}