Intereting Posts
Как отсоединить текстовый редактор с именами элементов textarea пропуская больше, чем одно значение слизней в таксономии, используя переменную как сделать динамический субдомен для регистрации каждого пользователя? Различают два экземпляра admin-ajax.php ограничить количество слов, отображаемых в индексе the_content по индексу Что такое параметр ID для пользовательских типов сообщений в query_posts? Изменение в файлах таблиц admin не влияет на область администратора Настроить сообщение об ошибке WooCommerce Почему «страницы блога больше не отображаются» мешают моей пользовательской wp_query? Изменение запроса var в pre_get_posts не поддерживается Добавить опцию в календарь событий Плагины отключены и настройки «отключены» после изменения прав доступа к файлам Сохранение данных о ценах продукта в базе данных Пользовательский тип сообщения не отображается в списке admin Как прекратить отсоединение изображений при удалении сайта или пользователя

Как остановить повторное заполнение формы на странице обновления

Привет У меня есть форма, которая добавляет вложения в сообщение, однако, когда в сообщениях формы явно не отображается сообщение с новым вложением, эхом, «ваш файл был загружен». Когда пользователь обновляет страницу (чтобы попытаться показать новое приложение), сообщения формы снова появятся!

Возможно ли (1) остановить публикацию формы при обновлении, (2) автоматически обновить страницу, чтобы отобразить сообщение с его новым вложением? (2 лучше)

<?php $post_id = $post->ID; if ( isset( $_POST['html-upload'] ) && !empty( $_FILES ) ) { require_once(ABSPATH . 'wp-admin/includes/admin.php'); $id = media_handle_upload('async-upload', $post_id); //post id of Client Files page unset($_FILES); if ( is_wp_error($id) ) { $errors['upload_error'] = $id; $id = false; } if ($errors) { echo "<p>There was an error uploading your file.</p>"; } else { echo "<p>Your file has been uploaded.</p>"; } } ?> <form id="file-form" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="POST"> <p id="async-upload-wrap"><label for="async-upload">upload</label> <input type="file" id="async-upload" name="async-upload"> <input type="submit" value="Upload" name="html-upload"></p> <p><input type="hidden" name="post_id" id="post_id" value="<?php echo $post_id ?>" /> <?php wp_nonce_field('client-file-upload'); ?> <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" /></p> <p><input type="submit" value="Save all changes" name="save" style="display: none;"></p> </form> 

Благодаря! 🙂

Вместо …

 } else { echo "<p>Your file has been uploaded.</p>"; } 

… перенаправить на другой адрес:

 } else { $new_url = add_query_arg( 'success', 1, get_permalink() ); wp_redirect( $new_url, 303 ); } 

Код состояния 303 запускает запрос GET :

Этот метод существует прежде всего для того, чтобы позволить выходному скрипту, инициированному POST, перенаправлять агент пользователя на выбранный ресурс. Новый URI не является заменой ссылки на первоначально запрошенный ресурс. Ответ 303 НЕ ДОЛЖЕН кэшироваться, но ответ на второй (перенаправленный) запрос может быть кэшируемым.

В обработчике формы сначала проверьте, если установлено $_GET['success'] а его значение равно 1 , а затем напечатайте сообщение об успешном завершении. Посетитель может перезагрузить эту страницу снова и снова – и ничего не будет отправлено.

У меня была та же проблема, и это было «сложно» из-за того, что я перенаправляю все URL-адреса в один .php-файл. Оказалось, все, что я должен был сделать, чтобы решить, было вставить следующий фрагмент кода, прежде чем какой-либо html будет записан на страницу.

 <?php if (isset($_POST['mypostvar']) && isset($_SERVER['REQUEST_URI'])) { [process the post data in 'mypostvar'] header ('Location: ' . $_SERVER['REQUEST_URI']); exit(); } ?> 

Это будет перенаправлено на ту же страницу после того, как postdata будет обработана так, как вы хотите. После перенаправления исходные postdata исчезают и не будут вызывать повторную передачу. Функция 'header ()' будет работать, только если вы вставляете ее, прежде чем что-либо будет записано на страницу. exit () необходимо.

