PHP Textfelder auswerten

Scindapsus

Cadet 3rd Year
Registriert
März 2011
Beiträge
58
Hallo,

ich habe sehr wenig Erfahrung in PHP.
Wie kann man in PHP mehrere Textfelder auswerten?
Hintergrund:
In einer Tabelle soll pro Zeile ein Textfeld und ein Button ausgegeben werden.
Je nachdem welcher Button gedrückt wurde, soll dann das Textfeld eingelesen und verarbeitet werden, also z.B.
Zeile 1: Textfeldinhalt: 5 Button: 1
Ausgabe: Es wurde Button 1 gedrückt - im Textfeld stand 5.
Ersteres stellt kein Problem dar, zweiteres (das mit dem Textfeld) aber schon.

Hier der Code:
PHP:
$datei = "Datei.txt";
$zeile = file($datei);
print "<form action='' method='post'>";
print "<table>";
   for($i = 1; $i < count($zeile) + 1; $i++){
      $teil = explode(";", $zeile[$i-1]);
      print "<tr>";
         print "<td><input type='int' name='Textfeld' maxlength='2' style='width: 20px;' /></td>";
         print "<td><button type='button' name='Button' onclick='window.location.href = \"Datei.php?button=$i\";' />Eingabe anzeigen</button></td>";
   print "</tr>";
                }
print "</table> <br />";
print "</form>";

#-- Nr. des Buttons und Inhalt des Textfeldes auslesen und ausgeben --#
$buttonnr = $_GET["button"];
if ($buttonnr != "") {
   print "<br />Es wurde Button $buttonnr gedrückt - ";
   $inhalt = $_POST['Textfeld'];
   print "im Textfeld stand $inhalt,";
}

Wie ist das zu realisieren bzw. wie kann ich abhängig vom gedrückten Button das jeweilige Textfeld auslesen?
 
Das funktioniert bei mir nicht. :(
$_GET["textfeld"][$i] kann ich das auch auf die Variable $inhalt bringen?
Welche Methode muss die Form dabei haben?
print "<form action='' method='post'>";
ändern in
print "<form action='' method='get'>";
?
 
Hi,

das funktioniert so schon, wie es Blitzmerker vorgeschlagen hat. Beim Namen des <input oder der <textarea müssen die [ ] dahinter. Dann wird aus der POST (POST für größere Datenmengen immer nehmen!) Variable ein Array das du mit einer for-Schleife durchlaufen kannst. Z.b.:

PHP:
<?php

$text = $_POST['Textfeld'];

for($i=0; $i < count($text); $i++) {
     echo $i + 1.".   ".$text[$i]."</br>"; 
}

?>
<form method="post" name="form" action="index.php">
........
</form>

Du solltest auch in deiner for-Schleife immer mit $i=0 anfangen, dann musst du bei count() und dem Durchlaufen von Arrays nicht immer +1 machen.
 
@ Mercsen : Stimmt, das ist hier wohl schneller.
 
Hallo,

also irgendwie funktioniert das Ganze einfach nicht. :confused_alt::
Was mach ich denn nur falsch? :freak:

Noch einmal zum Aufbau:
HTML:
| Spalte 1 | Spalte 2 | Spalte 3 |
| Text 1   | Textfeld | Button   |
| Text 2   | Textfeld | Button   |
| Text 3   | Textfeld | Button   |
...

Wenn jetzt bspw. der Button der Zeile Text 1 gedrückt wird, dann soll das Textfeld der Zeile 1 ausgelesen werden, wird hingegen der Button der Zeile Text 3 gedrückt, dann soll das Textfeld der Zeile 3 ausgelesen werden, ...
 
ahhhhh, das war mirvorher gar nicht so klar.
Wenn du auf JavaScript verzochten willst,musst du es wohl oder übel mit je einem formular pro zeile machen.
Natürlich könntest du das gesamte Formular abschicken und prüfen welcher submit button gedrückt wurde, musst dann aber alle alten eingaben wieder mit ausgeben, denn sonst sind die weg!

für solche fälle bietet sich das XMLHttprequest Objekt allerdings super an und kann ich nur empfehlen, zumal dadurch der user weiter arbeiten kann, während der server im Hintergrund irgendwelche arbeiten erledigt.

aber beim betrachten deines alten codes sehe ich das es so gar nicht funktionieren kann.
Hast du nochmal den neuen code, wie erjetzt gerade aussieht?
 
Falls du dich für das XMLHttpRequest Object von Mercsen entscheiden solltest, womit du das Skript direkt über einen XMLHttpRequest abschickst (denn nichts anderes ist Ajax) dann solltest du darauf achten das es für den IE über die Active X Schnittstelle erzeugt wird, bei den anderen browsern anders. Oder du nimmst dir eine Javascript-Library, die decken sowas meistens ab.

Der aktuelle Code würde mich auch interessieren.
 
Also der Quellcode sieht nach wie vor so aus, wie am Anfang:

PHP:
$datei = "Datei.txt";
$zeile = file($datei);
print "<form action='' method='post'>";
print "<table>";
   for($i = 1; $i < count($zeile) + 1; $i++){
      $teil = explode(";", $zeile[$i-1]);
      print "<tr>";
         #-- hier soll das Textfeld ausgegeben werden --#
         print "<td><input type='int' name='Textfeld' maxlength='2' style='width: 20px;' /></td>";
         print "<td><button type='button' name='Button' onclick='window.location.href = \"Datei.php?button=$i\";' />Eingabe anzeigen</button></td>";
   print "</tr>";
                }
print "</table> <br />";
print "</form>";

#-- Nr. des Buttons und Inhalt des Textfeldes auslesen und ausgeben --#
$buttonnr = $_GET["button"];
if ($buttonnr != "") {
   print "<br />Es wurde Button $buttonnr gedrückt - ";
   #-- hier soll der Inhalt des jeweiligen Textfeldes auf die Variable gebracht werden --#
   $inhalt = $_POST['Textfeld'];
   print "im Textfeld stand $inhalt,";
}

Im Grunde soll z.B. bei Klick auf den Button der Zeile 2 auch nur das Textfeld der Zeile 2 (bzw. dessen Inhalt) gespeichert werden.
Die anderen Eingaben können verworfen werden.
Also noch zwei weitere Bsp.:
Der Button der Zeile 4 wird gedrückt - Inhalt des Textfeldes in Zeile 4 soll gespeichert werden.
Der Button der Zeile 7 wird gedrückt - Inhalt des Textfeldes in Zeile 7 soll gespeichert werden.
 
also gut, der reihe nach.

da ist nämlich so einiges brach.....

du erstellst zuerst ein Formular mit dem <form> tag, soweit so gut, als Methode gibst du POST an, was auch ok ist.
Jetzt fängt es aber an total aus dem Ruder zu laufen.

Du sagst du willst mehrere UNTERSCHEIDBARE textfelder, weißt aber alle den gleichen namen zu, nämlich "Textfeld".
Wenn du von einer reihe von gegenständen nichts weißt als das alle "Auto" heißen, wie solltest du dann wissen wo der unterschied zwischen ihnen ist ? ;)

