Per Post Variablen mit zusätzlichen eckigen Klammern auffangen
TH99
- php
Hallo!
Per Post wird eine Variable übergeben.
Test[]
Ich möchte diese nun auffangen:
$vari1 = $_POST["test[]"]
Das führt aber zu einem leeren Ergebnis. Wie kann ich das lösen?
Vielen Dank, Tom
Hi!
Per Post wird eine Variable übergeben.
Nein. Variablen sind das nicht. Parameter wäre eine passendere Bezeichnung. Variablen werden aus diesen Parametern erst wieder, wenn dein PHP-Script startet und PHP sie dir als $_POST und Konsorten zur Verfügung stellt.
Ich möchte diese nun auffangen:
Das ist schon geschehen. Der Wert ist bereits in $_POST enthalten, du musst nur noch an den Stellen, an denen du ihn benötigst, darauf zugreifen.
$vari1 = $_POST["test[]"]
Das Umkopieren ist in so gut wie allen Fällen überflüssig und erhöht nur die Komplexität und Unübersichtlichkeit durch eine weitere Variable.
Das führt aber zu einem leeren Ergebnis.
Und zu einer Notice-Meldung, wenn du das error_reporting auf E_ALL stehen hättest (und display_errors auf on).
Wie kann ich das lösen?
Indem du zunächst einmal nachschaust, was wirklich enthalten ist: var_dump($_POST);
Lo!
Hallo,
<input name=test[abc]>
gibt
$_POST["test"]["abc"].
ansonsten dedlfix anweisung folgen.
Gruß
jobo
Opa Horst meint, mit der Syntax habe ich andauernd Probleme.
Lt. Namenskonventionen, sind "Eckige Klammern" keine Namensbestandteile!
In der Regel enthält ein Array Elemente, die durch einen Index oder Key selektiert werden. Diesen Index schreibt man hinter der Arraybezeichnung in eckige Klammern.
Beispiel: $_POST[test]
Sollte wirklich ein Array-inhalt per Formular übergeben werden, gibt es unterschiedliche Varianten.
1. Ich schreibe alle Elemente eines Array hintereinander in ein Formularfeld, natürlich von einem Trennzeichen abgeteilt.
<input type="text" name ="arrayX">
Innerhalb eines javascripts
var arrx = new Array (w1,w2,...)//-wie auch immer die Werte hineinkommem-
document.form.arrayX.value=arrx[0];//-vor dem ersten Element kein Trennzeichen-
for (i=1;i<arrayX.length;i++)document.form.arrayX.value+=","+arrx[i];
// das Komma als Trennzeichen.
Die Auswertung in PHP ist kein Problme!
den Inhalt sichern : $arrayX = $_POST[arrayX]
den Inhalt in ein Array schreiben: $arrx=explode(",",$_POST[arrayX]);
2. innerhalb PHP oder javascript wird jedes Array-Element als extra Formulatelement ausgegeben.
ein PHP-Beispiel:
for($i=0;$i<count($arrx);$i++)echo"\n<input type='text' name='test_'$i value='$arrayX[$i]'>";
// die Formularelemente heißen test_1 , test_2 , ...
Hier ist die Auswertung etwas komliziert, da der Key erst zusammengesetzt werden muß.
$postschl=array_keys($_POST);
for($i =0;$i<count($_POST);$i++)
{
$spx = explode("_",$postschl[$i]);
if($sp[0]=='test'){$arrx[$spx[1]]=$_POST[$i]}
//oder {$arrx[$spx[1]]=$_POST[$postschl[$i]]}
}
3. Einen Arrayinhalt in eine Variable zu schreiben, geht vielleicht auch mit einem "IMPLODE()"
vielleicht klappts
Opa Horst
Hallo,
http://framework.zend.com/manual/de/zend.form.advanced.html
darin:
<form>
<fieldset>
<legend>Versandadresse</legend>
<dl>
<dt><label for="shipping-recipient">Versand an:</label></dt>
<dd><input name="shipping[recipient]" id="shipping-recipient"
type="text" value="" /></dd>
<dt><label for="shipping-address">Adresse:</label></dt>
<dd><input name="shipping[address]" id="shipping-address"
type="text" value="" /></dd>
$_GET/POST["shipping"] ist dann ein assoziatives Array. Besser gehts nicht.
Gruß
jobo
$_POST["test"]["abc"].
Ich glaube, ich hab das ein Verständnisproblem.
Das SELECT Feld sieht so aus:
<select name="inhalt[]">
<option selected="selected" value="">
</option><option value="Inhalt1">Inhalt1</option>
<option value="Inhalt2">Inhalt2</option></select>
echo $_POST["inhalt"] [""];
liefert aber nicht zurück?
Grüße und Danke, Tom
Hi!
Ich glaube, ich hab das ein Verständnisproblem.
Bitte ignoriere die Hinweise zum error_reporting und var_dump() nicht. Sie sind wichtig, um Verständnisprobleme zu beseitigen.
Lo!
Bitte ignoriere die Hinweise zum error_reporting und var_dump() nicht. Sie sind wichtig, um Verständnisprobleme zu beseitigen.
Hallo!
var dump gibt folgendes aus:
["inhalt"]=> array(1) { [0]=> string(7) "inhalt2" }
Grüße, Tom
Hi!
var dump gibt folgendes aus:
["inhalt"]=> array(1) { [0]=> string(7) "inhalt2" }
(Gib ein <pre> vorher aus, dann wird es etwas übersichtlicher.)
Was entnimmst du nun konkret aus der Ausgabe?
Es gibt einen Array-Key namens "inhalt". Der Inhalt davon ist ein Array mit einem Eintrag, dessen Schlüssel "0" und dessen Wert "inhalt2" ist. Ein Key namens "" existiert darin nicht. Die letzte Aussage bekämest du mit dem bereits erwähnten aus E_ALL gestellten error_reporting auch angezeigt.
Lo!
Hallo,
echo $_POST["inhalt"][0];
du musst schon machen, was dedlfix sagt, sonst kapierst du die grundlagen nicht. scheinbar verstehst du nicht genau, wie arrays aufgebaut sind
Gruß
jobo