Elegantere Lösung für die Fehlerausgabe

  • Themenstarter Themenstarter hot_wax
  • Beginndatum Beginndatum
H

hot_wax

Hallo,
zur Zeit beschäftige ich mich einem Newsscript. Probleme habe ich sweit nicht jedoch suche ich eine Eleganteren Lösung.
Wenn nicht alle Felder ausgefüllt sind, erscheint die Fehlermeldung. Diese ist so Aufgebaut:

Es sind Fehler aufgetreten

* Sie müssen einen Titel eingeben
* Sie müssen einen Text eingeben

So nun wird auch unterschieden zwischen einem oder mehreren Fehlern. Bei einem fehler kommt als Überschrift "Es ist ein Fehler aufgetreten" bei mehreren kommt "Es sind Fehler aufgetreten". Die Fehler lasse ich natürlich nicht per echo ausgeben sondern im Template der News-Add Funktion.

Ich möchte dies Eleganter lösen.

PHP:
// hier noch des andere

        // heir geht es los
        $error = '';  
        $error_1 = '';
        $errorSt = '<ul>';
        if(isset($_POST['submit'])) { 
          if(empty($_POST['headline']))
            $error_1 .= "<li>Sie müssen einen Titel angeben</li>\n"; 
          if(empty($_POST['text']))
            $error_1 .= "<li>Sie müssen einen Text angeben</li>\n"; 
        }
        
        if(!empty($error_1)) {
          $error_1 .= "</ul>";  
          $count = explode("\n", $error_1);
          $countError = count($count)-1;   
          
          if($countError > 1) {
            $error_2 = "Es sind Fehler aufgeteten\n";
            $error = $errorSt.$error_2.$error_1;    
          } else {
            $error_2 = "Es ist ein Fehler aufgeteten\n";
            $error = $errorSt.$error_2.$error_1;      
          }       
        }  
          
          $template = new template("template/newsadd.html");
          $template->readTemplate();
          $template->assign( "ERROR", $error ); 
          $template->assign( "HEADLINE", $_POST['headline'] ); 
          $template->assign( "CATEGORYS", $cat ); 
          $template->assign( "TEXT", $_POST['text'] );
          $template->display(); 
          $template->killTemplate();
          unset($template);

Vielleicht fällt euch etwas ein ;)
 
Evtl. so:
PHP:
<?php
$fehler = array();

if (fehler1)
{
   $fehler[] = "Fehlermeldung";
}
// usw.
// ...
// ...
if (count($fehler) == 1)
{
    echo "es ist ein Fehler aufgetreten:<br>";
    echo join("<br>", $fehler);
} else {

    echo "es sind Fehler aufgetreten:<br>";
    echo join("<br>", $fehler);
}
?>

Bzw. halt anstelle dem echo einfach $error .=
 
Die Idee gefällt mir soweit schonmal. Bin am überlegen ob ich den Fehler auf dem sleben Template ausgeben lassen soll oder ein zusätzliches Template benutzen soll? Was meint ihr?
 
Für Fehler, die eigentlich und hoffentlich die Ausnahme bleiben finde ich es etwas übertrieben ein extra Template zu erstellen.
 
Für Fehler, die eigentlich und hoffentlich die Ausnahme bleiben finde ich es etwas übertrieben ein extra Template zu erstellen.

Okay, dazu kommt natürlich auch die Frage, muss den wirklich jedes feld genannt werden oder lang es nicht auch zu sagen das nicht alles Felder ausgefüllt sind ?
 
Ich finde das ist Geschmackssache. Ich mache es immer so das ich eine allgemeine Fehlermeldung ausgebe und die betreffenden Felder farblich hervorhebe.
 
Sehe ich auch so, bei mir sehen die Templates dann so aus:
PHP:
<input type="text" <?php echo( isset( $err['vorname'] ) ) ? 'style="background:#AC1619;" ' : ''; ?>name="vorname" id="vorname" />
 
So vielen Dank erstmal! Ich werde das jetzt auch so machen, das eine Allgemeine Fehlermeldung kommt und die leeren Felder mit Farbe hervorgeboben werde. Da ich mit einem Template System arbeite, möchte ich PHP Code nicht mit HTML vermischen deswegen suche ich nach einer Lösung.

Meine Template sieht so aus:

HTML:
{ERROR}
<form method="post" action="" >
// wenn das Titel Feld leer ist kommt bei {INPUT_TITLE_BG}  style="background:#000000"
titel <input id="title" {INPUT_TITLE_BG} name="headline" type="text" value="{HEADLINE}"size="80" /><br /> 
// wenn das Text Feld leer ist kommt bei {INPUT_TEXT_BG}  style="background:#000000"
text <textarea id="text" {INPUT_TEXT_BG} name="text" rows="20" cols="" style="width:500px;">{TEXT}</textarea><br /> 
<input name="submit" type="submit" value="   erstellen   " />
</form>

Die {INPUT_TITLE_BG} Platzhalter sind standard mässig immer Da! Wenn ich beim übergeben der Inhalte an das Template System {INPUT_TITLE_BG} mit übergebe soll er das austauschen mit dem mitpbergebenen Wert.

Wenn ich jedoch {INPUT_TITLE_BG} nicht übergebe sollen die Platzhalter durch "" ein leeren String ersetzt werden.
Nun ist die Frage das die Platzhalter wie {INPUT_TITLE_BG} etc. dem Template System nicht bekannt sind das heißt ich brauche eine Funktion die das Template durchsucht nach einem { und einem } und zwischen drin ist der Unbekannte Name des Platzhalters.

Wie kann ich sowas umsetzten :)
 
Zuletzt bearbeitet von einem Moderator:
Zurück