【问题标题】:How to save input form data as an array in PHP如何在 PHP 中将输入表单数据保存为数组
【发布时间】:2020-10-24 11:12:24
【问题描述】:

我有一个包含学生姓名、科目和年龄的表格。提交时,它将数据作为数组保存在 txt 文件中。下次,当我放入新数据并提交时,它会在该 txt 文件中创建一个新数组,而不是将其附加到之前的数组中。

<?php
if(!empty($_GET)){
    $student = [];
    $student['name'] = $_GET['name'];
    $student['subject'] = $_GET['subject'];
    $student['age'] = $_GET['age'];
    $studentArray = [];
    array_push($studentArray, $student);
    $str = print_r($studentArray, true);
    file_put_contents('student.txt', $str, FILE_APPEND);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="" method="GET">
        <label for="name">Name:</label>
        <input type="text" name="name" id="name">

        <label for="name">Subject:</label>
        <input type="text" name="subject" id="subject">

        <label for="name">Age:</label>
        <input type="number" name="age" id="age">

        <input type="submit" name="submitButton">
    </form>
</body>
</html>

输出如下所示:

但是我想像下面这样保存它:

我该怎么做?

【问题讨论】:

  • 将文件(如果可能,应另存为 JSON)读入数组,追加数据,然后用整个数组覆盖文件。不过,该输出格式用于调试,请使用 json_encode 和 json_decode。

标签: javascript php forms


【解决方案1】:

如果你真的必须在文本中看到你漂亮的数组,使用这个:

    if(!empty($_GET)){
        $student = array();
        $int = 0;
        $txtfile = "student.txt";
        if (file_exists($txtfile)) {
            $fgc = file_get_contents($txtfile);
            $expl = explode("[".$int."] => Array", $fgc);
            while (count($expl) > 1) {
                $expl2 = (count($expl) > 1) ?  explode("[".($int+1)."] => Array", $expl[1])[0] : $expl[1];
                $m = preg_match_all("@\\[([\d\w]+)\\] => ([^\n]*)@imus", $expl2, $matches);
                if ($m == 0) { break; }
                foreach ($matches[1] as $key => $val) {
                    $student[$int][$val] = $matches[2][$key];
                }
                $int++;
                $expl = explode("[".$int."] => Array", $fgc);
            }
        }
        $student[$int]['name'] = $_GET['name'];
        $student[$int]['subject'] = $_GET['subject'];
        $student[$int]['age'] = $_GET['age'];
        $str = print_r($student, true);
        file_put_contents('student.txt', $str);

        print_r($student);
    }

但是请使用这样的序列化版本:

    if(!empty($_GET)){
        $student = array();
        $int = 0;
        $txtfile = "student.txt";
        if (file_exists($txtfile)) {
            $fgc = file_get_contents($txtfile);
            $student = unserialize($fgc);
            $int = count($student);
        }
        $student[$int]['name'] = $_GET['name'];
        $student[$int]['subject'] = $_GET['subject'];
        $student[$int]['age'] = $_GET['age'];
        file_put_contents('student.txt', serialize($student));

        print_r($student);
    }

print_r 仅用于调试。

玩得开心;)

【讨论】:

    【解决方案2】:

    您必须使用 JSON 来不断更新您的数组。 重要的一点是您必须将学生加载到一个变量中,然后将新学生推送到该变量中,这样最后,您可以保存您的学生变量,该变量包含一个数组中的所有学生。

    使此代码有效的要求:

    1. 创建一个名为student.json的文件并将[]放入文件中

    另外,我强烈建议你去了解一下 PHP 中的 JSON,这样你就可以更好地了解这段代码现在是如何工作的

    if(!empty($_GET)){
        $student = [];
        $student['name'] = $_GET['name'];
        $student['subject'] = $_GET['subject'];
        $student['age'] = $_GET['age'];
        $studentArray = json_decode( file_get_contents('student.json'), true);
        array_push($studentArray, $student);
        $str = print_r($studentArray, true);
        file_put_contents('student.json', json_encode($studentArray));
    }
    

    【讨论】:

    • 感谢您的回答。但是,使用您的代码,我仍然无法将它们保存为 JSON 中的数组。 student.json 文件显示为空。
    • 嘿,你说得对,它可能根本不起作用,因为我在第 6 行有一个输入错误(在file_get_contents 旁边输入了file_get_contentes)。新代码现在应该可以工作了。
    • 嘿,其实我注意到了捆绑错误并纠正了它。它没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2011-03-19
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2022-11-04
    • 2015-09-21
    相关资源
    最近更新 更多