За последние 24 часа нас посетили 16779 программистов и 1722 робота. Сейчас ищут 1659 программистов ...

Как доработать скрипт

Тема в разделе "MySQL", создана пользователем sotex2, 7 янв 2025.

  1. sotex2

    sotex2 Активный пользователь

    С нами с:
    28 сен 2019
    Сообщения:
    20
    Симпатии:
    0
    Доброго времени суток. Подскажите как в рабочий скрипт ниже добавить еще один параметр. Сам скрипт преднозначен для перезаписи значений в базе данных. сейчас скрипт переписывает значения из дополнительных полей, а нужно еще добавить какой-то параметр для перезаписи тайтла (заголовка статьи). сайт на движке DLE (скрин приложил).

    Код (Text):
    1. <?php
    2.  
    3. $dbhost = "localhost"; // Хост1
    4. $dbuser = ""; // Пользователь баз данных
    5. $dbpassword = ""; // Пароль
    6. $dbname = ""; // Имя баз данных
    7.  
    8.  
    9. // Подключение к базе
    10. $db = new mysqli($dbhost, $dbuser, $dbpassword, $dbname);
    11.  
    12. // Проверка подключения с баз данных
    13. if ($db->connect_errno) {
    14.   echo '<p>Не удалось подключиться к базе данных!</p>';
    15.   echo $db->connect_error;
    16.   exit;
    17. }
    18.  
    19. $db->set_charset('utf8');
    20.  
    21. // Экранируем
    22. $id = $db->real_escape_string($_POST['id']);
    23. $new_companies = $db->real_escape_string($_POST['companies']);
    24. $new_price = $db->real_escape_string($_POST['price']);
    25. $new_total_phones = $db->real_escape_string($_POST['total_phones']);
    26. $new_unique_email = $db->real_escape_string($_POST['unique_email']);
    27. $new_mobile_numbers = $db->real_escape_string($_POST['mobile_numbers']);
    28. $new_database_update = $db->real_escape_string($_POST['database_update']);
    29. $new_procent = $db->real_escape_string($_POST['procent']);
    30. $new_otrasli = $db->real_escape_string($_POST['otrasli']);
    31. $new_dop_podkategori = $db->real_escape_string($_POST['dop_podkategori']);
    32. $new_title_fulstor = $db->real_escape_string($_POST['title_fulstor']);
    33. $new_price_percent = $db->real_escape_string($_POST['new_price_percent']);
    34. $new_title = $db->real_escape_string($_POST['title']);
    35. $new_site_compani = $db->real_escape_string($_POST['site_compani']);
    36. $new_fax = $db->real_escape_string($_POST['fax']);
    37. $new_otpravka = $db->real_escape_string($_POST['otpravka']);
    38.  
    39. // Получаем значения xfields
    40.  
    41. $query = "SELECT xfields FROM dle_post WHERE id='$id'";
    42.  
    43. $result = $db->query($query);
    44.  
    45. if ($result) {
    46.   $row = $result->fetch_assoc();
    47.   $xfields = $row['xfields'];
    48.  
    49.   // Разбиваем xfields на пары
    50.   $pairs = explode('||', $xfields);
    51.   $data = [];
    52.   foreach ($pairs as $pair) {
    53.     $parts = explode('|', $pair);
    54.     if (count($parts) == 2) {
    55.       $data[$parts[0]] = $parts[1];
    56.     }
    57.   }
    58.  
    59.   // Меняем нужные значения
    60.   $data['price'] = $new_price;
    61.   $data['companies'] = $new_companies;
    62.   $data['total-phones'] = $new_total_phones;
    63.   $data['mobile-numbers'] = $new_mobile_numbers;
    64.   $data['unique-email'] = $new_unique_email;
    65.   $data['database-update'] = $new_database_update;
    66.   $data['procent'] = $new_procent;
    67.   $data['otrasli'] = $new_otrasli;
    68.   $data['dop-podkategori'] = $new_dop_podkategori;
    69.   $data['title-fulstor'] = $new_title_fulstor;
    70.   $data['title'] = $new_title;
    71.   $data['fax'] = $new_fax;
    72.   $data['site-compani'] = $new_site_compani;
    73.   $data['otpravka'] = $new_otpravka;
    74.   $data['new_price_percent'] = $new_price_percent;
    75.  
    76.  
    77.   // Формируем новое значение обратно в xfields
    78.   $new_xfields = '';
    79. foreach ($data as $key => $value) {
    80.     $new_xfields .= "||$key|$value";
    81.   }
    82. $new_xfields = substr($new_xfields, 2);
    83.  
    84.   // Обновляем бд
    85. $update_query = "UPDATE dle_post SET xfields='$new_xfields' WHERE id='$id'";
    86.    $update_result = $db->query($update_query);
    87.  
    88.   if ($update_result) {
    89.     echo "Данные успешно обновлены!";
    90.   } else {
    91.     echo "Ошибка при обновлении данных: " . $db->error;
    92.   }
    93. } else {
    94.   echo "Ошибка при выполнении запроса: " . $db->error;
    95. }
    96.  
    97. // Закрываем соединение с базой данных
    98. $db->close();
    99. ?>
    значен для перезаписи значений в базе данных. сейчас скрипт переписывает значения из дополнительных полей, а нужно еще добавить какой-то параметр для перезаписи тайтла (заголовка статьи). сайт на движке DLE (скрин приложил).
     

    Вложения:

    • скрин.jpg
      скрин.jpg
      Размер файла:
      273,8 КБ
      Просмотров:
      1
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.492
    Симпатии:
    281
    Составить SQL-запрос вручную. Отладить его в phpMyAdmin
    Затем сгенерировать его с помощью PHP из данных формы
     
  3. sotex2

    sotex2 Активный пользователь

    С нами с:
    28 сен 2019
    Сообщения:
    20
    Симпатии:
    0
    всего то надо было добавить один параметр title, просто не знал как правильно синтаксис прописать.

    // Обновляем бд
    $update_query = "UPDATE dle_post SET xfields='$new_xfields', title='$new_title' WHERE id='$id'";
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    752
    Адрес:
    Татарстан
    да здравствуют SQL инъекции )))
     
    don.bidon нравится это.
  5. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    88
    Симпатии:
    18
    miketomlin нравится это.
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    Но согласен, что для POST'а это изврат, тем более что этого недостаточно:
     
  7. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.492
    Симпатии:
    281
    Ну, есть идейка как это дело раз и навсегда решить - добавить в printf() сотоварищи спецификатор типа %q
    Как бы очевидное решение. Но комьюнити не чешется. Предпочитая изобретать велосипеды, превращая самый массовый некогда продукт в недоджаву.
     
    #7 Drunkenmunky, 12 янв 2025
    Последнее редактирование: 12 янв 2025