XEditable с использованием PHP MySQL Update через Ajax: проблема с обновлением разных столбцов.

У меня есть несколько столбцов базы данных, но я остановился на двух, чтобы получить два рабочих (категорию и продукт).

На данный момент я могу обновить столбец категории, но я не уверен, как реализовать мой php, чтобы он учитывал несколько столбцов.

Заметка. Я могу редактировать ТОЛЬКО одно поле базы данных за раз, и это мое намерение.

Вот упрощенная версия моего HTML / php:

    echo '<td><span class="xedit" id="'.$propRow['id'].'">'.$propRow['category'].'</span></td>';
echo '<td><span class="xedit xedit-product" id="'.$propRow['id'].'">'.$propRow['product'].'</span></td>';
echo "</tr>";
$rows []= array(
'id' => $propRow['id']
);

Вот мой JS:

        var rowData = <?php echo json_encode($rows); ?>;
for (i = 0; i < rowData.length; i++){
var rd = rowData[i].id;

jQuery(document).ready(function() {
$('.xedit').editable({
tpl: '<input type="text" name="category" id="' + rd + '" class="test form-control input-sm" style="padding-right: 24px;">'
});
$(document).on('click','.editable-submit',function(){
var num = $(this).closest('td').children('span').attr('id');
$.fn.editable.defaults.mode = 'inline';
$.fn.editable.defaults.send = "always";
var values = $(".test").val();
var myObj = { id: num, category: values };
$.ajax({
url: 'post.php',
type: 'post',
data: myObj,
success: {}
});
});
});

}

Мой файл post.php находится здесь (и я думаю, что именно в этом заключается проблема. Пожалуйста, воздержитесь от комментариев по поводу использования функций mysql_ *):

<?php
include '../config/database.php';
$category = $_POST['category'];
$product = $_POST['category'];
$id = $_POST['id'];
$query = "UPDATE " . $usoc_table . " SET category='" . $category . "', product='" . $product . "' WHERE id='" . $id . "';";
mysql_query($query);
?>

Какие типы условий мне нужно установить в post.php, чтобы это работало? Я играл с isset и! Пусто, но мне не повезло.

Любой совет приветствуется. Спасибо.

0

Решение

Хорошо, я смог найти решение, хотя и не самое красивое.

Во-первых, присвойте каждому элементу столбца отдельный класс, примерно так (до того, как я использовал .xedit).

echo '<td><span class="xedit-category" id="'.$propRow['id'].'">'.$propRow['category'].'</span></td>';
echo '<td><span class="xedit-product" id="'.$propRow['id'].'">'.$propRow['product'].'</span></td>';

Далее используйте .edtiable({}) отдельно для каждого класса и использования tpl на каждого. Как вы можете видеть, каждый из них имеет разные name=

$('.xedit-category').editable({
tpl: '<input type="text" name="category" id="' + rd + '" class="cat form-control input-sm" style="padding-right: 24px;">'
});
$('.xedit-product').editable({
tpl: '<input type="text" name="product" id="' + rd + '" class="prod form-control input-sm" style="padding-right: 24px;">'
});

Затем получите значения для каждого класса:

var valuesCat = $(".cat").val();
var valuesProd = $(".prod").val();

Настроить объект myObj который будет иметь один и тот же идентификатор каждый раз, но другой 2-й ключ (в этом случае, myObj.category а также myObj.product

var myObj = {};
myObj.id = num;

if ($("input").hasClass("prod")){
myObj.product = valuesProd;
}
if ($("input").hasClass("cat")){
myObj.category = valuesCat;
}

Брось это в data:

$.ajax({
url: 'post.php',
type: 'post',
data: myObj,
success:...

И, наконец, в post.php есть два отдельных запроса на обновление:

 if (isset($_POST['category'])) {
$category = $_POST['category'];
$id = $_POST['id'];
$query = "UPDATE " . $usoc_table . " SET category='" . $category . "' WHERE id='" . $id . "';";
mysql_query($query);
}

if (isset($_POST['product'])) {
$product = $_POST['product'];
$id = $_POST['id'];
$query = "UPDATE " . $usoc_table . " SET product='" . $product . "' WHERE id='" . $id . "';";
mysql_query($query);
}

Не самый элегантный в любом случае и довольно повторяющийся, но на данный момент дело сделано.

Любой вклад в то, как рефакторинг это очень ценится.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]