创建生成唯一txt文件的变量,然后在不创建其他文本文件的情况下进行追加


Create variable that generates unique txt file then appends without creating another text file

我有一个表单,它在提交时创建一个唯一的.txt文件名,并将表单数据发布到该文件中。这很有效。问题是在它创建文件后,我需要一种方法来附加它,而不创建另一个文本文件。因为它是一个表单,所以当它提交时,每次调用submit时都会重新运行代码,我不知道如何处理它

这是表格:

<body>
<form action="write_to_txt_file2.php" method="POST">
<input name="field1" type="text" />
<input name="field2" type="text" />
<input type="submit" name="submit" value="Save Data">
</form>

以下是php:我不必使用microtime作为唯一的变量名,所以如果有更好的方法,我愿意更改它

<?php
$myDate = round(10*microtime(TRUE));
$filename = "tmp/".$myDate.".txt";
if(isset($_POST['field1']) && isset($_POST['field2'])) {
    $data = $_POST['field1'] . '-' . $_POST['field2'] . "'n";
    $ret = file_put_contents($filename, $data, FILE_APPEND | LOCK_EX);
    if($ret === false) {
        die('There was an error writing this file');
    }
    else {
        echo "$ret bytes written to file";
    }
}
else {
   die('no post data to process');
}
?>

或者,您也可以利用会话来实现这一点,如果没有使用同一生成器设置文件名,则可以设置文件名以便在下次提交后再次使用。

简单示例:

session_start();
if(!isset($_SESSION['file'])) {
    $_SESSION['file'] = round(10*microtime(TRUE)); // set a filename on initial load
}
if(isset($_POST['submit'])) { // if submitted
    $myDate = $_SESSION['file'];
    $filename = "tmp/".$myDate.".txt";
    if(isset($_POST['field1'], $_POST['field2'])) {
        $data = $_POST['field1'] . '-' . $_POST['field2'] . "'n";
        $ret = file_put_contents($filename, $data, FILE_APPEND | LOCK_EX);
        if($ret === false) {
            die('There was an error writing this file');
        }
        else {
            echo "$ret bytes written to file";
        }
    }
    else {
       die('no post data to process');
    }
}
if(isset($_POST['create'])) {
    $_SESSION['file'] = round(10*microtime(TRUE)); // creates another filename
}
?>

<form action="" method="POST">
    <input name="field1" type="text" />
    <input name="field2" type="text" />
    <input type="submit" name="submit" value="Save Data" />
    <input type="submit" name="create" value="Create New" />
</form>