Вопрос или проблема
Я разрабатываю плагин, и сейчас хочу обновить запись в таблице… Я использую этот код для получения данных из базы данных
Но мне нужно обновить данные… Также я отправляю скриншот базы данных…. Пожалуйста, помогите мне
И здесь я пытаюсь его обновить
<?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>
Основные моменты кода:
-
Безопасность данных: Используйте
intval()
для преобразования ID в целое число иsanitize_text_field()
для очистки данных из формы перед записью в базу. -
Массив данных: В массив
$data
мы добавляем данные, которые вы хотите обновить. Убедитесь, что ключи массива соответствуют названиям полей в вашей таблице. -
Формат данных: В функции
$wpdb->update()
укажите массивы форматов для значений и для уникального идентификатора, чтобы избежать ошибок.
Заключение
С данным подходом вы сможете обновить необходимые записи в базе данных вашего плагина без ошибок. Убедитесь, что вы защищаете свой код от возможных уязвимостей и следуете лучшим практикам разработки. Если у вас есть еще вопросы или требуется дополнительная помощь, не стесняйтесь спрашивать!