Вставка из ajax работает, нужно внести изменения, чтобы проверить существующие условия для обновления - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь решить проблему.В настоящее время пользователь может создавать контент в форме, которая после отправки совершает Ajax-вызов.Когда выполняется вызов, он создает запись MySQL для фактического содержимого, получает идентификатор этой записи содержимого, а затем создает запись для «панели», в которой размещается это содержимое (связанное с идентификатором страницы, типом панели и содержимым в целом).).

Это работает отлично, но если они пытаются отредактировать контент в форме и заявить, что он просто создает другую запись.

В приведенном ниже JS / AJAX передаются тип_панели, идентификатор страницы исодержимое как скрытые поля:

<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, который вставляет содержимое, получает идентификатор этой вставки содержимого, а затем создает запись панели, содержащуютип панели, идентификатор страницы и идентификатор содержимого:

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

Кажется, что это должно быть достаточно просто, но я не уверен, как сохранить текущие функциональные возможности для новых панелей, в то же время приспосабливая редактирование / обновление того, что уже есть.

1 Ответ

0 голосов
/ 16 сентября 2018

Хитрость заключается в том, чтобы сделать дополнительный запрос, чтобы проверить, есть ли записи, которые соответствуют этим 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...