首页 > 解决方案 > 从 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)。

看起来它应该足够简单,但我不确定如何保留新面板的当前功能,同时适应对已有内容的编辑/更新。

标签: phpjquerymysqlsqlajax

解决方案


诀窍是做一个额外的查询来检查是否有匹配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;
}

推荐阅读