【问题标题】:Insert from ajax working, need to make changes to check for existing conditions to update从 ajax 工作插入,需要进行更改以检查现有条件以更新
【发布时间】:2018-09-16 17:43:26
【问题描述】:

我正在尝试解决一个问题。用户当前可以在提交时进行 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 和内容的面板记录编号:

$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)。

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

【问题讨论】:

  • 您可以添加一个简单的条件 - 如果面板表中存在页面 ID - 内容表中的数据将在面板表中没有任何更改的情况下更新,如果不存在 - 将工作当前代码.

标签: php jquery mysql sql ajax


【解决方案1】:

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

【讨论】:

  • 好的,我认为这很有意义,除非记录确实存在,那么我只想更新我的内容表的内容。所以初始提交会创建面板记录和内容记录。我只想检查 pageid/panel 类型是否存在,如果存在,只需使用该 ID 更新内容表中的“内容”列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 2019-06-02
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多