ПУБЛИКАЦИЯ без перенаправления с помощью 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>
8 answers
Вам понадобится AJAX для отправки данных на ваш сервер. Лучшее решение - внедрить регулярную публикацию, чтобы это, по крайней мере, работало. Затем вы можете подключиться к этому с помощью Javascript. Таким образом, публикация будет работать (с обновлением), когда у кого-то нет Javascript.
Если найдена хорошая статья о размещении форм с помощью AJAX с использованием jQuery .
Кроме того, вы можете разместить данные на том же URL-адресе. Библиотека jQuery добавит заголовок HTTP_X_REQUESTED_WITH
, из которого вы можете проверить значение в вашем сценарии на стороне сервера. Это позволит вам отправлять сообщения по одному и тому же URL-адресу, но возвращать другое значение (всю страницу или только конкретный ответ, в зависимости от того, является запрос AJAX или нет).
Таким образом, вы действительно можете получить URL-адрес из своей формы, и вам не нужно будет также кодировать его в своем Javascript. Это позволяет вам написать более удобный для обслуживания сценарий и может даже привести к созданию универсального метода обработки форм, который вы можете повторно использовать для всех форм, которые вы хотите опубликовать с помощью Ajax.
Довольно просто с помощью 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;
}
}
?>
Он перенаправляет на другую страницу из-за вашего атрибута 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; ?>
На странице появится ваше сообщение "Спасибо" после того, как пользователь нажмет кнопку "Отправить".
Кроме того, поскольку я не знаю названия страницы, на которой находится ваш код, я вставил суперглобальную переменную, которая вставит имя файла текущего выполняемого скрипта относительно корня документа. Таким образом, эта страница будет подчиняться самой себе.
Вы должны использовать AJAX. Но для этого требуется, чтобы JavaScript был активен у пользователя. На мой взгляд, это единственный способ обойтись без перенаправления.
Просто идея, которая может сработать для вас, если вы не контролируете страницу, на которую вы размещаете:
Создайте свою собственную "прокси-цель php" для действий, а затем ответьте сообщением, которое вы хотите. Данные, которые были отправлены в ваш php-файл, затем могут быть перенаправлены с помощью http_post_data (Выполните запрос POST с предварительно закодированными данными). Возможно, вам придется немного разобрать его.
Отправить запрос формы без перенаправления в 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['успех'];
Если($успех== "истина"){эхо "Ваше сообщение об успехе"; } остальное {эхо "Ваше сообщение о неудаче";
АНГЛИЙСКАЯ версия
Похоже, что никто не решил эту проблему без 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 {
}
?>
Использовать
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";
}