Перед размещением заголовка () вы должны обработать данные сообщения.

Я решил это, используя действие template_redirect (либо в плагине aa, либо в вашем файле functions.php темы).

 add_action('template_redirect','myfunction') ; function myfunction() { global $post; $post_id = $post->ID; if ( isset( $_POST['html-upload'] ) && !empty( $_FILES ) ) { require_once(ABSPATH . 'wp-admin/includes/admin.php'); $id = media_handle_upload('async-upload', $post_id); //post id of Client Files page unset($_FILES); if ( is_wp_error($id) ) { $errors['upload_error'] = $id; $id = false; } } $error = ($errors) ? 1 : 0; wp_redirect( "/?p={$post_id}?errors={$error}",301); } с add_action('template_redirect','myfunction') ; function myfunction() { global $post; $post_id = $post->ID; if ( isset( $_POST['html-upload'] ) && !empty( $_FILES ) ) { require_once(ABSPATH . 'wp-admin/includes/admin.php'); $id = media_handle_upload('async-upload', $post_id); //post id of Client Files page unset($_FILES); if ( is_wp_error($id) ) { $errors['upload_error'] = $id; $id = false; } } $error = ($errors) ? 1 : 0; wp_redirect( "/?p={$post_id}?errors={$error}",301); } 

Затем на вашей странице вы можете проверить наличие ошибок

 if ($_GET['errors']) { echo "<p>There was an error uploading your file.</p>"; } else { echo "<p>Your file has been uploaded.</p>"; } 

(Я не тестировал этот код … он должен дать вам хорошую отправную точку).

Вы также можете проверить для $_SERVER['REQUEST_METHOD'] === 'POST' чтобы убедиться, что страница была обновлена ​​через POST перед обработкой формы.

 if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // Do Stuff } 

более простым способом является удаление действия из вашей формы и скрытое действие, например, например:

 <html> <form action="" method="post><input type="text" name="name" /> <input type="submit" value="Submit" /> <input type="hidden" name="action" value="Submit" /> </form> </html> 

попросите своего контролера проверить действительность и для представлений, чтобы проверить, была ли отправлена ​​форма:

 <?php if (isset($_POST['action']) && $_POST['action'] == 'Submit'){ //you should add code to validate user input here //if all ok submit the form header('Location: .'); //redirects to the controller without resubmitting } ?> 

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

Лучший метод, который я нашел, – использование javascript и css. Общий заголовок метода перенаправления php («Местоположение: http://www.yourdomain.com/url ); будет работать, но это вызывает предупреждение «Предупреждение: не удается изменить информацию заголовка – уже отправленные заголовки» в разных рамках и cms, таких как wordpress, drupal и т. д. Поэтому мое предложение состоит в том, чтобы следовать приведенному ниже коду

 echo '<style>body{display:none;}</style>'; echo '<script>window.location.href = "http://www.siteurl.com/mysuccesspage";</script>'; exit; 

Тег стиля важен, иначе пользователь может почувствовать, что страница загружена дважды. Если мы используем тег стиля с дисплеем тела none, а затем обновляем страницу, то пользовательский интерфейс будет таким же, как и заголовок php («Местоположение: ….);

Я надеюсь, это поможет 🙂

простой и простой способ сделать это в php. пример здесь:

Не забудьте теги html (эта форма не позволит это здесь, поэтому я использую [this])

 $firstname = $post[firstname] $lastname = $post[lastname] [form action="here.php" method="post"] first name[input type='firstname' name='firstname'] last name[input type='text' name='lastname'] [input type=submit value=submit] [/form] if($firstname==""||$lastname=="") { echo"the firstname and lastname are empty"; } else { mysql_query("YOUR DATABASE INSERT HERE"); header("Location:here.php"); } 

это то, как сохранить данные в базе данных, дважды опубликовать те же данные при обновлении страницы