ПУБЛИКАЦИЯ без перенаправления с помощью PHP


У меня есть простая форма для списка рассылки, которую я нашел по адресу http://www.notonebit.com/projects/mailing-list/

Проблема в том, что когда я нажимаю отправить, все, что я хочу, это отобразить сообщение в текущей форме с надписью "Спасибо за подписку" без какого-либо перенаправления. Вместо этого он направляет меня на совершенно новую страницу.

<form method="POST" action="mlml/process.php"> 
    <input type="text" name="address" id="email" maxlength="30" size="23"> 
    <input type="submit" value="" id="submit"name="submit"  >
</form>     
Author: LazyOne, 2011-07-24

8 answers

Вам понадобится AJAX для отправки данных на ваш сервер. Лучшее решение - внедрить регулярную публикацию, чтобы это, по крайней мере, работало. Затем вы можете подключиться к этому с помощью Javascript. Таким образом, публикация будет работать (с обновлением), когда у кого-то нет Javascript.

Если найдена хорошая статья о размещении форм с помощью AJAX с использованием jQuery .

Кроме того, вы можете разместить данные на том же URL-адресе. Библиотека jQuery добавит заголовок HTTP_X_REQUESTED_WITH, из которого вы можете проверить значение в вашем сценарии на стороне сервера. Это позволит вам отправлять сообщения по одному и тому же URL-адресу, но возвращать другое значение (всю страницу или только конкретный ответ, в зависимости от того, является запрос AJAX или нет). Таким образом, вы действительно можете получить URL-адрес из своей формы, и вам не нужно будет также кодировать его в своем Javascript. Это позволяет вам написать более удобный для обслуживания сценарий и может даже привести к созданию универсального метода обработки форм, который вы можете повторно использовать для всех форм, которые вы хотите опубликовать с помощью Ajax.

 4
Author: GolezTrol, 2011-07-24 10:52:05

Довольно просто с помощью jQuery:

<form id="mail_subscribe"> 
  <input type="text" name="address" id="email" maxlength="30" size="23">
  <input type="hidden" name="action" value="subscribe" />
  <input type="submit" value="" id="submit"name="submit"  >
</form>

<p style="display: none;" id="notification">Thank You!</p>

<script>
$('#mail_subscribe').submit(function() {
  var post_data = $('#mail_subscribe').serialize();
  $.post('mlml/process.php', post_data, function(data) {
    $('#notification').show();
  });
});

</script>

И в вашем process.php :

<?php

if(isset($_POST['action'])) {

switch($_POST['action']) {
  case 'subscribe' :
  $email_address = $_POST['address'];

  //do some db stuff...
  //if you echo out something, it will be available in the data-argument of the
  //ajax-post-callback-function and can be displayed on the html-site
  break;
}

}

?>
 4
Author: Quasdunk, 2011-07-24 10:14:47

Он перенаправляет на другую страницу из-за вашего атрибута action.

Попробуйте:

    <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>"> 
        <input type="text" name="address" id="email" maxlength="30" size="23" /> 
        <input type="submit" value="" id="submit" name="submit" />
    </form> 

<?php if (isset($_POST['submit'])) : ?>
   <p>Thank you for subscribing!</p>
<?php endif; ?>

На странице появится ваше сообщение "Спасибо" после того, как пользователь нажмет кнопку "Отправить".

Кроме того, поскольку я не знаю названия страницы, на которой находится ваш код, я вставил суперглобальную переменную, которая вставит имя файла текущего выполняемого скрипта относительно корня документа. Таким образом, эта страница будет подчиняться самой себе.

 2
Author: Josh, 2011-07-24 09:37:55

Вы должны использовать AJAX. Но для этого требуется, чтобы JavaScript был активен у пользователя. На мой взгляд, это единственный способ обойтись без перенаправления.

 1
Author: GameScripting, 2011-07-24 09:31:57

Просто идея, которая может сработать для вас, если вы не контролируете страницу, на которую вы размещаете:

Создайте свою собственную "прокси-цель php" для действий, а затем ответьте сообщением, которое вы хотите. Данные, которые были отправлены в ваш php-файл, затем могут быть перенаправлены с помощью http_post_data (Выполните запрос POST с предварительно закодированными данными). Возможно, вам придется немного разобрать его.

 0
Author: Derick Schoonbee, 2011-07-24 09:55:05

Отправить запрос формы без перенаправления в php невозможно, но есть способ обойти это.

<form method="post" action="http://yoururl.com/recv.php" target="_self"> <input type="text" name="somedata" id="somedata" /> <input type="submit" name="submit" value="Submit!" /> </form>

Затем для страницы php ее отправка, чтобы она что-то делала, но НЕ возвращала результат, вместо этого просто перенаправляла с помощью

header( 'Location: http://yourotherurl.com/formpage' );

Если вы хотите, чтобы он отправил сообщение об успешном завершении, просто сделайте

$success = "true"; header( 'Location: http://yourotherurl.com/formpage?success='.$success);

И на странице формы добавьте

$успех = $_GET['успех'];

Если($успех== "истина"){эхо "Ваше сообщение об успехе"; } остальное {эхо "Ваше сообщение о неудаче";

 0
Author: JustPassingBy, 2016-08-29 11:24:20

АНГЛИЙСКАЯ версия

Похоже, что никто не решил эту проблему без javascript или ajax

Вы также можете сделать следующее.

Сохраните php-файл с функциями, а затем отправьте их в индекс вашей страницы

Пример

INDEX.PHP

<div>
<?php include 'tools/edit.php';?>
<form method="post">
<input type="submit" name="disable" value="Disable" />
<input type="submit" name="enable" value="Enable" />
</form>
</div>

Tools.php (Это может быть любое имя, обратите внимание, что оно хранится в папке lame tools)

<?php
if(isset($_POST['enable'])) { 
echo "Enable";
} else {
}

if(isset($_POST['enable'])) { 
echo "Enable";
} else {
}
?>
 0
Author: Igarza, 2017-06-08 22:16:22

Использовать



Form onsubmit="takeActions();return false;"

Function takeAction(){ var value1 = document.getElementById('name').innerHTML; // make an AJAX call and send all the values to it // Once , you are done with AJAX, time to say Thanks :) document.getElementById('reqDiv').innerHTML = "Thank You for subscribing"; }

 -2
Author: Prashant Singh, 2011-07-25 19:20:43