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

12
S2
На сайте с 12.06.2011
Offline
112
257

Подскажите правильный ли скрипт ниже для перезаписи доп. полей в базе данных на движке 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']}'");


W1
На сайте с 22.01.2021
Offline
285
#1

В редакторе постов есть кнопочка "Код", которая служит для вставки кода.
Если акк не купленный, то за 12 лет пребывания на Сёрче можно было уже и освоить это.

И скрипт - вообще отстойный. Там нет доп. полей, которые надо перезаписать.

Мой форум - https://webinfo.guru –Там я всегда на связи
Виктор Горняков
На сайте с 25.09.2006
Offline
162
#2
sotex2 :

Подскажите правильный ли скрипт ниже для перезаписи доп. полей в базе данных на движке 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']}'");

$db->query("UPDATE dle_post SET xfields ='".$_POST['total-phones']."', xfields ='".$_POST['price']."', xfields ='".$_POST['total-phones']."' WHERE id='".$_POST['id']."'"); 
XMLSeo - поисковая выдача Яндекс, Wordstat, Google через API - https://xmlseo.ru
S2
На сайте с 12.06.2011
Offline
112
#3
webinfo #:

В редакторе постов есть кнопочка "Код", которая служит для вставки кода.
Если акк не купленный, то за 12 лет пребывания на Сёрче можно было уже и освоить это.

И скрипт - вообще отстойный. Там нет доп. полей, которые надо перезаписать.

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


<?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_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();
?>
jpg j7hzy.jpg
S2
На сайте с 12.06.2011
Offline
112
#4
не по теме
S2
На сайте с 12.06.2011
Offline
112
#5
W1
На сайте с 22.01.2021
Offline
285
#6
sotex2 #:
мне  прислали еще один код

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

Непонятно, для чего и откуда появилась необходимость вот этого с числом 3, вместо нормального кода создания нужного массива данных:

if (count($parts) == 3) {
      $data[trim($parts[1])] = trim($parts[2]);
    }

Как бы напрашивается сделать так:

if (count($parts) == 2) {
      $data[$parts[0]] = $parts[1];
    }

И явный косяк вот здесь:

foreach ($data as $key => $value) {
    $new_xfields .= "||$key|$value||";
  }

Скорее всего, надо как-то так:

foreach ($data as $key => $value) {
    $new_xfields .= "||$key|$value";
  }
$new_xfields = substr($new_xfields, 2);
S2
На сайте с 12.06.2011
Offline
112
#7
webinfo #:

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

Непонятно, для чего и откуда появилась необходимость вот этого с числом 3, вместо нормального кода создания нужного массива данных:

Как бы напрашивается сделать так:


И явный косяк вот здесь:

Скорее всего, надо как-то так:

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


W1
На сайте с 22.01.2021
Offline
285
#8
sotex2 #:
другие поля не перезаписываются, например тайтл и total-phones

Ну строки с  total-phones в скрипте просто закомментированы - с этим всё ясно. А насчёт title - непонятно, что имеется в виду. Я, к сожалению, без понятия, что вам хочется сделать и что конкретно не получается.

S2
На сайте с 12.06.2011
Offline
112
#9
webinfo #:

Ну строки с  total-phones в скрипте просто закомментированы - с этим всё ясно. А насчёт title - непонятно, что имеется в виду. Я, к сожалению, без понятия, что вам хочется сделать и что конкретно не получается.

У меня сейчас на данный момент есть 2 доп.поля - это price и total-phones . После запуска скрипта доп.поле - price перезаписывается, а вот доп.поле - total-phones ни как не хочет. он раскоментирован, но перезаписи нет, может в коде синтаксическая ошибка. само доп.поле прописан так на сайте - total-phones , а в коде там не через дефис, а через нижнее подчеркивание. может в этом дело и при запуске скрипта он не видит.

W1
На сайте с 22.01.2021
Offline
285
#10
sotex2 #:
в коде там не через дефис, а через нижнее подчеркивание. может в этом дело и при запуске скрипта он не видит

Естественно.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий