如何通过php中的用户输入在json文件中保存数据

时间:2018-01-11 14:29:09

标签: php json forms

我正在尝试从用户那里得到输入,并且在提交时它会保存在Json文件中,但我遇到了错误,并且网络上的解决方案对我没有帮助。

这是我的代码:

<?php

array()
$arr_data[] = array(); // create empty array

$myFile = "sample.json";


try
 {
   //Get form data
   $formdata = array(
      'name'=> $_POST['name'],
      'age'=> $_POST['age'],
      'sex'=> $_POST['sex'],
      'education'=>$_POST['edu']

   );


  //Get data from existing json file
   $jsondata = file_get_contents($myFile);

   // converts json data into array
   $arr_data = json_decode($jsondata, true);

   // Push user data to array
   array_push($arr_data,$formdata);

   //Convert updated array to JSON
   $jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);

   //write json data into data.json file
   if(file_put_contents($myFile, $jsondata)) {
        echo 'Data successfully saved';
    }
   else 
        echo "error";

   }

    catch (Exception $e) {
        echo 'Caught exception: ',  $e->getMessage(), "\n";
  }


   ?>

现在我正在使用代码的表单在这里:

 <form  id="myform" method="post" action="action.php" > 
                                <div class="row">
                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label> Name</label>
                                            <input type="text" class="form-control" placeholder="Please type  Name" value="" name="name"  size="20" required>
                                        </div>
                                    </div>
                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label>Age</label>

                                                <select class="form-control" placeholder="Please Select Education" value="" id="edu" name="edu" required>
                                                <option selected="true" disabled="disabled" >Please Select Type</option> 
                                                    <option value="eng">Engineer</option>
                                                    <option value="doc">Doctor</option>
                                                    <option value="res">Researcher</option>


                                                </select>

                                        </div>
                                    </div>

                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label>Age</label>
                                            <input type="number" class="form-control" placeholder="Please specify Age" value="age" id="age" name="age" size="20" required>
                                        </div>
                                    </div>


                                    <div class="col-md-6">
                                        <div class="form-group">
                                            <label>sex</label>
                                            <input type="text" class="form-control" placeholder="Please specify Sex" value="" id="sex" name="sex" size="50" required>
                                        </div>
                                    </div>

                                </div>

                               <button type="submit" class="btn btn-info btn-fill pull-right" id="btn" name="btn"> Submit</button>
                                <div class="clearfix"></div>
                            </form>

现在问题在于提交。我收到了以下错误,网上没有任何内容可以帮助我。我不知道我错在哪里。

  

警告:array_push()期望参数1为数组,null中给出null   第34行/Users/path/action.php

     

警告:file_put_contents(sample.json):无法打开流:   第40行错误/Users/path/action.php中的权限被拒绝

提前感谢您的帮助和时间。

1 个答案:

答案 0 :(得分:0)

您只需要设置文件sample.json的CRUD权限。

在终端运行中:

chmod -R 0777 /path-to/sample.json

这将解决这两个错误:

 $jsondata = file_get_contents($myFile); -->> (this returns NULL because of permissions issue)

file_put_contents($myFile, $jsondata) -->> (and this just causing fatal error - again due to permissions)