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:

http://www.sajithmr.me/php-post-without-curl/

Вы можете сделать ajax-пост вашей первой формы, который заполнит вторую скрытую форму. Затем добавьте обратный вызов javascript в ваше второе заполнение формы, которое будет выполнять yoursecondform.submit();

Другие вопросы по тегам