将表单 $_POST 信息保存到random_name.txt的功能


Function to save form $_POST information to random_name.txt

我想将表单($_POST)中的信息保存到动态生成的文件中作为备份。 所以我必须为每个提交表单的用户生成一个文件(10 个提交的表单 = 10 个不同的文件)。我尝试创建一个函数来生成随机文件名并将$_POST数组写入该文件

function save_post($data){
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
    var_dump($randomString);
    $file = "dump/".$randomString.".txt";
    foreach ($data as $k => $v){
        $toFile = "Key: $k; Value: $v 'n";
    }
    return file_put_contents($file, $toFile);
}

并使用此功能:

save_post($_POST);

问题是没有生成任何文件。

就像

@Saty评论中所说的那样。您遇到的问题是由于代码中的return $randomString;引起的。

PHP 文档描述从函数返回值,如下所示:

可以返回任何类型,包括数组和对象。这会导致函数立即结束其执行,并将控制权传递回调用它的行。

调用 return 后,将不会执行该函数中 return 下的任何代码。代码应如下所示:

function save_post($data){
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    var_dump($randomString);
    $file = "dump/".$randomString.".txt";
    foreach ($data as $k => $v){
        $toFile = "Key: $k; Value: $v 'n";
    }
    return file_put_contents($file, $toFile);
}

值得注意的是,就目前而言,您的当前文件仅包含循环中的最后一个键值对。如果我的帖子数组看起来像这样:

array("greeting" => "hello world", "farewell" => "goodbye world")

我运行了脚本,它会输出这样的文件(文件:dump/rHsmM.txt):

Key: farewell; Value: goodbye world

如果这不是您要查找的内容,则需要改用串联,这将允许您添加多个值。与其在每次循环时覆盖$toFile的值,不如添加到它的末尾。为此,请将$toFile = "Key: $k; Value: $v 'n";行更改为:

$toFile .= "Key: $k; Value: $v 'n";

如果您使用相同的数组重新运行脚本,则最终会得到以下结果(dump/PFOzo.txt):

Key: greeting; Value: hello world
Key: farewell; Value: goodbye world

更新:正如评论中指出的那样,在我们尝试连接它之前,您确实会收到有关$toFile不存在的通知。为了解决这个问题,我们可以确保我们在foreach循环之前声明它,如下所示:

$toFile = "";
foreach ($data as $k => $v){
...

现在,当我们开始连接时,我们已经有一个字符串可以连接(尽管是空白的)。

  1. 移除或评论

    //return $randomString;
    //var_dump($randomString);
    
  2. 连接$toFile

    function save_post($data){
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < 5; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        //return $randomString;
        //var_dump($randomString);
        $file = "dump/".$randomString.".txt";
        $toFile = "";
        foreach ($data as $k => $v){
            $toFile .= "Key: $k; Value: $v 'n";
        }
        return file_put_contents($file, $toFile);
    }
    

按如下方式使用:

function save_post($data){
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    var_dump($randomString);
    $file = "dump/".$randomString.".txt";
    foreach ($data as $k => $v){
        $toFile = "Key: $k; Value: $v 'n";
    }
    return file_put_contents($file, $toFile);
}

注意:函数在执行操作之前返回值,因此清除了返回语句。