Hem GET ve POST yöntemleri kullanmak istiyorum

6 Cevap php

Ben POST kullanarak biri olamaz iken GET yöntemi imi olabilir kullanan sonuç sayfasını biliyorum. Ayrıca GET yöntemlerin kısıtlamalar hakkında biliyorum.

Şimdi arama ifade uzunluğu sınırı, POST anahtarını aştığında, varsayılan olarak yer imi izin kullanıcıları GET kullanır ama bir arama motoru oluşturmak istediğinizi varsayalım. Sunucu tarafında ben ayarlanır bağlı olarak hangi $ _GET veya $ _POST faydalanmak.

Is this doable?
If no, why?
If yes, please provide a brief outline.

Teşekkürler

6 Cevap

Bu, hiçbir sorun yapılabilir.

$_REQUEST GET birleştirir dizisi, POST ve COOKIE değerleri ancak daha iyi bir yol işlemek olur orada GET ve POST elle komut.

Sadece iki $_GET["variable"] ve $_POST["variable"] ve set hangisi kullanımı, motor kontrol var. Bir değişken iki yöntemde de ayarlanırsa, size öncelik vermek istediğiniz bir karar vermek gerekir.

The only notable difference between the two methods is that a GET parameter has size limitations depending on browser and receiving web server (POST has limitations too, but they are usually in the range of several megabytes). I think the general rule is that a GET string should never exceed 1024 characters.

Burada biri GET ve POST kullanabilirsiniz nasıl:

<form action="myfile.php?var1=get1&amp;var2=get2&amp;var3=get3" method="post">

    <input type="hidden" name="var1" value="post1" />
    <input type="hidden" name="var2" value="post2" />

    <input type="submit" />
</form>

PHP:

print_r($_REQUEST);
// var1 = "post1"
// var2 = "post2"
// var3 = "get3"

print_r($_GET)
// var1 = "get1"
// var2 = "get2"
// var3 = "get3"

print_r($_POST);
// var1 = "post1"
// var2 = "post2"

Eğer aşağıdaki gibi bir şey kullanabilirsiniz:

<?php
function getParam($key)
{    
    switch (true) {
        case isset($_GET[$key]):
            return $_GET[$key];
        case isset($_POST[$key]):
            return $_POST[$key];
        case isset($_COOKIE[$key]):
            return $_COOKIE[$key];
        case isset($_SERVER[$key]):
            return $_SERVER[$key];
        case isset($_ENV[$key]):
            return $_ENV[$key];
        default:
            return null;
    }    
} 

Bu GET kullanarak bu kodu uygun giriş değişkenleri sanitises sağlamak için kesinlikle gerekli bu yüzden 'ne olacağını görmek' için URL işlemek için kullanıcıların bazı setleri arasında günaha açılıyor farkında olmak yanı da bulunuyor.

Tabii ki ;-) bunu zaten yapıyorlardı. Ama get ile iki kat paranoyak olmak öder.

Ben genellikle çok bir cookie ve bunu bazı tür bir kimlik bırakayım GET kullanarak yaşıyorum kendimi, o zaman sadece bir manipulasyon kullanıcı üzerinde kesinlikle hiçbir sorunları olmadığından emin olmak için, GET listesinde bir değişken için bu çapraz-korelasyon giriş ve onları kullanıcı B. ile kaynaklanan bir şey görmek icar

Var olan GET hantal hale yapılabilir, her ne kadar (IMHO) sınır, bu kadar çok bilgi temin edilmesi için bir kullanıcı arayüzü kullanılamaz hale geldiği eşikten önemli ölçüde daha fazladır. Ayrıca, daha karmaşık bir geleneksel arama motoru göndermek bir sorgu, daha etkili bir şekilde çözülebilir.

Ama senin nedenleri var tahmin ediyorum.

Basit yolu, size ulaşmak için, sağladığınız bilgilerden bu örneğin, javascript kullanarak POST GET çalışma zamanında form yöntemini değiştirmek olacaktır

<form method='GET' id='searchform' target='search.php' onsubmit='
  if (document.getElementById("searchdata")) {
    if ((document.getElementById("searchdata").length >$some_threshold) 
         && (document.getElementById("searchform"))) { 
         // 2nd if in case this moved to action for button 
         document.getElementById("searchform").method="POST";
     }
   }
 return true;'>
 <textarea name='searchdata' id='searchdata'>
 </textarea>
 <input type='submit' value='go get it'>
</form>

Hangi non-javascript istemcileri için güzel düşürdü.

C.

function getQVar($key){
     return isset($_GET[$key]) ? $_GET[$key] : (isset($_POST[$key]) ? $_POST[$key] : null); 
}
echo getQVar("name");

GET vars üzerinden POST öncelik yaklaşık $ _GET ve $ _POST Anahtarı.