Eingaben erzwingen -suche besseren Ansatz

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eingaben erzwingen -suche besseren Ansatz

    Hallo, ich bin dabei ein Gästebuch umzuprogrammieren.
    Hierbei sollen bestimmte Werte zwingend eingegeben werden, andere wiederum nicht.
    Die zwingenden Werte sind so was wie Ort, Name und Beitrag.
    Jetzt stellt sich für mich die Frage, wie man solche Werte am besten abfragt.
    Eine Lösung habe ich bereits gesehen, sie hat aber einen Nachteil
    PHP-Code:
           if(trim($Name) == "")
                   {   
                      die(
    "Bitte geben sie einen Namen ein");
                  }
                  if(
    trim($Beitrag) == "")
                   { 
                      die(
    "Bitte geben sie einen Text ein");
                  }
                   if(
    trim($Ort) == "")
                   {
                  
                      die(
    "Bitte geben sie einen Ort ein");
                  } 
    Wenn ich das so mache und der User hat seinen Name, den Beitrag und den Ort vergessen, wird zuerst eine Fehlermeldung ausgegeben, das er den Namen vergessen hat. Der User klickt also zurück und muss seinen Namen eintragen. Dann wird ausgegeben das er seinen Beitrag vergessen hat und der Benutzer muss wieder auf zurück klicken etc. Was ich möchte ist, dass alle Fehlermeldungen ZUSAMMEN ausgegeben werden.

    Ich habe auch schon eine Idee, finde sie aber unsauber.
    Meine Idee ist folgende. Ich habe eine Array mit 3 Elementen, die ich alle vor der Abfrage auf -1 setze.
    Fehlt nun der Name, setze ich das erste Element auf einen Wert ungleich -1, fehlt der Beitrag, setzte ich das zweite Elemetnt auf einen Wert ungleich -1 usw.
    Nachdem alle Variablen überprüft sind, checke ich dann ab, welche Feldelement nicht mehr auf -1 sind und gebe die entsprechenden Fehlermeldungen aus.
    Soweit verstanden??
    Diese Lösung würde wohl funktionienen, ist aber doch sicher unsauber.
    Gibt es eine bessere?

    greets zabarax

  • #2
    PHP-Code:
    $errors = array();
    if (empty(
    $_POST['name']))
      
    $errors[] = 'Sag meinen Namen!';
    if (empty(
    $_POST['mail']))
      
    $errors[] = 'Du brauscht Mail Alder, weissu!';

    if (
    count($errors)) == 0)
      echo 
    'Wunderbar';
    else
      echo 
    '<p class="error">'.implode('<br />'$errors).'</p>'
    so?
    als ansatz?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ... und die Pflichtfelder im Formular mal Signalisieren (z.B. roter *neben dem Feld, ...) , dass der User auch sofort sieht, wo er unbedingt was eingeben mußt, dann dürfte der Fehlerabfang ziemlich selten eintreten.

      Kommentar


      • #4
        Das ging aber verdammt schnell. Das sieht auch gut aus. Ich verarbeite das mal auf mein Beispiel weiter.

        Ich melde mich dann nochmal wenn es geklappt hat oder nicht klappte.
        DANKE

        Kommentar


        • #5
          Original geschrieben von asp2php
          ... und die Pflichtfelder im Formular mal Signalisieren (z.B. roter *neben dem Feld, ...) , dass der User auch sofort sieht, wo er unbedingt was eingeben mußt, dann dürfte der Fehlerabfang ziemlich selten eintreten.
          Ja sicher, das Gästebuch soll für Leute werden, die quasi noch kaum was mit dem internet zu tun haben. Es muss also mehr als DAU sicher werden.
          Dieser Code
          PHP-Code:
          if (count($errors)) == 0)
            echo 
          'Wunderbar';
          else
            echo 
          '<p class="error">'.implode('<br />'$errors).'</p>'
          funktioniert mit meiner PHP version 4.3.4 aber irgendwie überhaupt nicht. Ich habe den Code aber jetzt umgebaut und jetzt funktioniert es. Hier ist der modifizierte code, mit dem es einwandfrei funktioniert.

          PHP-Code:
            $anzFehlercount($errors);
            if (
          $anzFehler==0)
              echo 
          'Wunderbar';
              
              else  {
            echo 
          '<p class="error">'.implode('<br />'$errors).'</p>';
              die;
              } 
          Wenn ich das so eingebe, wie mrhappiness geschrieben hat, kommt folgende Fehlermeldung.

          PHP-Code:
          Parse errorparse errorunexpected T_IS_EQUAL in c:\minixampp\htdocs\book\gb.php on line 172 
          172 ist genau diese Stelle
          if (count($errors)) == 0)
          Naja, es funktioniert halt mit meiner zwischenvariable und ich bin zufreiden. Also THX

          Kommentar


          • #6
            da ist eine Klammer zu viel . Happy wollte dir bestimmt eins auswischen

            Kommentar


            • #7
              Ja, ich habe es jetzt auch gesehen. Ist klar jetzt.

              Kommentar


              • #8
                Original geschrieben von asp2php
                Happy wollte dir bestimmt eins auswischen
                OffTopic:
                ich? wischen?
                ich bin ein mann...

                OffTopic:
                aber zum denken anregen wollte ich ihn...

                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Also ich bin leider noch nicht ganz fertig.
                  Bei mir auf lokaler Ebene ist bei XAMPP register globals an.
                  Deshalb wäre es doch cool, wenn die Variable $errors global wäre, damit ich in den prüfenden Funktionen nicht jedes mal noch $errors returnen muß. Ich weiß, man sollte eigentlich die Finger von globalen Variablen laßen, aber ich denke das Array könnte man ruhig mal global machen, das erspart dann bei vielen Eingaben einiges an Tipparbeit.

                  Ich weiß auch, das man Variablen mit dem Keyword global global machen kann.
                  Aber wie mache ich das genau????
                  Ich bekomme immer Parserror.
                  Ich habe mal in Manual nachgeschaut.
                  Da global ja nur ein Keyword ist und keine Funktion, brauche ich nicht in der Funktionsliste zu suchen. Das einzige was treffen könnte wäre die Onlindokumentation, welche auf googel verweist. Dort wird viel angezeigt aber nicht wie ich eine Variable Global mache. Das kann doch eigentlich nicht so schweeer sein.
                  Wie mache ich das denn jetzt?

                  Kommentar


                  • #10
                    Ich glaube ich bekomme es auch ohne Global hin, naja würde mich trotzdem mal interessiere wie man es mit Global macht.

                    Kommentar


                    • #11
                      Original geschrieben von zabarax
                      Ich glaube ich bekomme es auch ohne Global hin, naja würde mich trotzdem mal interessiere wie man es mit Global macht.
                      müsste eigentlich
                      PHP-Code:
                      global $error
                      sein...glaub ich...eigentlich verwende ich sowas nie, Globale-Variablen sind nicht toll und IMHO auch in PHP nicht nötig. Du deklarierst die einfach außerhalb von allem anderen, und an Funktionen übergibst du sie per Referenz, und an andere Seiten per POST/GET....sollte reichen oder nicht? (Global hat nur den Vorteil, dass du die Variable nicht per Referenz übergeben musst, dafür ist sie dann aber auch in Funktionen verfügbar, wo sie vielleicht eher stört....)

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Original geschrieben von zabarax

                        Da global ja nur ein Keyword ist und keine Funktion, brauche ich nicht in der Funktionsliste zu suchen. Das einzige was treffen könnte wäre die Onlindokumentation, welche auf googel verweist. Dort wird viel angezeigt aber nicht wie ich eine Variable Global mache. Das kann doch eigentlich nicht so schweeer sein.
                        Wie mache ich das denn jetzt?
                        ist das wirklich so schwer zu verstehen?
                        PHP-Code:
                        $global_var 1;

                        function 
                        f1() {
                           
                        $global_var += 1// name ist gleich, var ist aber nicht die gleiche
                                                    // wert von globalen $gloabl_var wird nicht verändert
                           
                        echo "\$global_var in f1 ist $global_var";
                        }

                        function 
                        f2() {
                           global 
                        $global_var// global_var ist nun in der Fkt. verfügbar
                            
                        $global_var += 1;
                             echo 
                        "\$global_var in f2 ist $global_var";
                        }

                        echo 
                        "wert von \$global_var: $global_var<br />\n";
                        f1();
                        echo 
                        "<br />wert von \$global_var ist $global_var nach Aufruf von f1<br />\n";
                        f2();
                        echo 
                        "<br />wert von \$global_var ist $global_var nach Aufruf von f2<br />\n"
                        doch global verwenden nur Anfänger und unverantwortliche Progger

                        Kommentar


                        • #13
                          Ok, ich habe es jetzt ohne Global gelöst, also es geht darum die länge von einem String zu bestimmen und dann eventuell die Eingabe nicht zu akzeptieren.


                          PHP-Code:
                          function Checklength($CheckVar,$Funktionsname,$Length=12)   //CheckVar ist die auf Länge zu überprüfende
                          // Variable, $length ist die länge  dieer nicht überschreiten darf
                          // Funktionsname ist der Wert, der dann in der Fehlermeldung stehen soll. z.b Passwort
                          {
                            
                          $Fehler=array();
                             
                          $Stringlength=strlen($CheckVar);
                              if  (
                          $Stringlength>$Length)
                              {
                              
                          $Fehler[]="Die laenge von $Funktionsname ist zu groß,sie darf nur maximal $Length lang sein<BR> ";
                             
                          //$Fehler;
                              
                          return $Fehler;
                              }
                          // die;

                          Der Aufruf sieht dann so aus
                          PHP-Code:
                           $FehlermeldungenChecklength($_POST['Name'],'Name'); 
                          Der Name darf also nur max 12 Zeichen lang sein.
                          Wenn ein anderer wert z.B. das passwort nur 10 Zeichen lang sein darf ,kann ich auch so aufrufen

                          PHP-Code:
                          [PHP$FehlermeldungenChecklength($_POST['pass'],'Passwort',10); 
                          [/PHP]
                          Die Funktion wird also überlagert

                          Wie soll das mit den Referenzen funktionieren?
                          Übergebe ich da quasi einene Pointer so wie in c++?

                          Naja mit regulären Ausdrücken wäre das ganze etwas einfacher
                          Zuletzt geändert von zabarax; 12.12.2004, 16:48.

                          Kommentar

                          Lädt...
                          X