В редакторе постов есть кнопочка "Код", которая служит для вставки кода. Если акк не купленный, то за 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();?>
Опции попереключайте сбоку от регулярки, я не помню что каждая из них делает. Можете сами убедиться, что регулярка работает как надо.
https://regexr.com/7ffbg
Спасибо за уделенное время, но в саблайме, перепробовал массу вариантов, и при запуске разделяет и между цифрами и точками. Помогли кодом с другого форума.
ExpandWrap offLine numbers ((\d+\.?)+)([^0-9. ]\S+) Строка замены просто ExpandWrap offLine numbers $1 $3
Показывайте что навводили.
Прям полный скрин показывайте (как я выше).
Пробел то в замене поставили? Я его как бы специально выделил даже. После $1 который.
скрин приложил. после выполнения, в документе между цифрами и точкой тоже пробелы, а нужно только, чтобы пробел был после последней цифры и первой буквой.
Подскажите каким способом с помощью 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++; }
Несмотря на то, что ТС так и не ответил на мой вопрос по структуре поля xfields (наверное, исходя из каких-то своих принципов), рискну всё-таки отметить, что по моим сведениям, разделителем между дополнительными полями является запятая.И да, нельзя полагаться на то, что дополнительное поле poster есть в каждом посте. Его там может и не быть. И тогда вы влепите poster вместо другого дополнительного поля, первого по порядку.
По причине своей неправильности. Отвечать более развёрнуто нет смысла, потому что специалист сам увидит, что там не так, а неспециалисту рассказывать бесполезно.
Давай так: в этом коде как минимум 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']}'");