Mesaj Parametreleri ile PHP Yönlendirme

6 Cevap php

Ben bir web sayfası var. Bu web sayfası başka bir web sayfasına, daha fazla veya daha az aşağıdaki şekilde kullanıcıyı yönlendirir:

<form method="post" action="anotherpage.php" id="myform">

    <?php foreach($_GET as $key => $value){
    echo "<input type='hidden' name='{$key}' value='{$value}' />";
    } ?>

</form>
<script>

    document.getElementById('myform').submit();

</script>

Peki, ben POST params içine GET params aktardığında ne bakın. Kötü olduğunu bana söyleme, ben kendimi biliyorum, ve ben gerçekten tam olarak ne yapmak değil, önemli olan ben bir dizi veri toplamak ve POST aracılığıyla başka bir sayfaya göndermeden çalışmalarıdır. Kullanıcı JavaScript kapalı Ama eğer, o iş olmaz. Bilmem gereken nedir: yönlendirme de, (header('Location: anotherpage.php');) PHP şekilde yapılabilir böylece PHP ile POST parametreleri aktarmak için bir yolu var mı?

Bana POST aracılığıyla params geçmek için çok önemlidir. Web sayfası başka bir alanda olduğu için bu nedenle, $ _SESSION değişkeni kullanamazsınız, $ _SESSION değişkenleri farklıdır.

Neyse, ben sadece ^ ^ PHP ile POST değişkenleri aktarmak için bir yol gerekir

Şimdiden teşekkürler!

6 Cevap

POST veri tarayıcı tarafından gönderilen olması gerektiği gibi, sunucudan doğrudan yapmak imkanı yok.

Ama bir alternatifi seçebilirsiniz:

  • The prefilled form autommatically sunmaked ini your example could work, but as you wrote it's not really good practice and can leave users on a blank page
  • GET argümanları almak ve ikinci siteye kıvrılma (ya da herhangi bir iyi http istemcisi) ile POST, sonra tarayıcıya sonucu transfer. Bu bir vekil denir ve iyi bir çözüm imho olabilir.
  • Do session sharing across domain, this can not be possible on all setups and can be complex. Once setup is done, session sharing is almost transparent to php code. If you have more than one need of communication between the 2 domains it can be worth doing this.

Kıvırmak solüsyonu ile Örnek, etki 1 çalıştırmak için kod:

//retrieve GET parameters as a string like arg1=0&arg1=56&argn=zz
$data = $_SERVER['QUERY_STRING']; 

// Create a curl handle to domain 2
$ch = curl_init('http://www.domain2.com/target_script.php'); 

//configure a POST request with some options
curl_setopt($ch, CURLOPT_POST, true);
//put data to send
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    
//this option avoid retrieving HTTP response headers in answer
curl_setopt($ch, CURLOPT_HEADER, 0);
//we want to get result as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//if servers support is and you want result faster, allow compressed response
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); 

//execute request
$result = curl_exec($ch);

//show response form domain 2 to client if needed
echo $result;

İşte bu, sizin müşterinin tarayıcı Hatta etki alanı 2 sunucusuna görmezsiniz, sadece almak ondan neden olacaktır. Eğer klasik http başlığı ile bunu yapmak, etki müşteri yönlendirmek istiyorsanız biliyorum.

header('Location: http://www.domain2.com');

Tabii ki, bu kodlanmış değerleri ile demo kodu ve size bırakılan 2 nokta vardır:

  • Güvenlik: sorgu dizesi filtrelenmiş veya sadece gerekli parametreleri iletmek için yeniden ve etki 2 sunucu bir 200 HTTP kodu döndürdü savunmak gerekir edilmelidir.
  • Application logic should need little adjustement on this part : if domain 2 app expects to get post data in the same request as visitor is coming it won't do it. From domain 2 point of view, the client doing POST request will be server hosting domain 1 not the client browser, it's important if client IP matters or other client checks are done on domain 2. If the POST request serves to display client specific content you also had to do some server-side tracking to combine previously posted data with the visitor being redirected.

Şimdi daha açık ve umut size yardımcı olacaktır

Bu PHP cURL lib kullanarak yapılabilir.

Bu kontrol http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html

Thanks, Sourabh

Mümkündür. Bu durumda ben cURL kullanabilirsiniz:

$url = 'http://domain.com/get-post.php';


foreach($_GET as $key=>$value) { 
  $fields_string .= $key.'='.$value.'&'; 
}
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

Bir oturumda veri depolamak ve daha sonra GET kullanın.

Hayır POST ile başlık yönlendirme yapamaz. 2 seçeneğiniz var,

  1. Hedef POST ya kabul veya GET almak yerine kullanabilirsiniz.
  2. Biz Javascript kapalı olduğunu nadir durumlarda bir düğme ekleyin.

İşte bir örnek,

<noscript>
<div>
<input type="submit" value="Continue"/>
</div>
</noscript>

Kullanıcı devam etmek için tıklayın böylece Javascript kapalı ise, bu bir devam butonu gösterecektir.

Bir POST isteği yönlendirme header ve POST bilgileri içerebilir. Ancak, açıkça HTTP durum kodu 307 dönmek gerekiyor. Tarayıcılar orijinal bir yöntem görmezden, GET ile bir yönlendirme olarak 302 davranın. Bu HTTP belgelerinde açıkça belirtilmiştir:

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Pratikte, bu PHP size yönlendirme konuma önce durum kodunu ayarlamak gerekiyor demektir:

    header('HTTP/1.1 307 Temporary Redirect');
    header('Location: anotherpage.php');

Ancak, yeni bir URL'ye POST bilgileri resubmitting Tamam ise HTTP özelliklerine göre, kullanıcı aracısı kullanıcıya sormak gerektiğini unutmayın. Pratik açıdan bakıldığında, Chrome sormuyor, ve ne Safari, ama Firefox yönlendirmeyi doğrulayan bir açılır kutu ile kullanıcıya sunacak. Genel kullanım durumunda kesinlikle son kullanıcılar için karışıklığa neden potansiyeline sahip olmasına rağmen işletim kısıtlamalar bağlı olarak, belki de bu, tamam.