我要做的是创建一个带有表单的json文件,然后使用第二个表单,更新创建的json文件。目前所有这些都发生在process.php
。如果我在data.json
中首先将json文件命名为process.php
(现在已注释掉),我在第二种形式上取得了成功,但我希望能够从输入中创建该名称从第一种形式。谁能看到我做错了什么?提交第一份表格后没有任何反应。没有创建json文件。
第一种形式:
<form class="ui equal width form" action="server/php/process.php" method="POST" target="frame">
<input type="text" name="filename" id="filename">
<input type="submit" value="Save and continue" id="continue1">
</form>
第二种形式:
<form class="ui form" action="server/php/process.php" method="POST" target="frame" id="attribute-form">
<input type="text" value="" class="ID" name="ID">
<input type="hidden" value="" class="value-x" name="valueX">
<input type="submit" value="Save" id="save-snippet">
</form>
process.php
<?php
// Form for saving template file name
$myFile = $_POST['filename'];
if(isset($_POST['filename'])){
$handle = fopen("server/php/data/$myFile.json", "w+");
fwrite($handle);
fclose($handle);
} else {
echo 'Template has not been named. Please enter a name before saving.';
}
// Form for saving attribute JSON data
//$myFile = "data/data.json";
$arr_data = array(); // create empty array
try
{
//Get form data
$formdata = array(
'ID'=> $_POST['ID'],
'valueX'=> $_POST['valueX'],
);
//Get data from existing json file
$jsondata = file_get_contents($myFile);
// converts json data into array
$arr_data = json_decode($jsondata, true);
$updateKey = null;
foreach ($arr_data as $k => $v) {
if ($v['ID'] == $formdata['ID']) {
$updateKey = $k;
}
}
if ($updateKey === null) {
array_push($arr_data,$formdata);
} else {
$arr_data[$updateKey] = $formdata;
}
//Convert updated array to JSON
$jsondata = json_encode($arr_data);
//write json data into json file
if(file_put_contents($myFile, $jsondata)) {
echo 'Data successfully saved';
}
else
echo "error";
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
答案 0 :(得分:0)
首先,您的PHP脚本在第5行有拼写错误。在关键字$
之前没有if
(也许这就是为什么你不能运行你的代码并且在第一个表单提交中什么也得不到的原因)。
关键点是更新块代码$myFile
中的变量$jsondata = file_get_contents($myFile);
,值(文件路径)不正确。它是"/files/$myFile.json"
。 (哦......,你修改了PHP代码,所以文件路径应该是``server / php / data / $ myFile.json“)
答案 1 :(得分:0)
在获取其中的值之前,您需要检查是否设置了$_POST['filename']
。
$if(isset($_POST['filename'])){
$myFile = $_POST['filename'];
//the rest of your code here
}