For und If Schleifen machen Probleme

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

  • For und If Schleifen machen Probleme

    Hallo PHP Gemeinde!

    Ich bin neu in PHP und versuche mich momentan an einer Registrierung mit einer MYSQL Datenbank.
    Bisher hat alles geklappt und so wollte ich noch code einbauen der überprüft ob der Nick und dann ob die Mailadresse schon in der Datenbank vorhanden sind. Nur leider wird jedesmal angegeben das der Nick schon vergeben ist, obwohl das nicht stimmt.

    ich versuche schon das ganze WE lang dem Fehler auf die schliche zu kommen, aber es klappt nicht.

    Ich hoffe ihr könnt mir helfen!

    Phpversion: 5
    OS: Linux (Ubuntu)

    PHP-Code:
    //Läd die nicks und mails; läd sie in die arrays
    $query mysql_query ("SELECT user_name, user_mail FROM c_user");
    $usern = array(); //usern(ame)
    $userm = array(); //userm(ail)
    while (list ($user_name$user_mail) = mysql_fetch_row ($query)) {
        
    array_push ($usern$user_name);
        
    array_push ($userm$user_mail);
    }
    //vergleicht die nicks aus der DB mit der Eingabe
    $anzahl count($usern); //zählt die einträge in dem array
    for ($i=0$i <= $anzahl$i++) {
        
    //$usern[$i] = $usertest; //ist das nötig?
        
    if ($usern[$i] = $nick) { //normalerweiße: if ($usertest = $nick) {
            
    mysql_close();
            
    header ("Location: register.php?fehler=1");
        }
    }
    //Checkt die mails ab
    $anzahl count($userm);
    for (
    $i=0$i <= $anzahl$i++) {
        
    //$userm[$i] = $usermail;
        
    if ($userm[$i] = $mail) {
            
    mysql_close();
            
    header ("Location: register.php?fehler=2");
        }


  • #2
    PHP-Code:
    if ($usern[$i] = $nick
    Du weist, wie man Variablen korrekt(!) vergleicht? Siehe auch hier

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      PHP-Code:
      $sql "
          SELECT user_name, user_mail
          FROM   c_user
          WHERE  user_name = '" 
      mysql_real_escape_string($nick) . "'
          OR     user_mail = '" 
      mysql_real_escape_string($mail) . "'
          LIMIT  1
      "
      ;

      $result mysql_query($sql);

      if (
      $row mysql_fetch_assoc($result)) {
          if (
      $row['user_name'] == $nick) {
              
      header("Location: register.php?fehler=1");
              exit;
          }
          if (
      $row['user_mail'] == $mail) {
              
      header("Location: register.php?fehler=2");
              exit;
          }

      Kommentar


      • #4
        Hallo,

        erstmal zu dem Fehler: du verwendest das einfache = dort wo du das doppelte oder dreifache nehmen müsstest. Das einfache setzt die Variable links auf den Wert rechts und gibt diesen Wert zurück. Damit wird die Bedingung des if immer erfüllt, wenn der Wert rechts vom = nicht leer/falsch/null/0 ist. Zum Vergleichen immer mindestens das == nehmen!

        Zur Herangehensweise: du rufst alle (!) in der DB befindlichen User ab, nur um dann alle einzeln hinsichtlich des Nicknames und der E-Mail-Adresse zu vergleichen? Warum benutzt du keine Where-Klausel, um nur die User abzurufen, die den gleichen Nickname oder (OR) die gleiche E-Mail-Adresse haben, dann würde dein Skript schon sehr viel schneller werden.

        Warum prüfst du überhaupt, ob es diese Daten schon einmal gibt? Wenn du verhindern willst, dass in der DB etwas doppelt vorhanden ist, ist es viel besser, einen Unique Key zu vergeben. Immer wenn du dann was einfügen willst was schon da ist, wird der Vorgang abgebrochen und (je nach Schnittstelle) eine Fehlermeldung oder eine Exception hervorgerufen. Anhand des Fehlercodes weißt du dann "Aha, Unique Verletzung, also sag ich dem User, dass es das schon gibt"

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Zitat von Kropff Beitrag anzeigen
          PHP-Code:
          if ($usern[$i] = $nick
          Du weist, wie man Variablen korrekt(!) vergleicht? Siehe auch hier

          Peter
          Das darf nicht wahr sein! Wie konnte ich nur so Blöd/blind sein!?
          Der text ist jetzt geändert und es klappt wunderbar. Vielen dank. Vielen, vielen Dank!

          @h3ll:
          Sieht noch etwas verwirrend aus da ich mit dem MySql Syntax noch nicht sehr weit bin. Scheint aber unKomplizierter und einfach zu sein. Danke!

          Edit:
          Zitat von AmicaNoctis Beitrag anzeigen
          Zur Herangehensweise: du rufst alle (!) in der DB befindlichen User ab, nur um dann alle einzeln hinsichtlich des Nicknames und der E-Mail-Adresse zu vergleichen? Warum benutzt du keine Where-Klausel, um nur die User abzurufen, die den gleichen Nickname oder (OR) die gleiche E-Mail-Adresse haben, dann würde dein Skript schon sehr viel schneller werden.

          Warum prüfst du überhaupt, ob es diese Daten schon einmal gibt? Wenn du verhindern willst, dass in der DB etwas doppelt vorhanden ist, ist es viel besser, einen Unique Key zu vergeben. Immer wenn du dann was einfügen willst was schon da ist, wird der Vorgang abgebrochen und (je nach Schnittstelle) eine Fehlermeldung oder eine Exception hervorgerufen. Anhand des Fehlercodes weißt du dann "Aha, Unique Verletzung, also sag ich dem User, dass es das schon gibt"

          Gruß,

          Amica
          Uff. Da hab ich jetzt noch viel zum nachdeken. Und zu lesen. Unique Key sagt mir garnichts. Ich werde mir das zu Herzen nehmen und versuchen das so zu machen wie du es beschrieben hast. Danke.
          Zuletzt geändert von Helix; 12.10.2009, 12:17. Grund: Ergänzung, Rechtschreipunk

          Kommentar


          • #6
            Zum Thema If-Schleife noch ein nützlicher Link ;-)
            if-schleife.de

            *scnr*

            Kommentar

            Lädt...
            X