javascript - 如何从 php 中的 JSON 对象数组中删除值?
问题描述
我有一个 PHP 代码和 JSON,如下所示:
PHP代码:
<?php if (!empty($_POST) && isset($_POST['savechanges']) && $_POST['savechanges'] == 1 && isset($_SESSION['pageadmin'])) {
$output = array();
$output['en_desc']=$_POST['en_desc'];
$output['code']=$_POST['code'];
$fp = fopen('../feeds/ptp-ess_landing_scommittees.json', 'w');
fwrite($fp, json_encode($output));
fclose($fp);
}
if(file_exists('../feeds/ptp-ess_landing_scommittees.json')){
$data = json_decode(file_get_contents('../feeds/ptp-ess_landing_scommittees.json'));
}
?>
<?php if($data) { ?>
<form method="post" id="myform" style="text-align:left;">
<input type="hidden" id="savechanges" name="savechanges" value="1">
<div style="text-align:center; margin-right:9px; margin-bottom:24.703px;">
<button type="submit">Save</button>
</div>
<?php foreach ($data->code as $key => $value) { ?>
<div class="house-senate-committee" style="text-align:center; margin-top:15px;">
<button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
<input type="text" name="code[]" style="margin-right:10px;" value="<?= $data->code[$key] ?>">
<input type="text" name="en_desc[]" value="<?= $data->en_desc[$key] ?>">
</div>
<?php } ?>
</form>
<?php } else { echo 'Cannot read JSON settings file'; }?>
JSON:
{"code":["AEFA","AGFO"], "en_desc":["Foreign Affairs and International Trade","Agriculture and Forestry"]}
通过上面的 PHP/JSON 代码生成以下 DOM:
DOM(HTML):
<div class="house-senate-committee" style="text-align:center; margin-top:15px;">
<button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
<input type="text" name="code[]" style="margin-right:10px;" value="AEFA">
<input type="text" name="en_desc[]" value="Foreign Affairs and International Trade">
</div>
<div class="house-senate-committee" style="text-align:center; margin-top:15px;">
<button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
<input type="text" name="code[]" style="margin-right:10px;" value="AGFO">
<input type="text" name="en_desc[]" value="Agriculture and Forestry">
</div>
以下 JS 代码在单击删除按钮时从 DOM 中删除一行。刷新页面时,删除的行又回来了,因为所有内容都是通过 JSON 呈现的。
JS代码:
<script>
function removeRow(el) {
el.parentNode.remove();
}
</script>
问题陈述:
上面的 JS 代码正在从 DOM 中删除该行(单击删除按钮),但是在重新刷新页面时,一切都会再次呈现。
我想知道我需要添加什么 PHP 代码,以便在通过 JS 从 DOM 中删除行时在保存表单时从 JSON 中删除值。
第 1 步:用户通过单击删除按钮从 DOM 中删除行。
第 2 步:在保存表单并呈现页面时,不应该存在已删除的行。
我知道我必须使用 unset 函数才能从 JSON 中删除值,但我不确定如何将它集成到表单中。
unset($data->code);
unset($data->en_desc);
解决方案
你这里有一个错字:
$data = json_decode(file_get_contents('../feeds/ptp-ess_landing_scommittees.json'));
它应该是
$data = json_decode(file_get_contents('../feeds/ptp-ess_landing_committees.json'));
看看“s”:)
编辑:您还保存了新文件而没有实际检查是否有帖子发生,这是完整的代码:
<?php
if (isset($_POST['submit'])) {
$output = array();
$output['en_desc'] = $_POST['en_desc'];
$output['code'] = $_POST['code'];
$fp = fopen('../feeds/ptp-ess_landing_committees.json', 'w');
fwrite($fp, json_encode($output));
fclose($fp);
}
if (file_exists('../feeds/ptp-ess_landing_committees.json')) {
$data = json_decode(file_get_contents('../feeds/ptp-ess_landing_committees.json'));
}
?>
<?php if ($data) { ?>
<form method="post" id="myform" style="text-align:left;">
<div style="text-align:center; margin-right:9px; margin-bottom:24.703px;">
<button type="submit" name="submit">Save</button>
</div>
<?php foreach ($data->code as $key => $value) { ?>
<div class="house-senate-committee" style="text-align:center; margin-top:15px;">
<button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
<input type="text" name="code[]" style="margin-right:10px;" value="<?= $data->code[$key] ?>">
<input type="text" name="en_desc[]" value="<?= $data->en_desc[$key] ?>">
</div>
<?php } ?>
</form>
<?php } else {
echo 'Cannot read JSON settings file';
} ?>
<script>
function removeRow(el) {
el.parentNode.remove();
}
</script>
推荐阅读
- c# - .dll、.winmd 可以在 Unity 中读取,但不能在 XAML 项目中读取
- amazon-web-services - 如何使用 aws cli 在 aws lambda python 框架中添加请求包?
- laravel - laravel 路由存在但返回 404 错误
- azure-keyvault - 为 Azure Key Vault 机密实施其他加密措施
- sql - 使用日、月和无年查找未来 30 天内的生日
- python - Django Stripe InvalidRequestError:请求 req_******:不是有效的 URL
- python - 如何使用 selenoid 访问 selenoid ui?
- flutter - 如何显示来自 Firestore (Flutter) 的文本数据
- javascript - 如何修复 React 网站中导致的 iPhone 视口错误
- c++ - 当我使用 MPI_Get 时,主要作业正常终止