PHP/HTML Formularfelder



  • Und ich bin's nochmal!

    Verrät Ihr mir mal bitte, wie ich es erreichen kann, dass meine bereits eingegebenen Formularfelder nach dem Klicken auf Send-Button und ausführen meines PHP-Programms nicht geleert werden?

    Und außerdem würde ich sehr gene eine ausführliche oder besser gesagt verständliche Erklärung über "name"- und "value"-Definitionen wissen.
    Irgendwie habe ich das Gefühl, ich habe es noch nicht ganz verstanden.
    Und das fällt mir arg auf, wenn ich solches beim Benutzen von Templates definieren muss, das klappt nie auf Anhieb 😞

    Danke Euch!



  • Dann musst du im PHP-Script über das value-Attribut des Formularfeldes den Wert der per get oder post übertragen wurde selbst setzen. name ist der index innerhalb des $_GET, $_POST bzw. $_REQUEST-Arrays und value die Vorbelegung 😉



  • und wie kann ich das in meinem programm machen?
    das php-programm habe ich von jemanden übernommen, dort werden "seine" felder nicht geleert und ich finde an keiner stelle eine einzige zeile, die die post-values wieder zurückliefert und trotzdem stehen die felder nach dem senden nicht leer... meine hinzugefügten felder mit einem extra send-button werden stehen aber nach dem senden leer!



  • er wird bestimmt das value Attribut dieser Formular-Felder wieder entsprechend besetzen 😉



  • Und wie benutze ich hierbei "selected"???



  • Beispiel:

    ...
    <select name="auswahl">
       <option value="1"<?php echo ($auswahl==1)?' selected':''; ?>>Wert 1</option>
       <option value="2"<?php echo ($auswahl==2)?' selected':''; ?>>Wert 2</option>
       ...
    </select>
    ...
    <input type="text" name="eingabefeld" value="<?php echo $eingabefeld; ?>" />
    ...
    


  • <option> habe ich noch nicht hingekriegt, aber wenn ich in dem <input>-Feld wo der Eingabetext drin steht genau das eintrage, was Du geschrieben hast, schreibt er mir genau dieses auch dort ein!
    Also in dem Textfeld steht dann : <?php ....?>

    Was mache ich falsch? 😕



  • Die Endung deiner Datei ist nicht .php bzw. .php4 (oder entsprechend andere Zahl), würde ich jetzt mal vermuten. Oder du versuchst dir die Datei ohne Webserver bzw. PHP anzuschauen.



  • doch doch!
    Endung der Datei ist .php und ich benutze einen Apache-Webserver!



  • Wie wird denn der andere Teil von php eingebettet in deiner Datei? Normalerweise sollte <?php ?> immer funktionieren 😕



  • meine html-datei ist der template!
    kann es sein, dass es deswegen nicht funktioniert?



  • Ja, vermute ich jetzt mal ganz stark. Ich dachte es handle sich um eine normale .php Datei. Da gibt es aber sicher Direktiven, um etwas ins Template einzufügen, oder? Kannst du mal die vordefinierten Eingabefelder posten (da wo es funktioniert)?



  • $types = array('C' => 'Remark',
                    'R' => 'Raw',
                   );
    
    $db->query("select * from layout_fields where layout=$layout order by id");
    $cnt = 0;
    while ($db->next_record()) {
      $opt = '';
      foreach($types as $type => $desc) 
        $opt .= sprintf("<option value=\"%s\" %s>%s</option>",$type,($db->f('type') == $type) ? 'SELECTED' : '',$desc);
      $tpl->set_var(array('FIELD_VALUE' => htmlspecialchars($db->f('field')),
                          'FIELD_NAME' => 'field_' . $cnt,
                          'SELECT_NAME' => 'type_' . $cnt,
                          'SELECT_VALUE' => $opt,
                         ));
      $tpl->parse("rowsedit", "rowedit", true);
      $cnt++;
    }
    

    und so wird's in dem Template aufgerufen:

    <table border=0 cellpadding=3 cellspacing=0>
    <!-- BEGIN rowedit -->
      <tr>
        <td><input type=text size=50 maxsize=50 value="{FIELD_VALUE}" name="{FIELD_NAME}"></td>
        <td><select name="{SELECT_NAME}">{SELECT_VALUE}</select></td>
      </tr>
    <!-- END rowedit -->
    </table>
    

    Nun ist aber das Problem, dass das was ich jetzt brauche, nicht in der DB vorhanden ist, also keine DB-Abfrage!
    Die Felder machen einen Stringvergleich und genau diese Felder sollen nach dem Überprüfen nicht geleert werden!

    Ich hoffe, das war verständlich genug 🙄



  • Naja dann musst du es hald ohne db-Abfrage machen. Im Endeffekt musst du nur die zwei Template Aufrufe mit den richtigen Parametern füttern. Wenn man es genau nimmt, dann brauchst du eigentlich nur das Füllen von $opt anders machen (also manuell).



  • das verstehe ich wirklich nicht.
    wie benutze ich denn in dem fall "selected"?
    wo und wie muss ich das schreiben?



  • So sollte es funktionieren:

    Array für die neue Auswahl

    $auswahlen = array('1' => 'Eins', '2' => 'Zwei');
    

    Codeänderung (fett markiert)

    $db->query("select * from layout_fields where layout=$layout order by id");
    $cnt = 0;
    while ($db->next_record()) {
      $opt = '';
      $opt2 = '';
      foreach($types as $type => $desc) 
        $opt .= sprintf("<option value=\"%s\" %s>%s</option>",$type,($db->f('type') == $type) ? 'SELECTED' : '',$desc);
    
    [b]  foreach($auswahlen as $auswahl => $wert)
        $opt2 .= sprintf("<option value=\"%s\"%s>%s</option>", $auswahl, ($name_des_auswahlfeldes == $auswahl)?' selected':'', $wert);
    [/b]
      $tpl->set_var(array('FIELD_VALUE' => htmlspecialchars($db->f('field')),
                          'FIELD_NAME' => 'field_' . $cnt,
                          'SELECT_NAME' => 'type_' . $cnt,
                          'SELECT_VALUE' => $opt,
     [b]                     'AUSWAHL_NAME' => 'name_des_auswahlfeldes',
                          'AUSWAHL_VALUE' => $opt2[/b]
                         ));
      $tpl->parse("rowsedit", "rowedit", true);
      $cnt++;
    }
    

    HTML-Templatedatei

    <table border=0 cellpadding=3 cellspacing=0>
    <!-- BEGIN rowedit -->
      <tr>
        <td><input type=text size=50 maxsize=50 value="{FIELD_VALUE}" name="{FIELD_NAME}"></td>
        <td><select name="{SELECT_NAME}">{SELECT_VALUE}</select></td>
      </tr>
      <tr>
        <td colspan="2">
          <select name="{AUSWAHL_NAME}">{AUSWAHL_VALUE}</select>
        </td>
      </tr>
    <!-- END rowedit -->
    </table>
    

    Hinweis:
    name_des_auswahlfeldes kannst du natürlich ersetzen durch einen anderen Namen, der vielleicht auch besser passt ;). Außerdem solltest du das Array auswahl mit den Werten füllen, die dann auch in deinem Auswahlfeld zur Verfügung stehen sollen.


Anmelden zum Antworten