2010-11-05 2 views
1

Я занимаюсь этим часами и все еще не в порядке.Публикация данных формы с использованием POST с PHP

У меня есть страница PHP (PAGE1.PHP) со ссылкой, и когда пользователю кликается ссылка на страницу PHP, необходимо будет прочитать некоторые данные из базы данных и опубликовать эти данные с помощью POST на стороннем сайте ,

Мне удалось сделать это с помощью CURL, однако проблема заключается в том, что хотя данные размещены и сторонняя страница загружается правильно, URL-адрес (в браузере) по-прежнему отображается как PAGE1.PHP в отличие от третьего URL-адрес партнера, на который я отправил сообщение.

Есть ли способ, как я могу это сделать?

У меня есть возможность создать форму на PAGE1.PHP с данными, которые я прочитал из базы данных, установленной как скрытая, и ссылкой в ​​качестве отправки. Я еще не пробовал, но должен работать, но это значит, что данные, которые я читаю из db, могут быть прочитаны пользователем, просто просмотрев источник.

Любые идеи о том, как я могу это сделать?

+0

Ищите часы? Вы должны быть полностью слепы. Уже есть тысячи подобных вопросов. –

+0

Да, я действительно искал часы .. и я ничего не нашел - особенно из-за моего требования "URL-адрес (в браузере) по-прежнему отображается как PAGE1.PHP в отличие от стороннего URL, который я опубликовал." , Я попробовал CURL, я попробовал PHP Redirect, попробовал PEAR (но godaddy не позволяет) и многое другое ... и им даже не разработчик !: :) –

ответ

1

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

Я бы сделал то, что вы упомянули, создав скрытую форму и разместив данные таким образом. Вы можете быть умнее об этом, хотя и сделать document.ready в jQuery, и как только скрытая форма будет загружена, вы можете опубликовать ее для пользователя. Хотя есть еще небольшое окно возможностей для просмотра источника, оно будет немного более потоковым.

<script> 
$(document).ready(function() { 
    $('#hiddenForm').submit(); 
}); 
</script> 

Редактировать Полный пример:.

<? 

    $urlToPostTo = 'http://www.thirdPartyDomain.com/login'; 
    $varsToPost['user'] = 'username'; 
    $varsToPost['pass'] = 'password'; 

    ?> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script> 
    $(document).ready(function() { 
     $('#hiddenForm').submit(); 
    }); 
    </script> 
    <? 

    echo '<form id="hiddenForm" action="'.$urlToPostTo.'" method="post">'; 

    /* create a hidden input for each var in 'varsToPost' */ 
    foreach($varsToPost as $varName=>$varValue) { 
    echo '<input type="hidden" name="'.$varName.'" value="'.$varValue.'">'; 
    } 

    echo '</form>'; 

?> 

Просто добавить/удалить переменные в $varsToPost массиве, и они будут автоматически подключены Я думаю, если вы проезжали пароль/конфиденциальные данные вам всегда может зашифровать его в php и расшифровать его в js прямо перед отправкой формы. Это все равно оставит вас открытыми, так как у кого-то будет доступ к вашей функции дешифрования, но он скроет ваши данные с первого взгляда.

Несмотря на это, эта форма отправки выполняется очень быстро, трудно сказать, что она подлая.

+0

Ouch .. Я не знаю много javascript, хотя я могу учиться очень быстро. Не могли бы вы хотя бы сообщить мне, что мне нужно делать в псевдо? Я не хочу тратить слишком много времени. –

+0

Эй, спасибо ... заглянет в него. Вы очень помогли Чаду :) –

+0

Работал отлично - Спасибо снова Чаду. Действительно ценю это. –

4

URL-адрес в браузере правильно показывает исходный URL-адрес, потому что это то, что запросил браузер, и именно это послужило запросом; ваша страница PHP сделала запрос POST за кулисами, чтобы получить данные, но затем она вернула его в ваш браузер.

Чтобы получить результат, я думаю, что вы хотите, вам нужно перенаправить браузер, чтобы сделать сообщение. Вы правильно относитесь к проблемам скрытых данных; похоже, что вам, возможно, придется немного поработать над решением этой проблемы.

+0

Хм .. любые идеи о том, что такое архитектура, мне нужно делать? Всегда помните, что я не могу изменить сайт третьей стороны. Сторонний сайт изменяется в зависимости от данных, которые я публикую. –

+0

@ DavidV: сложно определить, нет ли у вас контроля над сторонним сайтом; если вы можете сделать какие-то средства для создания почты с вашего PHP со скрытыми данными, а затем предоставить браузеру пользователя «нечувствительную» ссылку на страницу, определенную этой записью, которая может работать. На самом деле все зависит от того, как сторонний сайт, с которым вы имеете дело, обрабатывает такие вещи, и требуют ли они, чтобы пользователи имели данные конфиденциальных данных, которые вы обрабатываете, или если есть какой-то способ обойти это требование. –

+0

Будет использовать скрытую форму - не лучшее в безопасности, но за то, что я использую ее достаточно хорошо .. безопасность через неясность в порядке для этого. Еще раз спасибо. –

0

Вы можете использовать header function from PHP, чтобы произвести реальную переадресацию с данными POST.

Следуйте за некоторыми источниками для справки.

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

http://shiflett.org/articles/form-spoofing

+0

Умм .. ты уверен, что можешь это сделать? из того, что я читал вам, функции заголовка не поддерживают POST, поскольку они отправляются в браузер. –

+0

После некоторого поиска в Google, к сожалению, это невозможно напрямую с PHP. Но если javascript не является проблемой, вы можете создать форму «autosubmit». Проверьте это: http://www.webmaster-talk.com/php-forum/59493-php-redirect-with-post-headers.html – Dave

+0

И все еще поддерживается, OMFG. –

Смежные вопросы