Intereting Posts
Функция «Крюк» выводит результат дважды Есть ли способ инициировать автоматический импорт резервной копии WP для создания нового многосайтового сайта WP? Выполните короткий код при нажатии на изображение Firebug говорит, что jQuery загружен, но $ () и jQuery () не определены Как переписать пользовательский тип сообщения с помощью пользовательских URL-адресов таксономии? Отображать пользовательский тип сообщения с коротким кодом Получать сообщение или страницу раньше CSS не применяется в admin Как я могу сделать мой CPT прочитанным на странице- * post-type * .php? Как получить эти данные с помощью ajax json? Проблема создания настраиваемого фильтра для столбцов администратора cpt Как использовать WordPress Color Picker API в пользовательском типе сообщений Metabox Как получить мой пользовательский тип сообщения для отображения в последних сообщениях с помощью «pre_get_posts» Как изменить параметр ширины по умолчанию встроенного видео в wordpress? API REST: переменные заголовка отправки / получения

вставить данные из формы :: Предупреждение Пустой запрос mysqli :: query ()

Я, к сожалению, получаю предупреждение о пустом запросе, и я не могу найти проблему, надеюсь, вы мне поможете.

mysqli-> query () -> $ result = $ conn-> query ($ sql); где он говорит мне, что я делаю что-то неправильно.

<?php global $wpdb; if ( isset( $_POST['submit'] ) ){ $servername = "localhost"; $username = "root"; $password = "****"; $dbname = "***"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $user = $current_user->ID; $time = new DateTime('now'); $reg_id = $wpdb->escape(trim($_POST['reg_id'])); $dato = $wpdb->escape(trim($_POST['$time'])); $fiske_vægt = $wpdb->escape(trim($_POST['fiske_vægt'])); $fiske_længde = $wpdb->escape(trim($_POST['fiske_længde'])); $reg_user_id = $wpdb->escape(trim($_POST['$user'])); $sql = $wpdb->insert( 'wp_registreringer', array( 'dato' => apply_filters('pre_register_dato', $dato), 'fiske_vægt' => apply_filters('pre_register_fiske_vægt', $fiske_vægt), 'fiske_længde' => apply_filters('pre_register_fiske_længde', $fiske_længde), 'reg_user_id' => apply_filters('pre_register_reg_user_id', $user) ) ); $result = $conn->query($sql); 

Моя форма

 <form method="post"> <h3>Don't have an account?<br /> Create one now.</h3> <p><label>længden</label></p> <p><input type="number" value="" name="fiske_længde" id="fiske_længde" />cm</p> <p><label>vægten</label></p> <p><input type="number" value="" name="fiske_vægt" id="fiske_vægt" />kg</p> <p><label>dato</label></p> <p><input type="datetime-local" name="dato" value="<?php echo date("Ymd\TH:i:s",time()); ?>"/></p> <button type="submit" name="btnregister" class="button" >Submit</button> <input type="hidden" name="submit" value="submit" /> </form> 

Solutions Collecting From Web of "вставить данные из формы :: Предупреждение Пустой запрос mysqli :: query ()"

В коде есть много ошибок:

  1. В вашем запросе вы устанавливаете reg_user_id для $user , когда похоже, что вы хотели использовать $reg_user_id , что, вероятно, является проблемой, потому что вы устанавливаете $user в $current_user->ID хотя $current_user не существует.
  2. $_POST['reg_id'] не существует в вашей форме, и я понятия не имею, что вы пытаетесь сделать с $_POST['$user'] и $_POST['$time'] .
  3. Вы не должны избегать значений при использовании $wpdb->insert() .
  4. Вы вставляете $wpdb , но пытаетесь запустить запрос из $conn , передав его $sql хотя $wpdb->insert() не возвращает SQL.

Вот код, который выполняет те же функции без этих проблем:

 function wpse_283721_handle_form() { global $wpdb; if ( empty( $_POST['submit'] ) ) { return; } if ( ! is_user_logged_in() ) { return; } $current_user = wp_get_current_user(); $fiske_vægt = trim( $_POST['fiske_vægt'] ); $fiske_længde = trim( $_POST['fiske_længde'] ); $wpdb->insert( $wpdb->prefix . 'registreringer', array( 'dato' => new DateTime( 'now' ), 'fiske_vægt' => apply_filters( 'pre_register_fiske_vægt', $fiske_vægt ), 'fiske_længde' => apply_filters( 'pre_register_fiske_længde', $fiske_længde ), 'reg_user_id' => $current_user->ID, ) ); } add_action( 'init', 'wpse_283721_handle_form' ); 

Обратите внимание на следующее:

  1. Я помещал функцию для обработки формы в крючок, а не в шаблон. Из вашего кода неясно, как вы это сделали, но это было бы правильно.
  2. Поскольку вы используете идентификатор текущего пользователя в коде, я не приступаю к обработке формы, если пользователь не вошел в систему.
  3. Я уверен, чтобы получить текущего пользователя с wp_get_current_user() .
  4. Я не использую $wpdb->escape() по двум причинам: во-первых, он устарел и не должен использоваться, а во-вторых, $wpdb->insert() выполнит экранирование для вас.
  5. Я не использовал дату, отправленную с формой, так как сервер может просто установить дату при вставке. Если вы измените таблицу, чтобы установить значение по умолчанию столбца dato в текущее время, вам даже этого не нужно.
  6. Я использовал $wpdb->prefix для обеспечения правильного имени таблицы. Это также нужно делать, когда таблица создается, если вы делаете это в коде.

Но все еще есть вещи, которые вы, вероятно, захотите изучить:

  1. Используйте что-то более безопасное или уникальное, чем $_POST['submit'] чтобы узнать, отправлена ​​ли ваша форма. Возможно, даже нонс .
  2. Более валидация или санитария. Подобно тому, как все поля присутствуют, и гарантируя, что они являются ожидаемыми типами значений, например. числа – это числа.