Olaf: Daten aus Tabelle als Vorbelegung für Formular

Servus,
will auf einer Seite aktuelle Werte aus einer Datenbank direkt als Vorgesetzte Werte in einem Formular verwenden (<input ... value="aktueller Wert aus der Datenbank")
Gelingt mir auch. Für die Vorauswahl bei select options habe ich folgende Lösung.
Beispiel Anrede des aktuellen Nutzers:

  
$sql = "SELECT anrede, vorname, name, FROM nutzer WHERE '".$_SESSION['profilID']."'=ID";  
$query = mysql_query($sql) or die(mysql_error());  
$nutzer_daten = mysql_fetch_array($query); /*Ausgelesene Daten werden in einem Array gespeichert*/  
if ($nutzer_daten['anrede']=='Herr'){$aherr='selected="selected"'; $afrau='';}  
else {$aherr=''; $afrau='selected="selected"';}

Später dann beim Formular (dass ich über HEREDOC einfüge:

  
// ...  
<p><label for="anrede">Anrede</label><br />  
        <select id="anrede" name="anrede" size="1"><option {$aherr}>Herr</option><option {$afrau}>Frau</option></select></p>  

Ist das eine unschöne Lösung bzw. geht das auch einfacher?

Es grüßt
Olaf

  1. hi,

    Ist das eine unschöne Lösung bzw. geht das auch einfacher?

    So richtig schön wird das mit einem geeigneten Templatesystem, ohne Parameter: Setzen der Default-Werte, mit Parameter: Je nach Eingabe...

    Viele Grüße,
    Hotti

  2. hi,

    Servus,
    will auf einer Seite aktuelle Werte aus einer Datenbank direkt als Vorgesetzte Werte in einem Formular verwenden (<input ... value="aktueller Wert aus der Datenbank")
    Gelingt mir auch. Für die Vorauswahl bei select options habe ich folgende Lösung.
    Beispiel Anrede des aktuellen Nutzers:

    $sql = "SELECT anrede, vorname, name, FROM nutzer WHERE '".$_SESSION['profilID']."'=ID";
    $query = mysql_query($sql) or die(mysql_error());
    $nutzer_daten = mysql_fetch_array($query); /Ausgelesene Daten werden in einem Array gespeichert/
    if ($nutzer_daten['anrede']=='Herr'){$aherr='selected="selected"'; $afrau='';}
    else {$aherr=''; $afrau='selected="selected"';}

    
    >   
    > Später dann beim Formular (dass ich über HEREDOC einfüge:  
    > ~~~php
      
    
    > // ...  
    > <p><label for="anrede">Anrede</label><br />  
    >         <select id="anrede" name="anrede" size="1"><option {$aherr}>Herr</option><option {$afrau}>Frau</option></select></p>  
    > 
    
    

    Ist das eine unschöne Lösung bzw. geht das auch einfacher?

    mache kein heredoc. nimm php im html!

    <p>
    <?php echo $myVar?>
    </p>

    Das geht mit if, switch, for und foreach übrigens auch:

    <?php if($checkSomething()):?>
    <p>html goes here</p>
    <?php endif?>

    Müsste mal im Wiki schauen, ob da was zu alternativer Syntax steht ...; das ist wirklich bei der Ausgabe eigentlich der "Kern" von PHP. Kein String-Replace, keine Ausgabe von Endlos-Strings (HTML), sondern das Variable wird im Statischen platziert. PHP ist eine Templatesprache meine ich.

    mfg

    tami

    1. Da gibt es hier im Forum und auch allgemein im Internet tausend Meinungen dazu, was richtig ist.
      Ich mach es gerade bei passwortgeschützten Bereichen unter der Verwendung von Sessions inzwischen immer so:

        
      <?php  
      // Session starten  
      session_start();  
        
      // Melde alle PHP Fehler  
      error_reporting(E_ALL);  
        
      // Informationen für den Zugang zur Datenbank  
      $MYSQL_HOST = 'localhost';  
      $MYSQL_USER = 'XXX';  
      $MYSQL_PASS = 'XXX';  
      $MYSQL_DATA = 'XXX';  
        
      // HTML-Kopf wird bis zum BODY vorbereitet  
      $deklaration= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";  
      $header=<<<HEADER  
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
      <head>  
      <title>Seitentitel</title>  
      <link href="styles/XXX.css" rel="stylesheet" type="text/css" />  
      </head>  
      HEADER;  
        
      // HTML-Rumpf wird ab BODY vorbereitet  
      $rumpf="</html>";  
        
      // Login-Status überprüfen  
      if(!isset($_SESSION['profilID'])) {  
      	echo $deklaration;  
      	echo $header;  
      	echo "<h1>Sie sind nicht eingeloggt.</h1>\n";  
      	echo "<h2>Bitte <a href=\"login.php\">loggen</a> Sie sich zuerst ein.</h2>\n";  
      	echo $rumpf;  
      	}  
      else {  
        
      // Verbindung zur Datenbank aufbauen  
      $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());  
      mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());  
        
      // Daten etc. per PHP aus Verarbeiten und und den Tabellen ziehen  
        
      $body=<<<BODY  
      // Hier schreibe ich den HTML Teil rein  
      BODY;  
        
      echo $deklaration;  
      echo $header;  
      echo $body;  
      echo $rumpf;  
      ?>  
      
      

      Es grüßt
      Olaf

      1. hi,

        Da gibt es hier im Forum und auch allgemein im Internet tausend Meinungen dazu, was richtig ist.

        Es geht um Einfachheit und Übersicht (u.a. auch Syntaxhighlighting). In erster Linie handelst Du dir Fehler ein, die Du so schnell nicht erkennst. Aber ich habe schon einige gesehen, die so angefangen haben. Erst per echo, dann, vermeintlich schon besser, mit heredoc, dann, weil einfach am einfachsten ist, php im html. Aber "richtig" ist das nicht! ;-)

        mfg

        tami

  3. Hello Olaf,

    ich stricke auch immer noch an einem Templatesystem und mein größtes Problem ist die Vereinfachung. Kompliziert kann man nämlich alles in Funktionen, Methoden und Klassen fassen. Es aber anschließend wieder in eine überschaubare Form zu reduzieren, das ist die Kunst :-)

    Die Regeln, die sich durchgesetzt haben bisher:

    • trenne Daten und Formatierung solange, wie möglich
    • Daten und Formatierung müssen bezüglich der Darstellung[1] gleichartig vorliegen.

    Was bedeutet das?

    Bitte baue Dein HTML-Formular so auf, als wäre es statisch deklariert, inklusive Formatierung und Daten.

    Schaue nach, wie Du Datenwerte gegen Platzhalter austauschen kannst.

    Schaue, wo sich Platzhalter und ihre Formatierung wiederholen
    Diesen Bereich musst Du ausgliedern und gesondert definieren.

    So kommst Du dann irgendwann zu einem Template mit Untertemplates, die nur mit den Daten verbunden werden müssen, solange welche existieren.

    Du bist damit nicht mehr unbedingt von HTML als Formatierungssprache abhängig, sondern kannst diese ersetzen gegen hast jede gewünschte Templatesprache.

    [1] Darstellung im Sinne eines Schichtenmodells, nicht im Sinne von "ansehen"

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de