michi16: bereits vorhandene daten in db abfragen

Hallo
ich bin neu hier.
und hier auch gleich mein problem:
Ich brauche für meine Homepage ein Regestrierung, daten in die datenbank eintragen usw ist kein problem, aber das es usernames nicht doppelt gibt, möchte ich eine überprüfung einbauen. Aber so richtig klappt es nicht, habe schon viel ausprobiert und soweit komme ich:

  
<?php  
$nickname=$_POST['nickname'];  
$email=$_POST['email'];  
  
$result = mysql_query("SELECT nickname FROM profile WHERE nickname = $nickname");  
$num_rows = mysql_num_rows($result);  
  
if ($num_rows == 1)  
{  
	echo 'Fehler der Nickname ist bereits vorhanden!';  
}  
else  
{  
        //das selbe für die email adresse  
        //wenn email nicht vergeben-> daten in db einfügen  
        //wenn email vergeben -> ausgabe: Email ist bereits vorhanden  
}?>  

MYSQL Fehlermeldung:

Warning:
mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/projekt/sites/log/reg2.php on line 85

hier natürlich line 8

bitte helft mir, ich weiß langsam nicht mehr weiter. versuche es schon seit 2 tagen hin zu bekommen aber klappt nicht.

mfg michi

  1. Hi,

    Ich brauche für meine Homepage ein Regestrierung, daten in die datenbank eintragen usw ist kein problem, aber das es usernames nicht doppelt gibt, möchte ich eine überprüfung einbauen.

    Das macht man nicht so, wie du es vorhast.

    Stattdessen legt man einen Unique Index auf die betreffende Spalte, versucht einen neuen Datensatz einzufügen - und wertet einen dabei ggf. auftretenden Fehler dahingehend aus, ob er von einer Verletzung des Unique Index herrührte.

    MYSQL Fehlermeldung:

    Warning:
    mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/projekt/sites/log/reg2.php on line 85

    Gewöhne dir bitte an, den Erfolg von Anfragen an die Datenbank zu überprüfen.
    Werte den Rückgabewert von mysql_query aus; und wenn dieser false ist, befrage mysql_error, warum.

    bitte helft mir, ich weiß langsam nicht mehr weiter. versuche es schon seit 2 tagen hin zu bekommen aber klappt nicht.

    Beschäftige dich mit den Grundlagen der SQL-Syntax - der Fehler, den du gemacht hast, ist offensichtlich: Du hast vergessen, Text-Daten innerhalb der Abfrage auch als solche zu kennzeichnen.

    Beschäftige dich ausserdem mit dem Stichwort SQL Injections - wenn du dein Script nicht dagegen absicherst, brauchst du gar nicht erst ein Loginsystem zu erstellen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. moin,

    bitte helft mir, ich weiß langsam nicht mehr weiter. versuche es schon seit 2 tagen hin zu bekommen aber klappt nicht.

    Hast Du in den 2 Tagen auch mal was Anderes versucht als obenstehenden Code?

    Hotti

    --
    Das Programm macht, was es soll. Aber es ist nicht immer das, was Du willst.
  3. Also es hat geklappt danke chris.
    auch wenn ich das mit dem uniqe index nicht ausprobieren kann(zuwenig zeit).

    Hier einmal mein neuer Code:

      
    <?php  
    $nickname=$_POST['nickname'];  
    $email=$_POST['email'];  
      
    $result = mysql_query("SELECT nickname FROM Profile WHERE nickname = '$nickname'");  
    if (mysql_errno()) die ("MySQL-Error: " . mysql_error());  
    $num_rows = mysql_num_rows($result);  
    if (mysql_errno()) die ("MySQL-Error: " . mysql_error());  
    if ($num_rows == 1)  
    {  
    	echo 'Fehler der Nickname ist bereits vorhanden!';  
    }  
    else  
    {  
            //das selbe für die email adresse  
            //wenn email nicht vergeben-> daten in db einfügen  
            //wenn email vergeben -> ausgabe: Email ist bereits vorhanden  
      
    }?>  
    
    
    1. Hi,

      $result = mysql_query("SELECT nickname FROM Profile WHERE nickname = '$nickname'");

        
      ich freue mich schon darauf, in das Formular folgenden Nickname einzugeben:  
        
      foo'; DELETE FROM nickname; --  
        
      Cheatah  
      
      -- 
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
      X-Will-Answer-Email: No  
      X-Please-Search-Archive-First: Absolutely Yes
      
      1. Moin Moin!

        $result = mysql_query("SELECT nickname FROM Profile WHERE nickname = '$nickname'");

        
        >   
        > ich freue mich schon darauf, in das Formular folgenden Nickname einzugeben:  
        >   
        > foo'; DELETE FROM nickname; --  
          
        Du nennst Deinen Nachwuchs doch garantiert [Bobby Tables](http://bobby-tables.com/), oder?  
          
        Alexander
        
        -- 
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        
        1. Moin!

          $result = mysql_query("SELECT nickname FROM Profile WHERE nickname = '$nickname'");

          
          > >   
          > > ich freue mich schon darauf, in das Formular folgenden Nickname einzugeben:  
          > >   
          > > foo'; DELETE FROM nickname; --  
          >   
          > Du nennst Deinen Nachwuchs doch garantiert [Bobby Tables](http://bobby-tables.com/), oder?  
            
          Ich verstehe nicht, was diese Website gegen Escaping von Werten hat. Die Behauptung, Escaping wäre keine Lösung, ist jedenfalls falsch. Prepared Statements können zwar das Escaping von Daten umgehen, aber Daten sind nicht das einzige, was man dynamisch in ein SQL-Statement einbringen will.  
            
           - Sven Rautenberg
          
      2. Hi!

        $result = mysql_query("SELECT nickname FROM Profile WHERE nickname = '$nickname'");
        ich freue mich schon darauf, in das Formular folgenden Nickname einzugeben:
        foo'; DELETE FROM nickname; --

        Kannst du ruhig machen. Da passiert nichts weiter außer einer Fehlermeldung. Solange nicht mysqli_multi_query() verwendet wird, sind keine multiplen Statements absetzbar.

        Lo!