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

sotex2

Постоялец
Регистрация
9 Июн 2014
Сообщения
75
Решения
1
Реакции
1
Подскажите правильный ли скрипт ниже для перезаписи доп. полей в базе данных на движке DLE. Задача такая,чтобы при помощи скрипта можно было перезаписать в доп.полях значения. есть три доп.поля - это title, total-phones, price и в них нужно у каждой новости перезаписать значения. в данный момент скрипт не работает, подскажите, что не так.

---------------------------------------------------------
Код:
<?php

$dbhost = "localhost"; // Хост
$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');

$_POST['id']    = $db->real_escape_string($_POST['id']);
$_POST['title']    = $db->real_escape_string($_POST['title']);
$_POST['price'] = $db->real_escape_string($_POST['price']);
$_POST['total-phones'] = $db->real_escape_string($_POST['total-phones']);


$title = $db->query("UPDATE dle_post  SET xfields='{$_POST['total-phones']}' WHERE id='{$_POST['id']}'");
$price = $db->query("UPDATE dle_post  SET xfields='{$_POST['price']}' WHERE id='{$_POST['id']}'");
$phones = $db->query("UPDATE dle_post  SET xfields='{$_POST['total-phones']}' WHERE id='{$_POST['id']}'");
 
с дле не особо знаком, но не ясно почему у Вас один и тот же запрос установки значение xfields трижды с подставлением разных значений, не логично.
должно быть что тотипа такого
PHP:
<?php

$dbhost = "localhost"; // Хост
$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']);
$title = $db->real_escape_string($_POST['title']);
$price = $db->real_escape_string($_POST['price']);
$total_phones = $db->real_escape_string($_POST['total-phones']);

// Выполняем обновление
$query = "UPDATE dle_post SET title='$title', total_phones='$total_phones', price='$price' WHERE id='$id'";
$result = $db->query($query);

if ($result) {
  echo "Запись успешно обновлена!";
} else {
  echo "Произошла ошибка при обновлении записи: " . $db->error;
}

// Закрываем соединение с базой данных
$db->close();
?>
только title, total_phones, price в запросе обновления должны быть согласно вашей таблице
 
Спасибо за ответ, но к сожалению не перезаписывает и выдает ошибку, указал на скрине.
 

Вложения

  • скрин - ошибка.jpg
    скрин - ошибка.jpg
    18,8 KB · Просмотры: 11
  • скрин.jpg
    скрин.jpg
    437,8 KB · Просмотры: 12
Спасибо за ответ, но к сожалению не перезаписывает и выдает ошибку, указал на скрине.
аа вот как интересно :) тогда код который я написал не сработает, естественно ) по идее, следующиее будет работать верно, надеюсь вы базу бекапите, а не на живой эксперементируете :)

PHP:
<?php

$dbhost = "localhost"; // Хост
$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_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) == 3) {
      $data[trim($parts[1])] = trim($parts[2]);
    }
  }

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

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

  // Обновляем бд
  $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();
?>
 
К сожалению почему то не хочет перезаписывать значения в БД, что то не хватает.
 
к сожалению больше не смогу подсказать, так как у меня нет DLE. Если я верно понял формат xfields, то вроде как должно работать ). Скрипт обрабатывается без Ошибок, а в самой базе по id то го же поста который вы передавали, изменений нет?
 
сейчас опять попробовал перезаписать, там после запуска затираются все данные, даже постер и название новости.
 
Покажите изначальные данные и данные которые отображаются после перезаписи.
Вероятно есть проблема с этим местом, дописывает лишние || в конце а может еще и посреди поля, попробуйте переписать на implode
PHP:
foreach ($data as $key => $value) {
    $new_xfields .= "||$key|$value||";
}
 
изначальные данные обычные цифры, а после запуска все чисто, все значения затираются.
что значит попробуйте переписать на implode, я не силен в этом.
 
покажите данные в базе до перезаписи и после, как вы показывали чуть ранее.
 

Вложения

  • 1711018432397.png
    1711018432397.png
    905,8 KB · Просмотры: 3
Назад
Сверху