Alle Variablen mit POST senden lassen?

85

Ich muss alle Variablen einfügen, die per Post gesendet wurden. Es handelte sich um Kontrollkästchen, die jeweils einen Benutzer darstellen.

Wenn ich GET benutze, bekomme ich so etwas:

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

Ich muss die Variablen in die Datenbank einfügen.

Wie bekomme ich alle Variablen mit POST gesendet? Als Array oder durch Koma getrennte Werte oder so?

lisovaccaro
quelle
3
Mögliches Duplikat von Wie man alle Variablen in einem Beitrag (PHP)
erfasst

Antworten:

164

Die Variable $_POSTwird automatisch ausgefüllt.

Versuchen Sie var_dump($_POST);, den Inhalt zu sehen.

Sie können auf einzelne Werte wie folgt zugreifen: echo $_POST["name"];

Dies setzt natürlich voraus, dass Ihr Formular die typische Formularcodierung verwendet (d. H. enctype=”multipart/form-data”

Wenn Ihre Post-Daten in einem anderen Format vorliegen (z. B. JSON oder XML), können Sie Folgendes tun:

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

und $postenthält die Rohdaten.

Angenommen, Sie verwenden die Standardvariable $_POST, können Sie testen, ob ein Kontrollkästchen wie folgt aktiviert ist:

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

Wenn Sie eine Reihe von Kontrollkästchen haben (z

<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>

Die Verwendung [ ]des Kontrollkästchens gibt an, dass das PHP-Skript als Array auf die ausgewählten Werte zugreift. In diesem Fall $_POST['myCheckbox']wird keine einzelne Zeichenfolge zurückgegeben, sondern ein Array, das aus allen Werten der aktivierten Kontrollkästchen besteht.

Wenn ich zum Beispiel alle Kästchen ankreuzen $_POST['myCheckbox']würde , wäre ein Array bestehend aus : {A, B, C, D, E}. Hier ist ein Beispiel, wie Sie das Array von Werten abrufen und anzeigen können:

  $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>";
    }
  }
Code Magier
quelle
2
Wollten Sie am Ende ein Beispiel / einen Link hinzufügen?
1
Danke, ich hatte tatsächlich versucht, nur print_r ($ _ POST) zu verwenden, und es funktionierte nicht, weil ich die ganze Zeit GET verwendete. Mein schlechtes
lisovaccaro
@ Liso22 keine Sorge! Passiert uns allen :)
Code Magician
5
$ post = file_get_contents ('php: // input'); hat mir Zeit gespart. Vielen Dank. Oh Gott, f ** ng php ...
Nedudi
1
Gratz für 100!
weiterer
76

Sie sollten über die $_POSTVariable auf sie zugreifen können :

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}
Tudor Constantin
quelle
Wollten Sie am Ende ein Beispiel / einen Link hinzufügen?
1
Bemerkte den Doppelpunkt am Ende der Antwort.
Dies ist die Antwort auf die Frage.
Lisandro
11

Es ist veraltet und möchte nicht direkt auf Superglobale zugreifen (seit PHP 5.5 denke ich?)

Jede moderne IDE wird Ihnen sagen:

Greifen Sie nicht direkt auf Superglobals zu. Verwenden einige Filterfunktionen (z filter_input)

Für unsere Lösung müssen wir die Methode verwenden, um alle Anforderungsparameter zu erhalten filter_input_array

Verwenden Sie Folgendes, um alle Parameter von einer Eingabemethode abzurufen:

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

Jetzt können Sie es in var_dumpoder Ihren foreach-Loops verwenden

Was nicht funktioniert, ist mit dieser Methode auf das Superglobal $ _REQUEST zuzugreifen. Es kehrt immer zurück NULLund das ist richtig.

Wenn Sie alle Eingabeparameter über verschiedene Methoden abrufen müssen, führen Sie sie einfach wie in der folgenden Methode zusammen:

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

Bearbeiten: erweiterte Version dieser Methode (funktioniert auch, wenn eine der Anforderungsmethoden nicht festgelegt ist):

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;
}
mtizziani
quelle
Ich erhalte einen schwerwiegenden Fehler, wenn ich versuche, Ihren Vorschlag "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();" zu verwenden. FATAL ERROR Konstanter Ausdruck enthält ungültige Operationen in Zeile 5
happyguy73
@AshtonMorgan Ich habe es getestet (Kopieren Einfügen) und es funktioniert gut. Welche PHP-Version benutzt du?
Mtizziani
8

Also so etwas wie das $_POSTArray?

Sie können http_build_query($_POST)sie wieder in eine var=xxx&var2=yyyZeichenfolge einfügen. Oder nur um print_r($_POST)zu sehen, was da ist.

Mario
quelle
6

Warum nicht das, es ist einfach:

extract($_POST);
Bubbahut
quelle
4
Schreckliche Idee wie sie ist; riesiges Sicherheitsloch.
niemand
2
Dieser Code beantwortet seine Frage perfekt "Wie bekomme ich alle Variablen mit POST gesendet?", Während die anderen Antworten dies nicht tun. Und die beste Antwort wird abgelehnt. Sicherheit ist möglicherweise kein Problem für sein Projekt. Wollen Sie damit sagen, dass diejenigen, die PHP gemacht haben, einen Fehler gemacht haben, indem sie diese Funktion erfunden haben, dass sie niemals verwendet werden sollte?
Bubbahut
2
@ubbahut genau. Niemand möchte alle Post-Variablen für den Produktionscode.
Cowboysaif
5

Mit diesem können Sie alle Post-Variablen erhalten

print_r($_POST)

quelle