Javascript 如何在PHP中将输入表单数据保存为数组

Javascript 如何在PHP中将输入表单数据保存为数组,javascript,php,forms,Javascript,Php,Forms,我有一张表格,上面有学生姓名、科目和年龄。提交时,它将数据保存为txt文件中的数组。下一次,当我放置新数据并提交它时,它会在该txt文件中创建一个新数组,而不是将其附加到以前的数组中 <?php if(!empty($_GET)){ $student = []; $student['name'] = $_GET['name']; $student['subject'] = $_GET['subject']; $student['age'] = $_GET['

我有一张表格,上面有学生姓名、科目和年龄。提交时,它将数据保存为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才能不断更新阵列。 重要的一点是,您必须将您的学生加载到一个变量中,然后将新学生推送到该变量中,这样,您最终可以保存您的学生变量,该变量包含您想要的一个数组中的所有学生

使此代码生效的要求:

  • 创建一个名为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));
    }
    

    如果您确实必须在文本中查看您的漂亮数组,请使用以下命令:

        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);
        }
    
    打印仅用于调试


    玩得开心;)

    将文件读入数组(如果可能,应另存为JSON),追加数据,然后用整个数组覆盖该文件。该输出格式用于调试,请使用json_编码和json_解码。谢谢您的回答。但是,使用您的代码,我仍然无法将它们保存为JSON中的数组。student.json文件show null。嘿,你说得对,它可能根本不起作用,因为我在第6行有一个输入错误(在
    file\u get\u contents
    旁边键入了
    file\u get\u contents
    )。新代码现在应该可以用了。嘿,实际上我注意到了打结的错误并改正了它。但它不起作用。