Problem mit logischer Verknüpfung "AND"

  • Ich möchte eine Anmeldeseite (Login-Seite, Newsletter etc. für mein Problem unerheblich) erstellen mit einigen Pflichtangaben.
    Nach Absenden der Daten bekommt der User eine Bestätigungsmail um seine Email-adresse zu verifizieren.


    Soweit ist alles kein Problem.


    Wenn ich jetzt aber auf den zugeschickten Link klicke verifiziert er nicht sondern führt "else" aus - sprich der User wird nicht bestätigt. Auch keine Fehlermeldung von PHP o. Ä.


    Hier ist der Befehl, den ich habe um zu vergleichen ob die Daten in der URL mit denen in der Datenbank übereinstimmt.


    Code
    if ( $email == $_GET['mail'] AND $kontrollzahl == $_GET['id'])


    die URL dazu sieht so aus: <!-- m --><a class="postlink" href="http://localhost/dateiname.php?mail=deinname@web.de&id=07201115231802">http://localhost/dateiname.php?mail=dei ... 1115231802</a><!-- m -->


    Sobald ich das "AND" in ein "OR" ändere funktioniert es. Aber nur teilweise, da er jetzt ja "oder" prüft. Die Daten stimmen aber zu 100% mit denen in der Datenbank und der URL überein.


    Wenn ich mir das $_GET komplett als Array ausgeben lasse bekomme ich auch exakt das was in der URL steht.


    Woran liegt das?

  • Hallo Milano,


    was steht in den Variablen $email und $kontrollzahl drin ? Werden sie korrekt initialisiert ?
    Vielleicht ist es ein Problem mit der Groß- und Kleinschreibung.


    LG

  • Hallo CyberGirl,


    also, wenn ich mir den Inhalt der beiden Variablen unmittelbar vor dem IF ausgeben lasse, bekomme ich exakt die gleiche email und kontrollzahl wie in der URL raus, sodass eigentlich beides übereinstimmt.


    Keine Ahnung woran es noch liegen könnte.


    Grüße


    Edit*
    Habe gerade gesehen, dass wenn ich mir $_GET['id'] und $_GET['mail'] ausgeben lasse, beides jeweils 4 mal auf den Bildschirm bekomme!!???


    also: $email und $kontrollzahl wird jeweils einmal korrekt ausgegeben.
    $_GET['id'] und $_GET['mail'] werden jeweils 4!!! mal ausgegeben.

    ABER: mit "OR" funktioniert die Geschichte, mit dem Problem, dass eben nur noch eins von beiden stimmen muss.

  • Leider geht keine dieser Varianten:


    Code
    if ( ($email == $_GET['mail']) AND ($kontrollzahl == $_GET['id'])) // zusätzliche Klammer


    Code
    if ( ($email == $_GET['mail']) && ($kontrollzahl == $_GET['id'])) // zusätzliche Klammer + &&


    Code
    if ( $email == $_GET['mail'] && $kontrollzahl == $_GET['id']) // einzelne Klammer + &&


    Wenn ich ein + reinsetze wird es wie das OR verarbeitet.


    Wo könnte das Problem noch liegen?

  • Hallo Milano,


    kannst Du mal den ganzen Code posten ? Vielleicht liegt der Fehler schon vorher. Die if Abfrage ist fehlerfrei und das der Fehler bei dem PHP Interpreter liegt kann ich mir nicht vorstellen.


    LG

  • So, habe jetzt mal den gesamten Code reingepackt.
    Er ist etwas abgespeckt, dann ist es sehr übersichtlich und der Fehler liegt vielleicht schneller auf der Hand.
    Es ist aber nach wie vor dasselbe Problem.


    Das ich den kleinen Part am Anfang in einer Funktion hab kommt daher, dass ich es des Lernens wegen ausprobiert habe.


  • Sorry. Kommt sofort:


    <!-- e --><a href="mailto:deinname@web.de">deinname@web.de</a><!-- e --> | Herr | Vorname | Nachname | 23201115253102
    <!-- e --><a href="mailto:test@gmx.de">test@gmx.de</a><!-- e --> | Herr | test | test2 | 29201115254302
    <!-- e --><a href="mailto:hallo@gmx.de">hallo@gmx.de</a><!-- e --> | Herr | hallo | hallo2 | 58201115254302


    Und die Url für den Ersten der Liste sieht dann so aus:


    <!-- m --><a class="postlink" href="http://localhost/dateiname.php?mail=deinname@web.de&id=23201115253102">http://localhost/dateiname.php?mail=dei ... 1115253102</a><!-- m -->

  • Zwischen den Werten und den Pipes (|) sind Leerzeichen, diese musst du auch mit in explode aufnehmen, also:

    PHP
    <span class="syntaxdefault"></span><span class="syntaxcomment">/* ... */ </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">' | '</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$inhalt</span><span class="syntaxkeyword">); </span><span class="syntaxdefault"></span>
  • TATSÄCHLICH!!! Es funktioniert! Viele Dank. :D


    Trotzdem noch zwei Fragen:
    ich dachte ich hätte die Leerzeichen schon rausgenommen mit

    Code
    $inhalt = trim ( $inhalt );


    nicht?


    Und warum hat es mit OR "funktioniert"?


    Grüße

  • trim entfernt nur Leerzeichen am Anfang und am Ende des Strings. Wenn hättest du trim nacher auf die Einzelvariablen anwenden müssen.


    Wieso das mit or funktioniert kann ich dir auch nicht sagen

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!