So weiter im Text.

Als nächstes erzeugst du ganz viele Buttons, die wieder alle den gleichen namen und somit nicht unterscheidbar sind, es sei denn man nimmt das value Attribute.

Dann weißt du ihnen den handler onclick zu und leitest lediglich auf eine neue Seite um. Gut ist das du per GET die button id übergibst (so kann der name auch bei "Button" bleiben), schlecht ist aber das der inhalt aus dem dazugehörigen Textfeld so nicht mit verschickt wird.

Gehen wir weiter zur Auswertung.

Du fragst dich bestimmt wieso du in $_POST['Textfeld'] nichts drinne stehen hast, oder?
Das liegt daran das niemals Post Daten gesendet wurden. Dazu musst in deinem formular folgende Zeile ändern:

Code:
 print "<td><button type='button' name='Button' onclick='window.location.href = \"Datei.php?button=$i\";' />Eingabe anzeigen</button></td>";
zu
Code:
print "<td><input type='SUBMIT' name='button' value='Eingabe anzeigen'></td>


beim action attrbut des form Tag änderst du den wert auf "Datei.php?b=$i".

aber das ist nich nicht alles.

Wir weisen jetzt jeder zeile ein formular zu:

PHP:
<?php

$datei = "Datei.txt";
$zeile = "Hallo;Hier;ist;eine;datei";

print "<table>";

$teil = explode(";", $zeile);
for ($i = 0; $i < count($teil); $i++) {
    print "<tr>";
    #-- hier soll das Textfeld ausgegeben werden --#
    print "<form action='Datei.php?b=$i' method='post'>";
    print "<td><input type='text' name='Textfeld' maxlength='10' size='10' style='width: 200px;' value='$teil[$i]'/></td>";
    print "<td><button type='submit' name='Button' />Eingabe anzeigen</button></td>";
    print "</form>";
    print "</tr>";
}

print "</table> <br />";


print_r($_POST);
#-- Nr. des Buttons und Inhalt des Textfeldes auslesen und ausgeben --#
$buttonnr = $_GET["b"];
if ($buttonnr != "") {
    print "<br />Es wurde Button $buttonnr gedrückt - ";
    #-- hier soll der Inhalt des jeweiligen Textfeldes auf die Variable gebracht werden --#
    $inhalt = $_POST['Textfeld'];
    print "im Textfeld stand $inhalt,";
}
?>
 
Zurück
Oben