Обновить запись базы данных в плагине

Вопрос или проблема

Я разрабатываю плагин, и сейчас хочу обновить запись в таблице… Я использую этот код для получения данных из базы данных

Но мне нужно обновить данные… Также я отправляю скриншот базы данных…. Пожалуйста, помогите мне
введите описание изображения здесь

И здесь я пытаюсь его обновить

<?php
$id = $_GET['id'];
$dirname = dirname(__FILE__);
$root = false !== mb_strpos( $dirname, 'wp-content' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, 'wp-content' ) ) : $dirname;
require_once( $root . "wp-load.php" );


    global $wpdb;
     $post_name_table = $wpdb->prefix . "tropix_dmin";
     $query = "
        SELECT post_name1, id
        FROM $post_name_table
        WHERE id= $id";
    $post_name1_results = $wpdb->get_results($query); 



    $arr = serialize($_POST);

    global $wpdb;
        $data = array( 
            'post_name1'    => $arr,
            );

        $wpdb->update(
            $wpdb->prefix . 'tropix_dmin',
            $data
        );


?>

    <table class="widefat" style="border-radius:4px;">

  <tr>
    <th class="manage-column" scope="col" style="font-weight:bold; font-size:20px;">Поле</th>
    <th class="manage-column" scope="col" style="font-weight:bold; font-size:20px;">Значение</th>
  </tr>
  <?php foreach ( $post_name1_results as $post_names ) {

    $this_data = unserialize($post_names->post_name1);
    //echo "<pre>";
    //print_r($this_data);

    if($this_data != ""){

   ?>    <form action="" method="POST">
    <div class="form">
    <input type="submit" value="ПОДТВЕРДИТЬ">
  </div>
  <!--col2 закончился здесь-->
  </section>

  <tr class="alternate iedit">
    <td class="column-columnname">Адрес</td>
    <td class="column-columnname"><input type="text" value="<?php echo $this_data['Street_Address']; ?>" /></td>
  </tr>
 <?php }
  } ?>
    </table>

На самом деле сложно понять, что вы на самом деле делаете (рефакторинг также поможет).

Но для обновления вы можете попробовать:
Вам понадобится $id, чтобы указать, какую строку обновить.

$wpdb->update(
    $wpdb->prefix . 'tropix_dmin',
    array( 'post_name1' => $arr),
    array( 'id' => $id ),
    array( '%s' ),
    array( '%d' )
);

Ответ или решение

Для обновления записи в базе данных вашего плагина на WordPress, необходимо учесть несколько моментов, чтобы все работало корректно. Давайте разберемся с вашей проблемой и исправим недочеты в коде.

Шаг 1: Корректное получение данных

Вы уже используете $id для определения, какую запись нужно обновить. Это правильно, но убедитесь, что данные передаются безопасно, чтобы избежать SQL инъекций. Также, важно проверять, что $_POST имеет ожидаемые данные.

Шаг 2: Обновление записи в базе данных

Обновление данных в таблице происходит с помощью метода $wpdb->update(). Важно указать, какие данные нужно обновить и какую запись обновлять, используя уникальный идентификатор.

Вот пример кода с учетом всех рекомендаций:

<?php
// Подключаем необходимые файлы WordPress
$dirname = dirname(__FILE__);
$root = false !== mb_strpos($dirname, 'wp-content') ? mb_substr($dirname, 0, mb_strpos($dirname, 'wp-content')) : $dirname;
require_once($root . "wp-load.php");

// Получаем ID записи, которую мы хотим обновить
$id = intval($_GET['id']); // Приводим к целому числу для безопасности

global $wpdb;
$post_name_table = $wpdb->prefix . "tropix_dmin";

// Проверяем, отправлены ли данные формы
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $street_address = sanitize_text_field($_POST['street_address']); // Очищаем входные данные
    $data = array('post_name1' => serialize(array('Street_Address' => $street_address)));

    // Обновляем запись в базе данных
    $wpdb->update(
        $post_name_table,
        $data,
        array('id' => $id),
        array('%s'), // Формат для данных
        array('%d')  // Формат для идентификатора
    );
}

// Получаем данные для вывода формы
$query = $wpdb->prepare("SELECT post_name1, id FROM $post_name_table WHERE id = %d", $id);
$post_name1_results = $wpdb->get_results($query);
?>

<table class="widefat" style="border-radius:4px;">
    <tr>
        <th class="manage-column" scope="col" style="font-weight:bold; font-size:20px;">Поле</th>
        <th class="manage-column" scope="col" style="font-weight:bold; font-size:20px;">Значение</th>
    </tr>

    <?php foreach ($post_name1_results as $post_names): 
        $this_data = unserialize($post_names->post_name1);
        if ($this_data) { ?>
            <form action="" method="POST">
                <tr class="alternate iedit">
                    <td class="column-columnname">Улица</td>
                    <td class="column-columnname">
                        <input type="text" name="street_address" value="<?php echo esc_attr($this_data['Street_Address']); ?>" />
                    </td>
                </tr>
                <tr><td colspan="2"><input type="submit" value="Обновить" /></td></tr>
            </form>
        <?php }
    endforeach; ?>
</table>

Основные моменты кода:

  1. Безопасность данных: Используйте intval() для преобразования ID в целое число и sanitize_text_field() для очистки данных из формы перед записью в базу.

  2. Массив данных: В массив $data мы добавляем данные, которые вы хотите обновить. Убедитесь, что ключи массива соответствуют названиям полей в вашей таблице.

  3. Формат данных: В функции $wpdb->update() укажите массивы форматов для значений и для уникального идентификатора, чтобы избежать ошибок.

Заключение

С данным подходом вы сможете обновить необходимые записи в базе данных вашего плагина без ошибок. Убедитесь, что вы защищаете свой код от возможных уязвимостей и следуете лучшим практикам разработки. Если у вас есть еще вопросы или требуется дополнительная помощь, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...