Arrayschlüssel auslesen

Registrierer

Erfahrenes Mitglied
Das Formular:
HTML:
<form name="vorschlag" method="post" action="">
  <textarea name="text_1[]" onchange="document.vorschlag.submit();"></textarea>
  <textarea name="text_1[]" onchange="document.vorschlag.submit();"></textarea>
</form>
gibt, wenn ich im 1. Feld "aaa" eingebe nach
PHP:
<?PHP echo "<pre>". print_r($_POST, true) ."</pre>"; ?>
folgendes aus:
Array
(
[text_1] => Array
(
[0] => aaa
[1] =>
)

)

Ich benötige jetzt nicht nur den Inhalt (aaa), sondern auch den Schlüssel - in dem Fall 0.
Wie komme ich daran?
Also als Beispiel echo $_POST['text_1'][0]; <- diese Null!
Danke.
 
Zuletzt bearbeitet:
Das kommt drauf an wie du auf die Werten zugreifen willst.

Wenn du das Formulararray später mit einer Schleife durchgehst, kannst du dir den Index jeweils mit key() zurückgeben lassen.

Wenn du den passenden Index zu einem bekannten Wert haben möchtest, sollte array_search() helfen.
 
Das kommt drauf an wie du auf die Werten zugreifen willst.
Der Hintergrund ist ein Formular mit erheblich mehr Feldern und natürlich mehr Zeilen, die einer Datenbank entspringen.
Wird im Textfeld etwas verändert und das Feld verlassen, soll die Änderung sofort in der DB übernommen werden.
Dazu brauche ich den Bereichsschlüssel, der den entsprechenden Wert des Feldes bzw. Tabellenzeile repräsentiert.
Also nix Schleife ;-)
 
Zuletzt bearbeitet:
Spontan würde mir
PHP:
foreach($array as $key => $value){
//...
}
einfallen, hat alles was du brauchst, sonnst wüsste ich auch nicht wie man an den Schlüssel rankommt :/
 
Da du nur immer ein Eintrag im Array abgefüllt hast, kannst du den Array einfach ausfiltern. Was übrig bleibt ist dein Wert und der Schlüssel
PHP:
$entry = array_filter($_POST['text_1']);
$index = key($entry);
$value = current($entry);
 
Ein Problem gelöst, neues aufgetaucht.
Folgende Situation:
PHP:
<?PHP
echo "<pre>". print_r($_POST, true) ."</pre>";
$entry = array_filter($_POST['text_1']);
$index = key($entry);
echo $index;
?>
<form name="vorschlag" method="post" action="">
  <textarea name="text_1[]" id="100" onchange="document.vorschlag.submit();">Vorbelegung aus DB</textarea>
  <textarea name="text_1[]" id="200" onchange="document.vorschlag.submit();"></textarea>
</form>
Wenn das Feld mit der id 100 vorbelegt ist und im Feld mit der id 200 der onchange Effekt ausgelöst wird, ist $index immer 0! anstatt 1.

Nur wenn beide Textfelder leer sind, bekomme ich als Rückgabe den richtigen Wert und den richtigen Schlüssel.
Was habe ich übersehen?

Vielen Dank.
 
Yaslaw hat es in seinem Post schon erwähnt:

Da du nur immer ein Eintrag im Array abgefüllt hast

$entry besitzt in diesem Fall $_POST['text_1'][0] & $_POST['text_1'][1], weil keiner der Werte false ist und entsprechend rausgefiltert wurde.

An der Stelle
PHP:
$index = key($entry);
ist der Zeiger dann auf dem ersten Element, also Index 0.

Ich schätze, langfristig wirst du um eine Übergabe des Namens im Event nicht herumkommen. Man könnte ein hidden-Input hinzufügen und im onchange-Event der Textfelder mit fillHidden(this.name) den Namen (oder gleich den Index) des geänderten Textfeldes übergeben, in der Funktion dann das value des hidden-Inputs mit dem Namen befüllen und danach erst das Formular absenden.
Zugriff erfolgte dann über $_POST['name_des_hidden_inputs'].

Btw, IDs dürfen meines Wissens nach nicht mit einer Ziffer beginnen.
 
Zurück