POST без перенаправления с PHP - PullRequest
7 голосов
/ 24 июля 2011

У меня есть простая форма для списка рассылки, которую я нашел в 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>     

Ответы [ 8 ]

5 голосов
/ 24 июля 2011

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

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

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

4 голосов
/ 24 июля 2011

Довольно просто с 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;
}

}

?>
3 голосов
/ 24 июля 2011

Он перенаправляет на другую страницу из-за вашего атрибута 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; ?>

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

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

1 голос
/ 24 июля 2011

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

0 голосов
/ 09 июня 2017

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

Похоже, что никто не решил эту проблему без 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 голосов
/ 29 августа 2016

отправить запрос формы без перенаправления невозможно в 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);

и к надставке добавить

$ success = $ _GET ['success'];

if ($ success == "true") {echo 'Ваше сообщение об успехе'; } else {echo «Ваше сообщение об ошибке»;

0 голосов
/ 24 июля 2011

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

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

0 голосов
/ 24 июля 2011

Используйте

</p>

<blockquote>
  <p>form onsubmit="takeActions();return false;"</p>
  
  <p>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";
  }
   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...