PHP从表单数据创建多维数组

时间:2018-08-24 07:02:03

标签: php arrays json multidimensional-array

昨天我整天都在寻找解决方案,但我仍然被困住

这是我的问题

我有一个PHP页面,我必须在其中填写3个值的表单, 当我单击提交时,它应该在JSON数组中创建一个新的JSON数组,该数组的数量增加1。

我要实现的目标:

当我填写5次表单并单击5次提交按钮时,我的JSON数组应如下所示:

{
  "articles": {
    "1": {
      "tax": "11",
      "price": "111",
      "discription": "Transport"
    },
    "2": {
      "tax": "234",
      "price": "4532",
      "discription": "Opslag"
    },
    "3": {
      "tax": "19",
      "price": "19",
      "discription": "Gasoline"
    },
    "4": {
      "tax": "84765",
      "price": "4235",
      "discription": "Food"
    },
    "5": {
      "tax": "132",
      "price": "5460",
      "discription": "Opslag"
    }
  }
}

我尝试做的事情:

我试图用javascript创建一些东西:它从所有输入字段创建了一个JSON数组,但是到目前为止,我无法存储这些字段并从结果中制作一个多维数组。我确实发现了一个有趣的堆栈溢出问题 Click,但我不知道如何像问题示例一样使用输入字段填充数组。

我希望有人可以帮助我:)

托马斯

2 个答案:

答案 0 :(得分:1)

您可以通过两种方式执行此操作。两者都合适。我认为我会考虑第二种方法,因为它完全是在服务器端完成的,因此更加安全。我会为你们演示的。

第一种方式:

您将使用隐藏的输入字段并序列化数组。您将在提交时通过隐藏的输入字段将序列化的数组传递回您的帖子数组。该代码会将新的发布数据推送到从隐藏的输入字段中获得的未序列化数组。

像这样:

<?php

if(isset($_POST['submit']) && $_POST['submit']){

    $array = unserialize(base64_decode($_POST['articles']));

    $array['articles'][] = array(

        'tax'               => $_POST['tax'],
        'price'             => $_POST['price'],
        'description'       => $_POST['description']

    );

    $postData = base64_encode(serialize($array));

}

?>

<!DOCTYPE HTML>
<html>

  <head>
    <title>My Simple Form</title>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
  </head>

  <body style="background-color:#b3ffff">

        <div style="padding-left:500px; padding-top:200px">

            <form action=""  method="post" enctype="multipart/form-data">

                Tax: <input type="text" name="tax" placeholder="tax" value=""><br>
                Price: <input type="text" name="price" placeholder="price" value=""><br>
                Description <input type="text" name="description" placeholder="description" value=""><br>
                <input type="hidden" name="articles" value=" <?php echo $postData; ?> ">
                <input type="submit" name="submit" value="Submit">

            </form>

    </div>

  </body>

</html>


<?php

echo
'<pre>';
print_r($array);
echo
'</pre>';

 //When you need to convert it to a json string then use this:
 $jsonString = json_encode($array);

?>

第二种方式

这种方式不使用隐藏的输入字段。相反,我们只是将发布数据传递给$ _SESSION变量,该变量会将数组存储在服务器端的内存中。只需确保在决定离开页面时删除会话变量即可,因为如果没有,它将始终在那里。我的意思是,如果您以后重新加载页面,则第一次访问该页面时的所有数据仍将存在。

session_start();

if(isset($_POST['submit']) && $_POST['submit']){

    $_SESSION['myData']['articles'][] = array(

        'tax'               => $_POST['tax'],
        'price'             => $_POST['price'],
        'description'       => $_POST['description']

    );

}

?>

<!DOCTYPE HTML>
<html>

  <head>
    <title>My Simple Form</title>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
  </head>

  <body style="background-color:#b3ffff">

        <div style="padding-left:500px; padding-top:200px">

            <form action=""  method="post" enctype="multipart/form-data">

                Tax: <input type="text" name="tax" placeholder="tax" value=""><br>
                Price: <input type="text" name="price" placeholder="price" value=""><br>
                Description <input type="text" name="description" placeholder="description" value=""><br>
                <input type="submit" name="submit" value="Submit">

            </form>

    </div>

  </body>

</html>


<?php

echo
'<pre>';
print_r($_SESSION['myData']);
echo
'</pre>';

答案 1 :(得分:0)

$array[] = $_POST["value"]; // push array after submit

$strJSON = json_encode($array);    //convert Array to JSONString
$objJSON = json_decode($strJSON);  //convert JSONString to JSONObject