Ankündigung

Einklappen
Keine Ankündigung bisher.

Ausgabe von 2 Fehlermeldungen

Einklappen

Neue Werbung 2019

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

  • Ausgabe von 2 Fehlermeldungen

    Hallo ihr da draußen,

    ich kämpfe schon die ganze Zeit mit meinem kleinen Registrierformular, das zwar wunderbar funktioniert, aber die nachträglichen Feinheiten wollen nicht so ganz Funktionieren

    Was ich haben möchte ich das ich 2 verschiedene Fehlermeldungen ausgeben möchte wenn gewisse Kriterien nicht erfüllt wurden bzw doppelte Einträge in der Datenbank vorhanden wären.

    Im Klartext: Wenn ein Benutzername bereits existiert, sagt mir die Meldung das dieser nichtmehr verfügbar ist. - Diese Meldung funktioniert.
    Aber die zweite Meldung, falls die emailadresse bereits vorhanden ist, zeigt er mir immer nur die error_msg an, das ein Interner Fehler aufgetreten ist und nicht die, das die Email bereits verwendet wird.

    Hier mal der Code:
    PHP-Code:
    if(!$stmt->execute()) {
       
        echo 
    $db->error;
        
        if(
    strpos($db->error'Username') !== FALSE    ) {
            
    $error_msg "Der angegebene Benutzername wird bereits verwendet.";
            } else {
                
    $error_msg "Es ist ein interner Fehler aufgetreten. Bitte kontaktieren Sie den Administrator.";
            }
            return;     
        
    }
    $stmt->close();

    if(!
    $stmt->execute()) {
       
        echo 
    $db->error;
       if(
    strpos($db->error'Email') !== FALSE    ) {
            
    $error_msg "Die angegebene Emailadresse wird bereits verwendet.";
            } else {
                
    $error_msg "Es ist ein interner Fehler aufgetreten. Bitte kontaktieren Sie den Administrator.";
            }
            return;  
    }        
    $stmt->close(); 
    ich habe schon ein paar mal dran rumgebastelt aber das haut einfach nicht hin wie ich das haben möchte und hoffe das ich hier vielleicht Hilfe finde

    LG

  • #2
    Willkommen im Forum
    hast du die e-mail-adresse in der DB als unique deklariert?
    maxorxy

    Kommentar


    • #3
      Ja, sowohl emal als auch username sind als unique deklariert worden

      Kommentar


      • #4
        Nach einem kleinen aber feinen logikfehler meinerseits, habe ich die Lösung gefunden.
        Ich muss logischer weise die beiden if-Abfragen zusammen durchlaufen lassen ohne nen return; break.

        Hier des Rätsels Lösung als Code:
        PHP-Code:
        if(!$stmt->execute()) {
           
            echo 
        $db->error;
            
            if(
        strpos($db->error'Username') !== FALSE    ) {
                
        $error_msg "Der angegebene Benutzername wird bereits verwendet.";
                } else {
                    
        $error_msg "Es ist ein interner Fehler aufgetreten. Bitte kontaktieren Sie den Administrator.";
                }
                       
            if(
        strpos($db->error'Email') !== FALSE    ) {
                
        $error_msg "Die angegebene Emailadresse wird bereits verwendet.";
                } else {
                    
        $error_msg "Es ist ein interner Fehler aufgetreten. Bitte kontaktieren Sie den Administrator.";
                }
                return;
        }

        $stmt->close(); 
        Jetzt ergab sich aber ein neues Problem, wie kriege ich eine Fehlermeldung hin, wenn BEIDE Parameter, Username UND Email, vergeben sind?
        Sobald das der Fall ist, kommt wieder meine alternative error_msg das ein interner Fehler aufgetreten ist.

        Das ist zum Haare raufen

        Kommentar


        • #5
          Ich muss logischer weise die beiden if-Abfragen zusammen durchlaufen lassen ohne nen return; break.
          Nö, musste nicht. Vorher hat der erste Fehler gewonnen, jetzt halt der letzte.

          Kommentar


          • #6
            Du solltest die Meldungen sammeln, nicht immer wieder überschreiben.

            Kommentar


            • #7
              das habe ich versucht umzusetzen aber leider ohne Erfolg, wie bekomme ich das hin das ich ALLE 4 möglichen Fälle richtig ausgebe?
              1. Username ist bereits vergeben.
              2. Email ist bereits vergeben.
              3. Username UND Email sind vergeben.
              4. Alternativmeldung: Ein anderer (interner) Fehler ist aufgetreten.

              ich krieg das einfach nicht hin, wenn 2 meldungen funktionieren, hängt sich die ganze sache ab spätestens der dritten Meldung wieder auf.

              Kommentar


              • #8
                Geh doch mal alle Fälle durch und lass Dir die anfallenden Fehlermeldungen ausgeben. Was jedenfalls falsch ist, nach reaturn noch irgendeine Action zu erwarten.

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Geh doch mal alle Fälle durch und lass Dir die anfallenden Fehlermeldungen ausgeben. Was jedenfalls falsch ist, nach reaturn noch irgendeine Action zu erwarten.
                  Das werde ich mal direkt machen, doch solabd ich beispielsweise versuche 2-3 if anfragen als else befehl nacheinander zu schalten, steigt blöderweise die $db variable aus. Ich weiß nicht wieso, denk ich einfach nur zu komplex oder ich steh gerade total auf dem schlauch das nichtmal mehr nen tropfen durchkommt.

                  und das mit return; ist mir schon klar, ich bin halt gerade nichtmehr am denken sondern am "Lego spielen"

                  Kommentar


                  • #10
                    Gib ein Array mit Fehlermeldungen zurück!

                    Kommentar


                    • #11
                      du musst deine Programmlogik an die möglichen Fehlerursachen anpassen ...

                      da musst du nicht schachteln, sondern unabhängig abfragen ..
                      PHP-Code:
                      if(!$stmt->execute()) {
                         echo 
                      $db->error;
                         
                      $fehler=FALSE
                         
                      if(strpos($db->error'Username') !== FALSE    ) {
                            
                      $error_msg[]= "Der angegebene Benutzername wird bereits verwendet.";
                            
                      $fehler=TRUE;
                         }
                         if(
                      strpos($db->error'Email') !== FALSE    ) {
                            
                      $error_msg[] = "Die angegebene Emailadresse wird bereits verwendet.";
                            
                      $fehler=TRUE;
                         }
                         if (
                      $fehler!==TRUE) { // ein anderer Fehler ist aufgetreten, sonst wäre es ja TRUE
                            
                      $error_msg[] = "Ein interner Fehler ist aufgetreten. Bitte wenden sie sich an einen Administrator und schlagen sie den Programmierer.";
                         }
                      }
                      return 
                      $error_msg;
                      $stmt->close(); 

                      Kommentar


                      • #12
                        danke euch für die hilfestellungen, ich habe es etwas vereinfacht gemacht, aber es funktioniert.

                        Gibt es eine möglichkeit die komplette Error_msg aus der Datenbank anzeigen zu lassen, damit ich beide Felder, also Username UND Email zusammen überprüfen kann? Denn mir kommt es so vor, das der $db->error immer nacheinander abgefragt wird und stopt sobald ein Fehler auftrat, in dem Fall eben immer zuerst Username, da es an erster Stelle steht, ich möchte aber alles zusammen überprüfen.

                        Kommentar

                        Lädt...
                        X