我正在尝试.json
根据<select>
所选的任何选项更新单独加载的文件.它加载.json
文件然后更新单个文件,只要我定义$myFile
为特定.json
文件,如$myFile = "data/data.json";
但是当我尝试将select选项作为文件名传递时,没有任何保存.我在哪里弄乱这个?
这是HTML选择:
<form action="/server/php/data/process.php" method="post">
<select class="ui mini fluid search dropdown" id="templateSelection" type="text" name="selectTemplate" onchange="loadTemplate()">
<option value="" selected="selected">Select Template</option>
<?php
foreach(glob(dirname(__FILE__) . '/server/php/data/*') as $filename){
$filename = basename($filename);
echo "<option value='" . $filename . "'>".$filename."</option>";
}
?>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
以下是填充的选项:
<option value="data.json">data.json</option>
<option value="data2.json">data2.json</option>
<option value="data3.json">data3.json</option>
Run Code Online (Sandbox Code Playgroud)
这是process.php:
<?php
//$myFile = "data/data.json";
$filename = $_POST['selectTemplate'];
$myFile = "data/" . $filename;
$arr_data = array(); // create empty array
try
{
//Get form data
$formdata = array(
'ID'=> $_POST['ID'],
'attributeName'=> $_POST['attributeName'],
'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;
}
$jsondata = json_encode($arr_data);
//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";
}
?>
Run Code Online (Sandbox Code Playgroud)
编辑:我通过同一页面上的另一个表单以相同的操作提交它(带有提交按钮).这个其他形式允许我更改在选择第一个表单中的选项时加载的json的某些值.这是第二种形式的样子:
<form class="ui form" action="server/php/process.php" method="POST" target="frame">
....
<input type="submit" value="Save">
</form>
也许这就是问题的来源?我想在第二个表单上提交将在第一个表单中选择所选选项并将选项存储在变量中.
提交 HTML 表单时,浏览器仅发布<form></form>
标签内的字段。
简单的解决方案是将所有字段放在一个表单下,或者您可以使用 Javascript 填充您提交的实际表单上的隐藏字段。