检查提交按钮



我遇到了一些问题,我希望这个脚本:

  1. 打开test.txt文件。
  2. 检查用户是否在txt文件中添加了文本。
  3. 如果用户添加了任何文本,删除现有行并替换为新的行。从$ _POST。
  4. 如果用户没有设置,在test.txt中添加$_POST

问题:

当我垃圾邮件提交按钮时,.txt将会混乱。有人知道怎么核对吗,这样就不会出错了?请不要建议MYSQL,我需要这些在。txt文件。

谢谢。

function cutline($filename,$line_no=-1) { 
    $strip_return=FALSE; 
    $data=file($filename); 
    $pipe=fopen($filename,'w'); 
    $size=count($data); 
    if($line_no==-1) $skip=$size-1; 
        else $skip=$line_no-1; 
    for($line=0;$line<$size;$line++) 
        if($line!=$skip) 
            fputs($pipe,$data[$line]); 
        else 
            $strip_return=TRUE; 
    return $strip_return; 
} 

if ($userid = 1) {
    if(!isset($_POST['submit'])){
?>
        <center><form action="" method="POST">
            <b>HWID</b>
            <input type="text" name="HWID" />
            <input type="submit" value="Add HWID" name="submit">
            </form>
        </center>
<?php
    }else{
        $userid= 1;
        $userid = "user=" . $userid;
        $file = "test.txt";
        $lines = file($file);
        $count = 1;
        foreach ($lines as $e) {
            if(strpos($e, $userid) !== FALSE){
                cutline($file,$count);
                ++$count;

            }
        }
                $fh = fopen($file, 'a') or die("can't open file");
                $stringData = $userid . $_POST['HWID'] . "n";
                fwrite($fh, $stringData);
        }
    }
}else{ 
    echo "You're not logged in";
}
?>

我不是100%确定文本文件是如何搞乱的,但我猜锁在这里不会有帮助,因为锁在脚本完成(或重新加载)时被释放。

看起来你只是在进程中"杀死"你的cutline,其余的行将不会被写入。解决这个问题的一种方法是将文件的新内容保存在一个临时变量中,并且只调用fwrite一次。(我不能100%确定这是否会工作)

另一种可能是在cutline方法完成后,将cutline的结果写入临时文件并用新文件替换旧文件。这可以发生在方法内部。

无论哪种方式,如果脚本在不安全状态下被终止,现有文件都不会被触及。但是,在cutline函数调用之后,在

添加新输入之前,用户设法重新加载页面时,您仍然可以丢失来自用户的新输入。
fwrite($fh, $stringData);

我认为这很难强制执行,因为这个操作非常快。

编辑:

如果这是一个有效的用例,不要忘记同时使用多个用户测试脚本。如果两个或更多的人同时编辑同一个文件,它也会搞砸。所以你最终可能会使用一些锁,但这并不能解决这里描述的问题。

相关内容

  • 没有找到相关文章

最新更新