sotex2

Рейтинг
126
Регистрация
12.06.2011
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
Да увидел, неправильно ввел регулярку. Еще раз спасибо.
br.almighty #:

Опции попереключайте сбоку от регулярки, я не помню что каждая из них делает. Можете сами убедиться, что регулярка работает как надо.

https://regexr.com/7ffbg

Спасибо за уделенное время, но в саблайме, перепробовал массу вариантов, и при запуске разделяет  и между цифрами и точками. Помогли кодом с другого форума.

ExpandWrap offLine numbers
((\d+\.?)+)([^0-9. ]\S+)
Строка замены просто
ExpandWrap offLine numbers
$1 $3

br.almighty #:

Показывайте что навводили.

Прям полный скрин показывайте (как я выше).

Пробел то в замене поставили? Я его как бы специально выделил даже. После $1 который.

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

jpg ll0ta.jpg
br.almighty #:
не работает.
alexx10 #:
Вы же выводите цифры на страницу? Точно также выведите текст, а между ними вставьте пробел
код в миллион строк и хотелось бы этот код через регулярку прогнать и потом на сайте уже новость оформить. ручками делать это годы уйдут.

Подскажите каким способом с помощью HTML . мне не принципиально как это будет, но на данный момент я кусок кода вставляю в редактор  Sublime Text (код типа re:([0-9]+) ), а не через всякие функции например код ниже.

int a = 0;
CString d = "";
while (ad [a]  &&  ad [a + 1])
{
   if (ad [a] <= '9'  &&  ad [a + 1] >= 'a') d += ' ';
   d += ad [a];
   a++;
} 
webinfo #:

Несмотря на то, что ТС так и не ответил на мой вопрос по структуре поля xfields (наверное, исходя из каких-то своих принципов), рискну всё-таки отметить, что по моим сведениям, разделителем между дополнительными полями является запятая.
И да, нельзя полагаться на то, что дополнительное поле poster есть в каждом посте. Его там может и не быть. И тогда вы влепите poster вместо другого дополнительного поля, первого по порядку.

у каждой новости постер и без постера никак не получиться сделать новость. вопрос решен уже, где писал, что после перезаписи в мета тегах выводятся доп. поля. это потому что не было текста в новости и брались значения из доп.полей.
webinfo #:

По причине своей неправильности. Отвечать более развёрнуто нет смысла, потому что специалист сам увидит, что там не так, а неспециалисту рассказывать бесполезно.

Давай так: в этом коде как минимум 3 неправильности. Попробуй их найти - это будет нечто вроде квеста, так интереснее.

да уж я с этим квестом 2 сутки маюсь.

код ниже сейчас работает, но только после перезаписи открываю в браузере код ctrl + u в перезаписанной новости и там в мета тегах перечисляются все доп. поля, которые были заполнены в новости. скрин приложил, там цифры на бум были прописаны для теста. как можно поправить код?


$xfields_row_obj = $db->query("SELECT xfields FROM dle_post WHERE id='{$_POST['id']}'");

$xfields_row = $xfields_row_obj->fetch_assoc();

$splited_xfields = explode('|', $xfields_row['xfields']);

$splited_xfields[1] = $_POST['poster']; // для poster. он первый, поэтому от нуля

$updated_xfields = implode('|', $splited_xfields);

$poster = $db->query("UPDATE dle_post SET xfields='{$updated_xfields}' WHERE id='{$_POST['id']}'");


jpg dwftx.jpg
Всего: 97