kostenloser Webspace werbefrei: lima-city


sqlabfrage schaut nich nach

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    gravedesign

    gravedesign hat kostenlosen Webspace.

    Hi leute,

    ich hab ref="/tag/folgendes problem">folgendes problem

    $sql="SELECT COUNT(*) FROM gamer WHERE nickname = ' ".$nickname."' ";
    $ergebnis=mysql_query($sql) or die("Konnte Abfrage nicht machen!");
    
    if($ergebnis == 0){
        echo"Nickname frei"; //nur zu Testzwecken ausgeben
    }
    else{
        $message.= "<p class='error'>Nickname schon vorhanden!</p>";
    }
    
    // Emailadresse
    $sql2 = mysql_query("SELECT COUNT(*) FROM gamer WHERE email ='".$email."' ");
    if ($sql2 != 0){
        echo"Email noch nicht belegt";
    }
    else{
      $message.="<p class='error'>Dein E-Mail-Adresse ist schon vorhanden!</p>"; 
    }


    bei der nickname anfrage und der email abfrage ob der eingetragene nickname im formular eingegeben wurde schaut das script nicht nach wenn ich "==" durch "!=" bei der nickname abfrage speichert das script auch mehrfach den code was mach ich falsch?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Du kannst nicht einfach die Variable mit den Datensätzen mit 0 vergleichen. Du musst mit num_rows abfragen, wieviele Ergebniss geliefert wurden. Diesen Wert kannst du dann mit 0 vergleichen.

    Ich arbeite nur noch mit mySQLi, da würde das Ganze so aussehen:

    $sql = "SELECT salt FROM user WHERE name = '$username'";
            $result = $db->query($sql);
            if($result->num_rows == 1){


    Google einfach mal nach mysql num_rows.

  4. Autor dieses Themas

    gravedesign

    gravedesign hat kostenlosen Webspace.

    ah ok dank dir für deine antwort werd es dann gleich testen^^

    if(mysql_num_rows($ergebnis) == 0){
        echo"Nickname frei"; //nur zu Testzwecken ausgeben
    }
    else{
        $message.= "<p class='error'>Nickname schon vorhanden!</p>";
    }
    
    // Emailadresse
    $sql2 = mysql_query("SELECT COUNT(*) FROM gamer WHERE email ='".$email."' ");
    if (mysql_num_rows($sql2) != 0){
        echo"Email noch nicht belegt";
    }
    else{
      $message.="<p class='error'>Dein E-Mail-Adresse ist schon vorhanden!</p>"; 
    }


    er gibt trotzdem nich die richtigen fehlermeldungen aus bzw legt er trotz das der nick vorhanden ist den nick nochmal an wo ist der denkfehler bei mir?

    Beitrag zuletzt geändert: 13.10.2010 13:43:09 von gravedesign
  5. Hey,
    Vorab eine kleine Bemerkung:
    Die Eingaben sind nicht escaped!
    Vor der Query muss unbedingt hoch das hier ausgeführt werden, um sql injection zu vermeiden:
    $nickname = mysql_real_escape_string($nickname);
    $email = mysql_real_escape_string($email);


    Nun zu deinem Problem:
    Es gibt zwei Möglichkeiten:
    Ich fang mal mit der an, die du dir ausgesucht hast:

    $ergebnis = mysql_query("SELECT COUNT(*) AS Anzahl FROM gamer WHERE nickname = '".$nickname."' ");
    $res = mysql_fetch_object($ergebnis);
    
    if($res->Anzahl == 0){
        echo"Nickname frei"; //nur zu Testzwecken ausgeben
    } else {
        $message.= "<p class='error'>Nickname schon vorhanden!</p>";
    }
    
    // Emailadresse
    $ergebnis2 = mysql_query("SELECT COUNT(*) AS Anzahl FROM gamer WHERE email ='".$email."' ");
    $res2 = mysql_fetch_object($ergebnis2);
    if ($res2->Anzahl == 0){
        echo"Email noch nicht belegt";
    } else {
      $message.="<p class='error'>Deine E-Mail-Adresse ist schon vorhanden!</p>"; 
    }


    Das
    AS Anzahl
    ist ein Alias. Dadurch kann man im Resultat in der Spalte Anzahl lesen.
    nach mysql_query muss man immer noch fetchen. Ich mach das immer mit fetch_object, weil ich gerne Objektorientiert arbeite. Man kann aber auch fetch_assoc machen, wenn man will.


    Nun Variante 2 mit mysql_num_rows:
    mysql_num_rows zählt die Anzahl der Zeilen im Ergebnis. Ein "SELECT COUNT(*) ..." hat allerdings IMMER genau eine Zeile, also kann man das so nicht machen. Das geht etwas anders. Man wählt die jeweiligen gamer aus anstatt zu zählen:

    $ergebnis = mysql_query("SELECT * FROM gamer WHERE nickname = '".$nickname."' ");
    if(mysql_num_rows($ergebnis) == 0){
        echo"Nickname frei"; //nur zu Testzwecken ausgeben
    } else {
        $message.= "<p class='error'>Nickname schon vorhanden!</p>";
    }
    
    // Emailadresse
    $ergebnis2 = mysql_query("SELECT * FROM gamer WHERE email ='".$email."' ");
    if(mysql_num_rows($ergebnis2) == 0){
        echo"Email noch nicht belegt";
    } else {
      $message.="<p class='error'>Deine E-Mail-Adresse ist schon vorhanden!</p>"; 
    }
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!