Intereting Posts
Есть ли способ получить почтовые поля, используя `transition_post_status` WordPress открывает js-файлы в качестве каталога. Путь прав Разрешить пользователю «edit_others_posts» сохранять только, а не публиковать Последние сообщения на статической домашней странице Как получить vim для автозаполнения функций WordPress API? Поле поиска, которое позволяет использовать опции «Соответствовать любому ключевому слову» или «Соответствовать всем ключевым словам» Как получить медиа-объекты Как отредактировать опубликованные «by» и «on» в сообщении meta Как заставить дочернюю тему игнорировать шаблон родительских тем Искать только в заголовке Как получить доступ к базе данных WP внутри ipn.php? Если для текущего дня и месяца нет сообщений, покажите следующий доступный день сообщений Правильный контекст для wp_remote_post () Как точно * работает * модульное тестирование для тем? Rewrite API – добавление параметра перед запуском

Ошибка при вводе значения формы в базу данных

hi я решил хранить несколько значений в отдельной таблице, поэтому я создал его, и теперь я использовал форму для хранения значений, но когда я обрабатываю эту форму, я получаю ошибку. Trying to get property of non-object и Trying to get property of non-object Call to a member function insert() on a non-object Даже при том, что я объявлен global $wpdb;

Вот форма

 <form action="formaction.php" method="post"> <input type="text" name="name1" value=""> <input type="text" name="name2" value=""> <input type="submit" name="submit" value="add"> </form> 

formaction.php

 if(isset($_POST['name1'])) { $db_data1=$_POST['name1']; } if(isset($_POST['name2'])) { $db_data2=$_POST['name2']; } function res() { global $wpdb,$db_data1,$db_data2; $my_table_name=$wpdb->prefix."my_table"; $name1=$db_data1; $name2=$db_data2; $rows_affected = $wpdb->insert( $my_table_name, array( 'first' => $name1, 'last' => $name2 ) ); } res(); 

в соответствии с ошибкой $ wpdb не является объектом, но я использовал global, что такое ошибка в этом коде? я делаю правильно?

Solutions Collecting From Web of "Ошибка при вводе значения формы в базу данных"

Вы отправляете непосредственно в formaction.php , так как такой WordPress никогда не загружается и поэтому у вас нет доступа к любому из его API, включая API базы данных, хранящийся в global $wpdb (который вызывает ошибку). Я бы рекомендовал хранить все в WordPress … и полезным методом обработки формы является использование admin-post.php (если вы знакомы с обработкой ajax в WordPress – это аналогичная идея).

Идея состоит в том, что вы публикуете URL-адрес

  .../wp-admin/admin-post.php 

который вы можете получить через admin_url('admin-post.php'); , И вы отправляете – вместе с любыми данными и nonce – уникальное значение для переменной action . (Скажем, wpse111797_form_submitted ). Когда форма отправляется admin-post.php , WordPress запускает hook:

  • admin_post_wpse111797_form_submitted – если вы вошли в систему
  • admin_post_nopriv_wpse111797_form_submitted – если вы вышли из системы

Таким образом, ваша форма может выглядеть так:

 <form action="<?php echo admin_url('admin-post.php'); ?>" method="post"> <input type="hidden" name="action" value="wpse111797_form_submitted"> <input type="text" name="name1" value=""> <input type="text" name="name2" value=""> <input type="submit" name="submit" value="add"> </form> 

Пожалуйста, не забудьте использовать nonces для проверки намерения .

Затем вы можете подключить любой из вышеперечисленных крючков (или обоих) в зависимости от того, хотите ли вы обрабатывать заявки на формы от зарегистрированных пользователей, гостей или и того и другого.

 function wpse111797_form_handler(){ global $wpdb; $name1 = isset( $_POST['name1'] ) ? $_POST['name1'] : null; $name2 = isset( $_POST['name2'] ) ? $_POST['name2'] : null; //TODO Check nonces & permissions first! $my_table_name=$wpdb->prefix."my_table"; $rows_affected = $wpdb->insert( $my_table_name, array( 'first' => $name1, 'last' => $name2 ) ); //Redirect user to a 'success' page, or from back whence they came! } //Attach callback to hook (in this case, the hook for logged-in users) add_action( 'admin_post_wpse111797_form_submitted', 'wpse111797_form_handler' );