bpiltz: HTML Formular mit letztem Eintrag aktualisieren

Hallo,

ich möchte gerne in einem html-Formular, welches ich in php eingebunden habe, nach dem Abschicken die zu letzt eingegebenen Werte anzeigen lassen. Bisher habe ich versucht mit Sessionvariablen die Values des Formulars zu initialisiern, jedoch nur mit mässigem Erfolg, da die Sessionvariable zu spät mit den letzten Werten beschrieben wird und so nicht der letzte sondern der vorletzte Wert angezeigt wird. Ich habe zum besseren Verständnis den Quelltext des Problems unten abgedruckt.

<?
 session_start();

if($_SESSION['Last_Art_values'])
 {
  $pres_values = $_SESSION['Last_Art_values'];
 }

echo"<body>";

$Anzahl_felder = 2;

echo"<form METHOD='POST'><p align='center'>
<table align='center' border='0' cellspacing='0' cellpadding='0'>";

$s = 0;
while($s < $Anzahl_felder)
 {
 $input_name[$s] = "eingangsname_$s";
 $namen_Feld[$s] = "Feld $s";
  echo"
   <tr>
   <td width='200' align='right' height='15'><font face='Arial'>$namen_Feld[$s]:&#160;</font></td>
   <td align='left'><input name='$input_name[$s]' size='25' value='$pres_values[$s]'> </td>
   </tr>";

$s++;
  }

echo"</table></p>";
echo"<p align='center'><table align='center' border='2' cellspacing='0' cellpadding='0'>
<tr>
<th colspan='2' align='center' height='10'><input type='submit' name='abschicken' value='Senden'></th>
</tr></table></p></form>";

if ($_POST["abschicken"])
 {

$s = 0;
 while ($namen_Feld[$s])
  {
  $input_values[$s] = trim($_POST["$input_name[$s]"]);
  $pres_values[$s] = trim($_POST["$input_name[$s]"]);
  $s++;
  }

$_SESSION['Last_Art_values'] = $input_values;
  //Refresh_page(0);

}

?>

PS.: Sorry wenn ich hier im faschen Forum poste, aber es ist halt ein thema das sowohl php als auch html betrifft.

  1. Hallo!

    Jedes Formularelement hat einen eigenen Namen. Dieser Name wird als Variable in des PHP-Script Übernommen.

    Angenommen du hast ein Textfeld mit dem Namen: "textfeld", dann heißt die variable $textfeld. Variablen haben immer den gleichen namen wie die Steuerelemente nur mit einem Dollarzeichen ($) davor.

    Wenn du jetzt eine Variable ausgeben willst, kannst du das auf zwei Arten machen.

    Die erste verwendest du im PHP-Script:
     <?
    ...
       echo $variable;
    ...
     ?>

    die Zweite, wenn du z.b. das ausgefüllte Formular anzeigen möchtest oder einfach nur in HTML ine PHP-Variable ausgeben möchtest kannst du die Kurzschreibweise verwenden:
        <?=$variable; ?>
    Diese Schreibweise ist Übersichtlicher als die Verherige, funktioniert aber nicht in einem PHP-Scriptteil

    Um einem Formular einen Wert zuzuweisen haben die meisten die Eigenschaft Value.

    1. Hallo!

      Vielen Dank für Deine Hilfe. Aber das war nicht, was ich meinte. Es ist irgendwie schwierig dieses Problem eindeutig zu schildern. Ich versuche es nochmal:

      Das Tag

      <input name='$input_name[$s]' size='25' value='$pres_values[$s]'>

      erzeugt ein Eingabefeld, welches ich mit dem Wert "Value" (hier die Variable "$pres_values[$s]" schon mit einem Default-Wert beschreiben kann. In meiner Anwendung soll das der zu letzt eingegebene und abgeschickte Wert sein. Deshalb übergebe ich weiter unten in der Abfrage des Submit-Buttons die eingegebenen Werte einer Sessionvariablen:

      if ($_POST["abschicken"])
       {....

      $_SESSION['Last_Art_values'] = $input_values;
      .....
        }

      Am Anfang des Skripts wird dann der Inhalt der Sessionvariablen den Default-Werten des Formulars übergeben:

      if($_SESSION['Last_Art_values'])
       {
        $pres_values = $_SESSION['Last_Art_values'];
       }

      Das funktioniert soweit auch, leider aber nicht schnell genug:

      Das Formular wird sofort noch einmal aufgebaut, wenn man den Submitbutton betätigt. Aber blöder Weise mit den alten Werten der Sessionvariablen. Erst nach einem zweiten Neuaufbau ist dann der aktuelle Default-Wert im Formular zu sehen. Das gibt dann diesen Effekt:

      ich habe vorher "3" eingegeben und abgeschickt.

      jetzt gebe "2" ein und drücke "Submit"

      Das Formular wird neu aufgebaut und es erscheint "3"!

      Erst nach erneutem Refresh zeigt das Formular "2" an.

      Wie macht man das richtig? Was mache ich falsch?

      1. hi,

        Deshalb übergebe ich weiter unten in der Abfrage des Submit-Buttons die eingegebenen Werte einer Sessionvariablen: [...]
        Am Anfang des Skripts wird dann der Inhalt der Sessionvariablen den Default-Werten des Formulars übergeben [...]

        Das funktioniert soweit auch, leider aber nicht schnell genug:
        Das Formular wird sofort noch einmal aufgebaut, wenn man den Submitbutton betätigt. Aber blöder Weise mit den alten Werten der Sessionvariablen. Erst nach einem zweiten Neuaufbau ist dann der aktuelle Default-Wert im Formular zu sehen.

        natürlich, dass ist doch kein wunder, bei oben geschilderter reihenfolge.

        wenn die nicht das bringt, was du willst, dann drehe sie um - zuerst übergebene werte in session schreiben, anschließend vorbelegte formularfelder wieder ausgeben.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. HI wahsaga

          wenn die nicht das bringt, was du willst, dann drehe sie um - zuerst übergebene werte in session schreiben, anschließend vorbelegte formularfelder wieder ausgeben.

          Vom Ansatz her liegst Du völlig richtig - das Problem ist aber, das die Übergabe an die Sessionvariable unbedingt unter (nach) dem Formularfeld stehen muss, da sonst einfach keine Werte aus dem Formular gelesen werden können. Sie existieren einfach nur unterthalb des Formulars. Blöd das.

          gruß,

          Bpiltz

          1. hi,

            Vom Ansatz her liegst Du völlig richtig - das Problem ist aber, das die Übergabe an die Sessionvariable unbedingt unter (nach) dem Formularfeld stehen muss, da sonst einfach keine Werte aus dem Formular gelesen werden können. Sie existieren einfach nur unterthalb des Formulars. Blöd das.

            nein, schlicht und einfach nicht wahr das.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."