php - 从 ajax 工作插入,需要进行更改以检查现有条件以更新
问题描述
我正在尝试解决一个问题。用户当前可以在提交时进行 ajax 调用的表单中创建内容。当进行调用时,它会为实际内容创建一个 mysql 记录,获取该内容记录的 ID,然后为包含该内容的“面板”创建一个记录(将页面 ID、面板类型和内容一起关联起来)。
这很有效,但是如果他们尝试编辑表单中的内容并提交它只会创建另一条记录。
下面的 JS/AJAX 将 panel_type、pageID 和 content 作为隐藏字段传递:
<script type="text/javascript">
$("#leftHalfForm").submit(function(e){
var string = $('#leftHalfForm').serialize() + '&page_id=' + page_id;
console.log(string);
// AJAX Code To Submit Form.
$.ajax({
type: "POST",
url: "addPanel.php",
data: string,
cache: false,
success: function(response){
}
});
return false;
});
</script>
因此,当提交“表单”时,ajax 会调用下面的 PHP 脚本来插入内容,获取该内容插入的 ID,然后创建一个包含面板类型、页面 ID 和内容 ID 的面板记录:
$content = $_POST['page_content'];
$addContent = "
INSERT INTO content(content)
VALUES('$content');
";
if ($mysqlConn->query($addContent) === TRUE) {
$cont_id = $mysqlConn->insert_id;
$data['last_insert_id'] = $cont_id;
echo json_encode($data);
} else {
echo "Error: " . $addContent . "<br>" . $mysqlConn->error;
}
$panelID = $_POST['panel_type'];
$pageID = $_POST['page_id'];
$addPanel = "
INSERT INTO panels(panel_type_id, page_id, cont_id)
VALUES ('$panelID', '$pageID', '$cont_id');
";
if ($mysqlConn->query($addPanel) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $addPanel . "<br>" . $mysqlConn->error;
}
这在带有空面板的新页面上完美运行。但是,如果他们提交此表单(创建面板记录和内容记录)然后单击返回以编辑某些内容,那么在该 AJAX 调用上,我希望能够检查并基本上说“如果此面板存在记录在此页面上键入,更新与其关联的内容记录。”
例子:
如果用户单击表单并创建内容文本“这是一些文本内容”。假设当前页面的pageID为123,面板类型为2。创建这条记录:
内容表
ID | Content
------------------------------
52 | This is some text content.
面板表
panel_type_id | page_id | cont_id
-------------------------------------
2 123 52
现在,如果他们编辑它并点击提交,我已经传递了 panel_type_id 和 page_id 所以我要做的就是看到 panel_type_id 为 2 和 page_id 为 123 已经存在,所以我只需要更新与之关联的内容记录(内容 ID 为 52)。
看起来它应该足够简单,但我不确定如何保留新面板的当前功能,同时适应对已有内容的编辑/更新。
解决方案
诀窍是做一个额外的查询来检查是否有匹配panel_type_id 和page_id 的记录。所以我们做一个计数,如果计数返回 0,那么我们插入一条新记录,否则我们更新现有记录。
$checkIfExists = "SELECT COUNT(*) AS count FROM panels WHERE panel_type_id = $panelID AND page_id = $pageID";
if($mysqlConn->query($checkIfExists)->count = 0){
$q= "
INSERT INTO panels(panel_type_id, page_id, cont_id)
VALUES ('$panelID', '$pageID', '$cont_id');
";
} else {
$q= "
UPDATE panels SET cont_id = $cont_id WHERE panel_type_id = $panelID AND page_id = $pageID
";
}
if ($mysqlConn->query($q) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $addPanel . "<br>" . $mysqlConn->error;
}
推荐阅读
- java - 如何显示下拉列表的某些选定值
- keras - 无法在多标签分类器上使用 Stratified-K-Fold
- jenkins - BlueOcean 在并行阶段之前未显示输入
- asp.net - 如何在 asp.net 报表查看器中显示数据库中保存的二维码
- python - 需要将抓取的数据写入 csv 文件(线程)
- node.js - 适用于 Node.js 的 Twilio Lookup API - 验证并获取 E.164 格式
- vue.js - jest.fn() 声称没有被调用,但有
- html - 如何创建半透明的模糊叠加层?
- arangodb - 查询多个集合 Arangodb
- checkbox - 在 Google 表格中选中复选框时复制另一张表格中的行