Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular

Einklappen

Neue Werbung 2019

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

  • Formular

    Ich komm momentan nicht wirklich weiter in meinem Registrierungsformular:

    Und zwar habe ich hier mein Formular und ist z.B. der Name zu kurz, erzeuge ich mit PHP eine Extra-Zeile über dem Eingabe-Feld mit der Fehlermeldung.

    Doch sind nun wirklich keinerlei Fehler im ganzen Formular vorhanden und alle Angaben gemacht worden, die benötigt sind, erst DANN kann ich ja bestimmen, dass es keine Fehler gibt mit einer Variable. Denn mein Ziel ist es, dass ich das Registrierungsformular ausblende, sobald keine Fehler vorhanden sind und nur noch die Nachricht: "Registrierung erfolgreich!" dort steht. Doch das kann ja nicht gehen, wenn das Formular erstmal durchlaufen werden muss.

    Gibt es dennoch eine Möglichkeit dies zu lösen?

  • #2
    Ja. Trenne Formular und Formularvalidierung. Siehe dazu auch unser Wiki. Z.B. http://www.php.de/wiki-php/index.php...rdverfahren%29

    Ansonsten: Willkommen im Forum!

    Kommentar


    • #3
      Dankeschön, werde ich mal reinschauen.

      PS: Danke, wurde soeben erfolgreich aus einem anderen großen PHP-Forum von schlecht gelaunten Moderatoren mit "Kennste schon if-else?" vergrault wegen dieser Frage.

      Kommentar


      • #4
        Bitte beachten: Anmerkungen zu Multipostings

        Kommentar


        • #5
          Ich mach das so:

          PHP-Code über den HTML-Code, im Formular dann <form action="" method="post">

          PHP prüft dann die Daten im $_POST-Array und erzeugt bei festgestellten Fehlern eine Fehlervariable $fehler, z.B. : $fehler .= 'Bitte PLZ eingeben<br />'

          Wird kein Fehler festgestellt, dann werden die Daten weiterverarbeitet (gespeichert, gemailt usw. und eine Dankeseite geladen. Wenn $fehler einen Inhalt hat, dann wird php beendet und die HTML-Seite wieder neu angezeigt. Dort gibst du $fehler aus, so wie du das ja wohl auch schon tust.
          Die values der Input-Felder werden dann aus den PHP-Variablen gefüllt.

          Kommentar


          • #6
            Oder kurz:
            Code:
            if (submit) {
              error = Validierung
              }
            
            if (!error) {
              Verarbeitung
              Ende
              }
            
            if (error) Fehlermeldung
            Formular mit Selbstaufruf und Wiederauffüllen

            Kommentar


            • #7
              Also, um das ganze zu verdeutlichen - mein Code sieht derzeit so aus:

              PHP-Code:
              // Wenn alle Angaben korrekt sind, diese in der Datenbank speichern und E-Mail-Bestätigung zusenden:
              if ($register AND empty($i)) {

                      
              $pass password(5);
                        
              mysql_query("INSERT INTO users (prename,surname,email,password,gender,regdate) 
                      VALUES ('"
              .addslashes($prename)."','".addslashes($surname)."','$mail_1','$pass','$gender',NOW())");
                      
                      
              # Mail verschicken, dass die Registrierung erfolgreich war #
                      
              mail("$mail_1""".REG_MAIL_TITLE."""".REG_MAIL_TEXT.""
                      
              "From: info@$urlvar\nReply-To: info@$urlvar\nX-Mailer: PHP/");
                      
                      echo 
              "".REG_OK.""; }
                      

                      echo 
              "<table width='100%'>
                      <form action='?site=register' method='post'>"
              ;
                      
              if (
              $register AND strlen($prename) < 1) { $i=1;
                      echo 
              "<tr><td colspan='2'>".X_PRENAME_LEN."</td></tr>"; }

              echo     
              "<tr>
                      <td>"
              .PRENAME.":</td>
                      <td><input type='text' name='prename'></tr>"
              ;


              if (
              $register AND strlen($surname) < 1) { $i=1;
                      echo 
              "<tr><td colspan='2'>".X_SURNAME_LEN."</td></tr>"; }

              echo     
              "<tr>
                      <td>"
              .SURNAME.":</td>
                      <td><input type='text' name='surname'></tr>
                              
                      <tr>
                      <td>"
              .GENDER.":</td>
                      <td>
                      männlich <input value='m' type='radio' name='gender' checked> 
                      weiblich <input value='f' type='radio' name='gender'>
                      </tr>"
              ;

              if (
              $register AND !eregi('^[A-Z]+(-?.?[0-9A-Z]+)+@{1}([0-9A-Z-]+.{1})+([A-Z]{2,4})$',$mail_1)) { $i=1;
                      echo 
              "<tr><td colspan='2'>".X_EMAIL_INVALID."</td></tr>"; }
                              
                      echo 
              "<tr>
                      <td>"
              .MAIL_ADRESS.":</td>
                      <td><input type='text' name='mail_1'></tr>"
              ;
                      
              if (
              $register AND !eregi('^[A-Z]+(-?.?[0-9A-Z]+)+@{1}([0-9A-Z-]+.{1})+([A-Z]{2,4})$',$mail_2)) { $i=1;
                      echo 
              "<tr><td colspan='2'>".X_EMAIL_INVALID."</td></tr>"; }
              elseif (
              $register AND $mail_2 != $mail_1) { $i=1; echo "<tr><td colspan='2' width='35%'>".X_EMAIL_MATCH."</td></tr>"; }

                      echo 
              "<tr>
                      <td>"
              .MAIL_ADRESS.": *</td>
                      <td><input type='text' name='mail_2'></tr>

                      <tr><td></td><td>
                      
                      <input type='submit' name='register' value='"
              .REGISTER."'> 
                      <input type='reset' name='reset' value='"
              .RESET."'>
                      </td></tr></form>
                      
                      </table>"

              Ganz oben wollte ich mit $i überprüfen, ob ein Fehler besteht. Aber das kann ja nicht gehen, weil erst durchlaufen werden muss, ob es einen gibt. Mein Ziel ist es aber, dass das Formular nicht mehr angezeigt wird, sobald es keinen Fehler gibt.

              Mir würde bzgl. meiner Absicht nur so ein Schema dazu einfallen, aber das wär blöd:

              Code:
              if (post){
              
              if (error){ zeige formular mit fehlermeldung(en) }
              else { zeige kein formular mehr und erfolgsmeldung
              
              }
              
              else{ zeige formular }
              Und das Problem hierbei wäre ja, dass ich zwei Mal den Code für das Formular schreiben müsste und das wär ja schwachsinnig (einmal ein exakt gleiches Formular mit Fehlermeldungen und einmal ein "unbenutztes" Formular, wenn man die Seite betritt.

              Ich dachte auch daran, dass ich vielleicht mit Javascript direkt überprüfen lasse, ob was falsch ist, doch fehlen mir da leider die Kenntnisse für und ich weiß auch nicht wie sehr Browserkompatibel das generell ist.

              Kommentar


              • #8
                gib doch nach der Meldung "Registrierung erfolgreich" ein
                PHP-Code:
                exit(); 
                ein dann wird das Formular ja auch nicht mehr angezeigt.

                Ich habe mein Formular auch selber zusammen gewürfelt, aus versch. Tutorials aber dafür klappt es 100%.

                Bei mir ist es so "Fehlermeldung werden unter dem Formular angezeigt"


                und nach erfolgreicher Registrierung erscheint nur die Meldung und das Formular wird nicht mehr angezeigt.

                mfg

                Kommentar


                • #9
                  Wichtig ist das Wiederbefüllen des Formulars und klare Meldungen, was an den Einträgen falsch ist.

                  Ich sehe bei Dir auch keine Superglobalen. Falls Du also mit register_globals on arbeitest, solltest Du das schnell ändern.

                  Kommentar


                  • #10
                    Zitat von vyo Beitrag anzeigen
                    Ganz oben wollte ich mit $i überprüfen, ob ein Fehler besteht. Aber das kann ja nicht gehen, weil erst durchlaufen werden muss, ob es einen gibt.
                    Das liegt nur daran, dass Du Dein Skript so aufgebaut hast
                    Code:
                    Parameter X prüfen
                    HTML für X ausgeben
                    Parameter Y prüfen
                    HTML für Y ausgeben
                    Parameter Z prüfen
                    HTML für Z ausgeben
                    Du musst Dein Skript umbauen. Wie nikosch schon schrieb.
                    Bringe es in die Form
                    Code:
                    Parameter X prüfen
                    Parameter Y prüfen
                    Parameter Z prüfen
                    Wenn keine Fehler
                    - Verarbeitung
                    sonst
                    - HTML für X ausgeben
                    - HTML für Y ausgeben
                    - HTML für Z ausgeben

                    Kommentar


                    • #11
                      Dankeschön, hab's hinbekommen! Eine Frage habe ich aber noch aus Neugier. Ist die "direkte" Überprüfung über JS nicht eigentlich effektiver bzw. was könnte bei dieser an Problemen auftreten für den Seitenbesucher?

                      Und wie kann ich es realisieren, dass beim Absenden Eingaben nicht gelöscht werden?

                      Kommentar


                      • #12
                        Zitat von vyo Beitrag anzeigen
                        Dankeschön, hab's hinbekommen! Eine Frage habe ich aber noch aus Neugier. Ist die "direkte" Überprüfung über JS nicht eigentlich effektiver bzw. was könnte bei dieser an Problemen auftreten für den Seitenbesucher?
                        Nun ja, Javascript wird auf dem Clienten ausgeführt, und wenn da JS aus ist, dann gibt es keine Überprüfung, das wiederrum ist schlecht

                        Kommentar


                        • #13
                          JS kann so nur als Ergänzung gesehen werden. Vor der Verarbeitung muß auf jeden Fall die verarbeitende Komponente prüfen.

                          Kommentar

                          Lädt...
                          X