检查提交按钮

时间:2011-05-02 22:58:19

标签: php file for-loop submit lines

我遇到了一些问题,我想要这个脚本:

  1. 打开test.txt文件。
  2. 检查用户是否在txt文件中添加了任何文本。
  3. 如果用户添加了任何文本,请删除现有行并将其替换为新行。来自$ _POST。
  4. 如果用户没有,请在test.txt
  5. 中添加$ _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";
    }
    ?>
    

1 个答案:

答案 0 :(得分:0)

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

看起来你正在“杀死”cutline正在进行中,其余的行不会被写入。解决此问题的一种方法是将文件的新内容保存在临时变量中,并仅调用fwrite一次。 (我不确定这是否有效)

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

如果脚本在不安全状态下被杀死,则无论如何都不会触及现有文件。但是当你设法在cutline的函数调用之后以及在此行中添加新输入之前设置重新加载页面时,你仍然可以从用户那里放弃新的输入

fwrite($fh, $stringData);

我认为这很难用,因为这个操作非常快。

修改

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