POST для формы, которая ставит в другую форму
С внешнего сайта мне нужно представить форму, которая помещает данные в secure.domain.com/index.php. Внутри index.php я заполняю некоторые скрытые поля, которые, в свою очередь, должны быть опубликованы на secure.domain.com/foo/index.php. Я также установил некоторые переменные сессии.
Причиной этого является временное перенаправление, пока я заканчиваю создание пользовательского портала, который будет жить по адресу secure.domain.com/. Через пару недель мне просто нужно будет опубликовать данные на secure.domain.com/index.php
На данный момент, однако, мне нужно попытаться автоматически войти в систему людей, которые находятся в secure.domain.com/foo/. Я не могу просто изменить цель для форм на разных сайтах.
Как я могу сделать это с помощью PHP? Прямо сейчас я просто представляю кнопку отправки "Нажмите здесь, чтобы завершить вход в систему" на secure.domain.com/index.php, я надеюсь избавиться от этой кнопки.
План Б состоит в том, чтобы поставить над кнопкой капчу и сообщить руководству, что эта хитрость предназначена для проверки человеком, так как для форм на внешнем сайте места не было. Я бы предпочел не делать этого.
Редактировать:
Спасибо за все ответы. Кажется, что нет способа сделать это только с помощью PHP. Внутренние пользователи будут использовать тонких клиентов с очень строгим предварительно настроенным плагином noscript, они могут просто поработать с кнопкой в течение пары недель.
5 ответов
Вы можете автоматически опубликовать вторую форму, используя JavaScript:
<script>document.forms[0].submit()</script>
Это самый простой метод, который я могу придумать, но я не опытный веб-парень;)
Вы также должны сохранить текущую кнопку и обернуть <noscript>
вокруг него для пользователей с отключенным JavaScript.
Изменить: если вы используете JQuery, ответ Wookai будет лучшим решением. Но держите кнопку noscript.
Вы можете сделать это с помощью cURL...
Пример:
$ch = curl_init(); // initialize curl handle
$url = "http://www.mydomain.com/test.php"; // URL to calc.cgi
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // times out after 10s
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, "text=hi&name=fortega"); // fields to POST to calc.cgi
$data = curl_exec($ch); // run the whole process
curl_close($ch);
Что бы вам понадобилось, чтобы иметь возможность сделать HTTP
перенаправление и включают в себя POST
данных в нем нет, но это, насколько я знаю, невозможно.
Однако есть простое решение: автоматически отправить текущую форму, используя JavaScript
, Просто отобразите сообщение типа "Пожалуйста, подождите, пока вас перенаправляют", скройте все формы / кнопки и отправьте его при загрузке страницы (пример в jQuery):
<script type='text/javascript'>
$(function() {
$('#yourHiddenForm').submit();
});
</script>
Как сказано в других ответах, убедитесь, что ваша текущая кнопка находится в <noscript>
тег для пользователей, у которых отключен JavaScript.
Вы можете подумать о других решениях, таких как копирование всех POST
данные и делать GET
запросите вашу вторую форму или сохраните все данные во временной таблице, передав ID во вторую форму и загрузите соответствующие данные в нее, но я предполагаю, что это подразумевает изменение вашей второй формы и не совсем приемлемо.
Если вы не хотите использовать CURL:
Вы можете сделать ajax-пост вашей первой формы, который заполнит вторую скрытую форму. Затем добавьте обратный вызов javascript в ваше второе заполнение формы, которое будет выполнять yoursecondform.submit();