Как перезаписать значений в базе данных

)) писать код вслепую весело)
у вас в данных total-phones а записываете иначе
попробуйте

$data['total_phones'] = $new_total_phones;

заменить на

$data['total-phones'] = $new_total_phones;
 
сейчас доп.поле перезаписывается "total_phones", но постер - "poster", который тоже выводится через доп.поле, удаляется из новости. скрин приложил.
также снял видео - Для просмотра ссылки Войди или Зарегистрируйся
 

Вложения

  • скрин 5.jpg
    скрин 5.jpg
    317,2 KB · Просмотры: 7
  • скрин 6.jpg
    скрин 6.jpg
    396,6 KB · Просмотры: 6
Последнее редактирование:
потому что у вас в начале идет | которого там быть не должно, откуда берется надо вникать, вероятно где-то косяк с разбором поля на состовляющие
 
<?php
$dbhost = "localhost";
$dbuser = "*****";
$dbpassword = "*****";
$dbname = "*****";

$db = new mysqli($dbhost, $dbuser, $dbpassword, $dbname);
if ($db->connect_errno) {
die("Ошибка подключения: " . $db->connect_error);
}
$db->set_charset('utf8mb4');

$id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
$newTitle = isset($_POST['title']) ? trim($_POST['title']) : '';
$newPrice = isset($_POST['price']) ? trim($_POST['price']) : '';
$newPhones = isset($_POST['total-phones']) ? trim($_POST['total-phones']) : '';

if ($id <= 0) {
die("Некорректный id");
}

// 1) читаем текущие xfields
$stmt = $db->prepare("SELECT xfields FROM dle_post WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$res = $stmt->get_result();
$row = $res->fetch_assoc();
$stmt->close();

$xfieldsStr = $row ? (string)$row['xfields'] : '';

// 2) парсим строку xfields в массив
$xf = [];
if ($xfieldsStr !== '') {
$pairs = explode("||", $xfieldsStr);
foreach ($pairs as $p) {
if ($p === '') continue;
$kv = explode("|", $p, 2);
$key = $kv[0] ?? '';
$val = $kv[1] ?? '';
if ($key !== '') $xf[$key] = $val;
}
}

// 3) обновляем нужные ключи
$xf['title'] = $newTitle;
$xf['price'] = $newPrice;
$xf['total-phones'] = $newPhones;

// 4) собираем обратно в строку (экранируем разделители)
$out = [];
foreach ($xf as $k => $v) {
$v = str_replace(["||", "|"], [" ", " "], $v); // чтобы не сломать формат
$out[] = $k . "|" . $v;
}
$newXfieldsStr = implode("||", $out);

// 5) пишем ОДНИМ UPDATE
$stmt = $db->prepare("UPDATE dle_post SET xfields = ? WHERE id = ?");
$stmt->bind_param("si", $newXfieldsStr, $id);
$stmt->execute();

echo $stmt->affected_rows >= 0 ? "OK" : "FAIL";
$stmt->close();
$db->close();
 
Назад
Сверху