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

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' );