PHP从文件中读取默认值

时间:2016-10-14 05:41:22

标签: php json forms

我的脚本工作方式存在问题。应该发生的是:当表单加载时,它从.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时间比较在我当前的代码中不起作用

2 个答案:

答案 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;
}