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

Мне прислали еще код, который ниже и он работает, но только не перезаписывает в доп.поле - total-phones. мне кажется, что это из-за неправильного синтаксиса. само доп. поле на сайте - total-phones, а в коде там через нижнее подчеркивание, в этом не силен. есть идеи?

Код:
<?php

$dbhost = "localhost"; // Хост1
$dbuser = "*****"; // Пользователь баз данных
$dbpassword = "*****"; // Пароль
$dbname = "*****"; // Имя баз данных


// Подключение к базе
$db = new mysqli($dbhost, $dbuser, $dbpassword, $dbname);

// Проверка подключения с баз данных
if ($db->connect_errno) {
  echo '<p>Не удалось подключиться к базе данных!</p>';
  echo $db->connect_error;
  exit;
}

$db->set_charset('utf8');

// Экранируем
$id = $db->real_escape_string($_POST['id']);
$new_title = $db->real_escape_string($_POST['title']);
$new_price = $db->real_escape_string($_POST['price']);
$new_companies = $db->real_escape_string($_POST['companies']);
$new_total_phones = $db->real_escape_string($_POST['total-phones']);


// Получаем значения xfields
$query = "SELECT xfields FROM dle_post WHERE id='$id'";
$result = $db->query($query);

if ($result) {
  $row = $result->fetch_assoc();
  $xfields = $row['xfields'];

  // Разбиваем xfields на пары
  $pairs = explode('||', $xfields);
  $data = [];
  foreach ($pairs as $pair) {
    $parts = explode('|', $pair);
    if (count($parts) == 2) {
      $data[$parts[0]] = $parts[1];
    }
  }

  // Меняем нужные значения
  $data['title'] = $new_title;
  $data['price'] = $new_price;
   $data['companies'] = $new_companies;
  $data['total_phones'] = $new_total_phones;


  // Формируем новое значение обратно в xfields
  $new_xfields = '';
foreach ($data as $key => $value) {
    $new_xfields .= "||$key|$value";
  }
$new_xfields = substr($new_xfields, 2);

  // Обновляем бд
  $update_query = "UPDATE dle_post SET xfields='$new_xfields' WHERE id='$id'";
  $update_result = $db->query($update_query);

  if ($update_result) {
    echo "Данные успешно обновлены!";
  } else {
    echo "Ошибка при обновлении данных: " . $db->error;
  }
} else {
  echo "Ошибка при выполнении запроса: " . $db->error;
}

// Закрываем соединение с базой данных
$db->close();
?>
 
тут немного подкоректировали то, что я скидывал. Но как писал krdma - скинте данные из базы, чтобы понимать куда копать ;)
 
В новом коде будет лишний || вначале, нужно через implode

Не увидел обрезку потом, может и корректный, дайте данные
 
тут немного подкоректировали то, что я скидывал. Но как писал krdma - скинте данные из базы, чтобы понимать куда копать ;)
А, что именно скинуть. Сам архив с базой?

В новом коде будет лишний || вначале, нужно через implode

Не увидел обрезку потом, может и корректный, дайте данные
А, что именно скинуть. Сам архив с базой?
 
Та просто скрины или поле текстом и какие данные приходят в тотал фонс
 
само поле, которое не перезаписывается - это total-phones, указал на скрине 2, а перезаписываются цифровые значения.
 

Вложения

  • скрин 2.jpg
    скрин 2.jpg
    333,1 KB · Просмотры: 2
Если одним запросом одни данные перезаписываются а другие нет значит проблема в запросе, есть вероятность что просто не приходят корректные данные в скрипт
Что выдает var_dump($update_query);

Вставить надо перед
$update_result = $db->query($update_query);
 
Если одним запросом одни данные перезаписываются а другие нет значит проблема в запросе, есть вероятность что просто не приходят корректные данные в скрипт
Что выдает var_dump($update_query);

Вставить надо перед
$update_result = $db->query($update_query);
да я согласен, чтобы перезаписывались даже разными запросами, а не одним. данные перед отправкой вижу и они корректно отображаются. вы писали, что нужно вставить перед $update_result = $db->query($update_query);. А что так и не разобрался, что именно вставить перед $update_result = $db->query($update_query);.
 

Вложения

  • скрин 3.jpg
    скрин 3.jpg
    242,3 KB · Просмотры: 3
Код:
var_dump($_POST,$new_total_phones,$update_query);
die();
Вставить надо перед
$update_result = $db->query($update_query);
 
увидел код
 
Назад
Сверху