POST ile gönderilen tüm değişkenler alınsın mı?


89

Postayla gönderilen tüm değişkenleri eklemem gerekiyor, her biri bir kullanıcıyı temsil eden onay kutularıydı.

GET kullanırsam şöyle bir şey alırım:

?19=on&25=on&30=on

Değişkenleri veritabanına eklemem gerekiyor.

POST ile gönderilen tüm değişkenleri nasıl alırım? Virgül veya başka bir şeyle ayrılmış bir dizi veya değerler mi?


Yanıtlar:


167

Değişken $_POSTotomatik olarak doldurulur.

var_dump($_POST);İçeriği görmeye çalışın .

Aşağıdaki gibi bireysel değerlere erişebilirsiniz: echo $_POST["name"];

Bu, elbette, formunuzun tipik form kodlamasını kullandığını varsayar (ör. enctype=”multipart/form-data”

Gönderi verileriniz başka bir formattaysa (örneğin, JSON veya XML, bunun gibi bir şey yapabilirsiniz:

$post = file_get_contents('php://input');

ve $postham verileri içerecektir.

Standart $_POSTdeğişkeni kullandığınızı varsayarsak , bir onay kutusunun şu şekilde işaretlenip işaretlenmediğini test edebilirsiniz:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

Bir dizi onay kutunuz varsa (ör.

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

Kullanma [ ]kutusunun adına Seçilen değerler bir dizi olarak PHP komut dosyası tarafından erişilecek belirtir. Bu durumda $_POST['myCheckbox'], tek bir dize döndürmez, ancak işaretlenen onay kutularının tüm değerlerinden oluşan bir dizi döndürür.

Tüm kutuları işaretli Örneğin, eğer, $_POST['myCheckbox']oluşan bir dizi olacaktır: {A, B, C, D, E}. Değer dizisinin nasıl alınacağına ve bunların nasıl görüntüleneceğine ilişkin bir örnek:

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }

2
Sonuna bir örnek / bağlantı eklemeyi düşünüyor muydunuz?

1
Teşekkürler, aslında sadece print_r ($ _ POST) yapmayı denedim ve bu süre boyunca GET kullandığım için çalışmıyordu. Benim hatam
lisovaccaro

@ Liso22 endişelenmenize gerek yok! Hepimizin başına geliyor :)
Code Magician

5
$ post = file_get_contents ('php: // input'); zamanımı kurtardım. Teşekkürler. Tanrım,
lanet olası

1
100 için Gratz!
Başka

77

bunlara $_POSTdeğişkenden erişebilmelisiniz :

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

Sonuna bir örnek / bağlantı eklemeyi düşünüyor muydunuz?

1
Cevabın sonunda iki nokta üst üste olduğunu fark ettim.

Sorulanın cevabı bu.
lisandro

13

Kullanımdan kaldırıldı ve süper küresellere doğrudan erişmek istenmedi (php 5.5'ten beri?)

Her modern IDE size şunları söyleyecektir:

Süper küresellere doğrudan erişmeyin. Bazı filtre işlevlerini kullanın (örneğin filter_input)

Çözümümüz için tüm istek parametresini almak için yöntemi kullanmalıyız filter_input_array

Bir giriş yönteminden tüm parametreleri almak için şunu kullanın:

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

Şimdi onu var_dumpveya kendi foreach-Loops'unuzda kullanabilirsiniz

İşe yaramayan şey, bu yöntemle $ _REQUEST Süper küreseline erişmektir. Her zaman geri döner NULLve bu doğru.

Tüm Giriş parametrelerini almanız gerekiyorsa, farklı yöntemlere geçerek, bunları aşağıdaki yöntemde olduğu gibi birleştirmeniz yeterlidir:

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

Düzenleme: Bu yöntemin genişletilmiş sürümü (istek yöntemlerinden biri ayarlanmadığında da çalışır):

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}

"$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();" önerinizi kullanmaya çalışırken ölümcül bir hata alıyorum. FATAL ERROR Sabit ifade 5 numaralı satırda geçersiz işlemler içeriyor
luckyguy73

@AshtonMorgan test ettim (kopyala yapıştır) ve iyi çalışıyor. Hangi PHP Sürümünü kullanıyorsunuz?
mtizziani

9

Yani $_POSTdizi gibi bir şey ?

Sen kullanabilirsiniz http_build_query($_POST)bir de onları almak için var=xxx&var2=yyytekrar dize. Ya da sadece print_r($_POST)orada ne olduğunu görmek için.


6

Neden bu değil, çok kolay:

extract($_POST);

4
Olduğu gibi korkunç fikir; dev güvenlik açığı.
kimse

2
Bu kod, "POST ile gönderilen tüm değişkenleri nasıl alabilirim?" Sorusunu mükemmel bir şekilde yanıtlarken, diğer yanıtlar cevap vermez. Ve en iyi cevap olumsuz oylanır, gidin. Güvenlik projesi için sorun olmayabilir. Php yapanların bu işlevi icat ederek hata yaptıklarını, asla kullanılmaması gerektiğini mi söylüyorsunuz?
bubbahut

2
@bubbahut aynen. Hiç kimse üretim kodu için tüm post değişkenlerini istemez.
cowboysaif

5

Bunu kullanarak tüm gönderi değişkenini elde edebilirsiniz

print_r($_POST)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.