kostenloser Webspace werbefrei: lima-city


Username auf Verfügbarkeit prüfen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ich habe ein Login und Registrierungs script und jetzt wollte ich fragen wie es möglich ist zu überprüfen ob der Username bereits vergeben ist. Vielen Danke im Vorraus
    meeee...
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Hallo vokabelfreak,

    ich würde es wie folgt machen:
    SELECT COUNT(id) FROM users WHERE username LIKE '<neuer Name>'
    Wenn '0' zurückkommt, dann ist er noch nicht vergeben, bei '1' ist er weg.
  4. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Vielen dank jetzt muss ichs noch kapieren.
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    darkpandemic schrieb:
    ich würde es wie folgt machen:
    SELECT COUNT(id) FROM users WHERE username LIKE '<neuer Name>'
    Wenn '0' zurückkommt, dann ist er noch nicht vergeben, bei '1' ist er weg.
    Warum
    LIKE
    ?

    Warum nicht einfach so:
    SELECT COUNT(id) FROM users WHERE username = '<neuer Name>'
  6. Hallo vokabelfreak,

    die SQL-Funktion COUNT() liefert die Anzahl an Zeilen zurück die anhand der WHERE-Klausel selektiert werden.
    Wenn man z.B. folgende Tabelle hätte:
    artikel        | preis
    ---------------+----------
    Stift          | 0.50
    Radiergummi    | 0.75
    Block          | 1.20
    Klebeband      | 1.50
    Hefter         | 2.00
    Und man führt die Abfrage
    SELECT COUNT(artikel) FROM preise WHERE preis < 1.00
    aus, dann ist das Ergebnis '2', da der Preis von zwei Artikeln kleiner als 1.00 ist. Wenn man z.B.
    SELECT COUNT(artikel) FROM preise WHERE artikel LIKE 's%'
    ausführt, dann bekommt man als Ergebnis '1', da ein Artikelname mit einem 's' beginnt (Stift). Was in der Klammer hinter COUNT steht ist eigentlich egal, solange es ein Feld der Tabelle ist.

    Das 'LIKE' ist reine Gewohnheit. Ich meine, dass das '=' auf einigen Datenbanken Case-Sensitive ist (oder ich hatte schon irgendwelchen anderen Ärger damit). Aber auf jedenfall geht es mit 'LIKE'.

    Beitrag zuletzt geändert: 4.4.2012 20:35:22 von darkpandemic
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    darkpandemic schrieb:
    Ich meine, dass das '=' auf einigen Datenbanken Case-Sensitive ist (oder ich hatte schon irgendwelchen anderen Ärger damit). Aber auf jedenfall geht es mit 'LIKE'.
    Könnte es sein, dass das mit dem Zeichensatz zusammenhängt?
    Normalerweise kann man sich ja zwischen
    *_cs
    und
    *_ci
    aussuchen. Bei
    _cs
    sollte es Case-sensitiv und bei
    _ci
    sollte es eben Case-insensitiv sein.

    Was auch noch als Info zu erwähnen ist:
    SELECT COUNT(artikel) AS count FROM preise WHERE preis < 1.00
    Mit dem
    AS
    könntest du das COUNT(artikel)-Feld noch benennen.
  8. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Also der nickname aus dem formular heist $user und die tabellenspalte 'username'
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Also der nickname aus dem formular heist $user und die tabellenspalte 'username'
    Und was hilft uns das jetzt? Wozu sollten wir das wissen?

    Ist es etwa das, was du suchst:
    $user = mysql_real_escape_string($user);
    $sql = "SELECT COUNT(id) FROM users WHERE username = '$user'";
    $result = mysql_query($sql);
    $count = mysql_result($result, 0);
    if($count == 0)
    	echo('User existiert noch nicht');
    else
    	echo('User existiert bereits');
  10. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Es funktioniert noch nicht. Ich schreib hier mal den Block rein:

    $control = 0;		
    				$abfrage = "SELECT count(username) FROM benutzer WHERE username LIKE '$user'";
    				$ergebnis = mysql_query($abfrage);
    				while($row = mysql_fetch_object($ergebnis))
    					{
    						$control++;
    					}	
    				if($control == 1) {
    					echo "Username schon vergeben. Bitte verwende einen anderen Usernamen....<br /><a href=\"register.php\">zurück</a>";
    				} else {
    				$eintrag = "INSERT INTO benutzer
    				(username, vorname, nachname, date, passwort, mail)
    				VALUES
    				('$user', '$vorname', '$nachname', '$date', '$pw', '$mail')";
    				
    				$eintragen = mysql_query($eintrag);
    				
    				if($eintragen == true) {
    					echo "Vielen Dank. Du hast dich nun registriert.<a href=\"index.php\">Jetzt anmelden</a>";
    				} else {
    					echo "Fehler im System. Bitte versuche es später noch einmal...";
    				}


    Beitrag zuletzt geändert: 5.4.2012 10:42:17 von vokabelfreak
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Es funktioniert noch nicht.
    Ganz einfach warum das nicht funktioniert... das Problem liegt hier:
     				$abfrage = "SELECT count(username) FROM benutzer WHERE username LIKE '$user'";
    				$ergebnis = mysql_query($abfrage);
    				while($row = mysql_fetch_object($ergebnis))
    					{
    						$control++;
    					}

    Die SELECT-Abfrage gibt dir immer genau 1 Zeile zurück...

    Verwend einfach den Code:
    $user = mysql_real_escape_string($user);
    $sql = "SELECT COUNT(id) FROM users WHERE username = '$user'";
    $result = mysql_query($sql);
    $count = mysql_result($result, 0);
    Danach hast du in
    $count
    die Anzahl wie oft es den Benutzer schon gibt.
  12. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Nur den Code verwenden oder zusätzlich zu meinen?
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Nur den Code verwenden oder zusätzlich zu meinen?
    Statt dem Code:
     				$abfrage = "SELECT count(username) FROM benutzer WHERE username LIKE '$user'";
    				$ergebnis = mysql_query($abfrage);
    				while($row = mysql_fetch_object($ergebnis))
    					{
    						$control++;
    					}
    Du könntest das $control bei dir zu $count umbenennen... das würde mehr Sinn machen ;)

    Falls du vorher schon deine Eingaben gefiltert hast musst du das mysql_real_escape_string entfernen...
  14. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Es funktioiert noch nicht. Ich schreib jetzt mal den ganzen Quellcode rein:

    <html>
    </head>
    	<title>Mein Bereich - Registrieren</title>
    </head>
    <body style="background:#52B20E">
    <?php
    if(!isset($_GET["page"])) {
    ?>
    <table>
    		<tr>
    			<td width="100" height="100" style="background:url(vokfreak2.jpg) no-repeat;"></td>
    			<td width="500" height="100" style="background:url(newheader.jpg) no-repeat;"></td>
    			<td width="300" height="100" style="background:url(text.jpg) no-repeat;"></td>
    		</tr>
    </table>
    <br />
    <table>
    	<form action="register.php?page=2" method="post">
    		<tr>
    			<td><font size="5" face="comic sans ms"><b>Registrieren</b></font></td>
    		</tr>
    		<tr>
    			<td>Vorname:</td><td><input style="width:200px;" type="text" name="vor" /></td>
    		</tr>
    		<tr>
    			<td>Nachname:</td><td><input style="width:200px;" type="text" name="nach" /></td>
    		</tr>
    		<tr>
    			<td>E-mail adresse:</td><td><input style="width:200px;" type="text" name="email"></td>
    		</tr>
    		<tr>
    			<td>Geburtsdatum:</td><td><input maxlength="2" style="width:50px;" value="TT" type="text" name="tag" />.<input maxlength="2" style="width:50px;" value="MM" type="text" name="monat" />.<input maxlength="4" style="width:50px;" value="JJJJ" type="text" name="jahr" /></td>
    		</tr>
    		<tr>
    			<td>Username:</td><td><input style="width:200px;" type="text" name="user" /></td>
    		</tr>
    		<tr>
    			<td>Gew&uuml;nschtes Passwort:</td><td><input style="width:200px;" type="password" name="pw" /></td>
    		</tr>
    		<tr>
    			<td>Passwort wiedeholen:</td><td><input style="width:200px;" type="password" name="pw2" /></td>
    		</tr>
    		<tr>
    			<td><input type="submit" value="Senden" /></td>
    		</tr>
    	</form>
    </table>
    <?php
    }
    ?>
    <?php
    if(isset($_GET["page"])) {
    	if($_GET["page"] == "2") {
    		$user = strtolower($_POST["user"]);
    		$pw = md5($_POST["pw"]);
    		$pw2 = md5($_POST["pw2"]);
    		$vorname = strtolower($_POST["vor"]);
    		$nachname = strtolower($_POST["nach"]);
    		$mail = strtolower($_POST["email"]);
    		$date = $_POST["jahr"] . "_" . $_POST["monat"] . "_" . $_POST["tag"];
    		if($user=="" or $pw=="" or $vorname=="" or $nachname=="" or $mail=="" or $date=="JJJJ_MM_TT") {
    		echo "Alle Felder m&uuml;ssen ausgef&uuml;llt werden.";
    		} else {
    		if($pw != $pw2) {
    			echo "Deine Passwörter stimmen nicht überein. Bitte wiederhole deine Eingabe....<a href=\"register.php\">zurück</a>";
    		} else {
    				$verbindung = mysql_connect("mysql.lima-city.de", "XXX", "XXX")
    				or die ("Fehler im System");
    
    				mysql_select_db("db_258331_1")
    				or die ("Verbidung zur Datenbank war nicht möglich...");
    				
    				$count = 0;		
    				$abfrage = "SELECT count(username) FROM benutzer WHERE username LIKE '$user'";
    				$ergebnis = mysql_query($abfrage);
    				while($row = mysql_fetch_object($ergebnis))
    					{
    						$count++;
    					}	
    				if($count == 1) {
    					echo "Username schon vergeben. Bitte verwende einen anderen Usernamen....<br /><a href=\"register.php\">zurück</a>";
    				} else {
    				$eintrag = "INSERT INTO benutzer
    				(username, vorname, nachname, date, passwort, mail)
    				VALUES
    				('$user', '$vorname', '$nachname', '$date', '$pw', '$mail')";
    				
    				$eintragen = mysql_query($eintrag);
    				
    				if($eintragen == true) {
    					echo "Vielen Dank. Du hast dich nun registriert.<a href=\"index.php\">Jetzt anmelden</a>";
    				} else {
    					echo "Fehler im System. Bitte versuche es später noch einmal...";
    				}
    				mysql_close($verbindung);
    				}
    		}
    		}
    		}
    		}
    ?>
    </body>
    </html>


    Beitrag zuletzt geändert: 5.4.2012 12:37:25 von vokabelfreak
  15. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Es funktioiert noch nicht. Ich schreib jetzt mal den ganzen Quellcode rein:
    Also wie es aussehen könnte:
    <html>
    </head>
    	<title>Mein Bereich - Registrieren</title>
    </head>
    <body style="background:#52B20E">
    <?php
    if(!isset($_GET["page"])) {
    ?>
    <table>
    		<tr>
    			<td width="100" height="100" style="background:url(vokfreak2.jpg) no-repeat;"></td>
    			<td width="500" height="100" style="background:url(newheader.jpg) no-repeat;"></td>
    			<td width="300" height="100" style="background:url(text.jpg) no-repeat;"></td>
    		</tr>
    </table>
    <br />
    <table>
    	<form action="register.php?page=2" method="post">
    		<tr>
    			<td><font size="5" face="comic sans ms"><b>Registrieren</b></font></td>
    		</tr>
    		<tr>
    			<td>Vorname:</td><td><input style="width:200px;" type="text" name="vor" /></td>
    		</tr>
    		<tr>
    			<td>Nachname:</td><td><input style="width:200px;" type="text" name="nach" /></td>
    		</tr>
    		<tr>
    			<td>E-mail adresse:</td><td><input style="width:200px;" type="text" name="email"></td>
    		</tr>
    		<tr>
    			<td>Geburtsdatum:</td><td><input maxlength="2" style="width:50px;" value="TT" type="text" name="tag" />.<input maxlength="2" style="width:50px;" value="MM" type="text" name="monat" />.<input maxlength="4" style="width:50px;" value="JJJJ" type="text" name="jahr" /></td>
    		</tr>
    		<tr>
    			<td>Username:</td><td><input style="width:200px;" type="text" name="user" /></td>
    		</tr>
    		<tr>
    			<td>Gew&uuml;nschtes Passwort:</td><td><input style="width:200px;" type="password" name="pw" /></td>
    		</tr>
    		<tr>
    			<td>Passwort wiedeholen:</td><td><input style="width:200px;" type="password" name="pw2" /></td>
    		</tr>
    		<tr>
    			<td><input type="submit" value="Senden" /></td>
    		</tr>
    	</form>
    </table>
    <?php
    }
    ?>
    <?php
    if(isset($_GET["page"])) {
    	if($_GET["page"] == "2") {
    		$user = mysql_real_escape_string(strtolower($_POST["user"]));
    		$pw = md5($_POST["pw"]);
    		$pw2 = md5($_POST["pw2"]);
    		$vorname = mysql_real_escape_string(strtolower($_POST["vor"]));
    		$nachname = mysql_real_escape_string(strtolower($_POST["nach"]));
    		$mail = mysql_real_escape_string(strtolower($_POST["email"]));
    		$date = mysql_real_escape_string($_POST["jahr"] . "_" . $_POST["monat"] . "_" . $_POST["tag"]);
    		if($user=="" or $pw=="" or $vorname=="" or $nachname=="" or $mail=="" or $date=="JJJJ_MM_TT") {
    		echo "Alle Felder m&uuml;ssen ausgef&uuml;llt werden.";
    		} else {
    		if($pw != $pw2) {
    			echo "Deine Passwörter stimmen nicht überein. Bitte wiederhole deine Eingabe....<a href=\"register.php\">zurück</a>";
    		} else {
    				$verbindung = mysql_connect("mysql.lima-city.de", "<dein Benutzer>", "<dein Passwort>")
    				or die ("Fehler im System");
    
    				mysql_select_db("db_258331_1")
    				or die ("Verbidung zur Datenbank war nicht möglich...");
    				
    				$count = 0;		
    				$abfrage = "SELECT COUNT(username) FROM benutzer WHERE username = '$user'";
    				$ergebnis = mysql_query($abfrage);
    				$count = mysql_result($ergebnis, 0);
    				if($count == 1) {
    					echo "Username schon vergeben. Bitte verwende einen anderen Usernamen....<br /><a href=\"register.php\">zurück</a>";
    				} else {
    				$eintrag = "INSERT INTO benutzer
    				(username, vorname, nachname, date, passwort, mail)
    				VALUES
    				('$user', '$vorname', '$nachname', '$date', '$pw', '$mail')";
    				
    				$eintragen = mysql_query($eintrag);
    				
    				if($eintragen == true) {
    					echo "Vielen Dank. Du hast dich nun registriert.<a href=\"index.php\">Jetzt anmelden</a>";
    				} else {
    					echo "Fehler im System. Bitte versuche es später noch einmal...";
    				}
    				mysql_close($verbindung);
    				}
    		}
    		}
    		}
    		}
    ?>
    </body>
    </html>
    Die SQL-Injection-Verwundbarkeit habe ich dir auch behoben.
    Du musst deine MySQL-Zugangsdaten im Script einfügen...

    Beitrag zuletzt geändert: 5.4.2012 12:49:44 von hackyourlife
  16. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Jetzt kommt immer wenn mann das Formular ausfüllt "Alle Felder müssen ausgefühlt werden."
    Ich glaube das hier iwas falsch ist, tut mir leid aber da kenn ich mich nicht so aus;

    $user = mysql_real_escape_string(strtolower($_POST["user"]));
    		$pw = md5($_POST["pw"]);
    		$pw2 = md5($_POST["pw2"]);
    		$vorname = mysql_real_escape_string(strtolower($_POST["vor"]));
    		$nachname = mysql_real_escape_string(strtolower($_POST["nach"]));
    		$mail = mysql_real_escape_string(strtolower($_POST["email"]));
    		$date = mysql_real_escape_string($_POST["jahr"] . "_" . $_POST["monat"] . "_" . $_POST["tag"]);


    Beitrag zuletzt geändert: 5.4.2012 12:50:33 von vokabelfreak
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Jetzt kommt immer wenn mann das Formular ausfüllt "Alle Felder müssen ausgefühlt werden."
    Ich glaube das hier iwas falsch ist, tut mir leid aber da kenn ich mich nicht so aus;
    Ach ja klar, die mysql_real_escape_string Funktion braucht schon eine Datenbankverbindung; den Fehler dazu bekommst du aber nicht angezeigt.

    Also ausgebessert:
    <html>
    </head>
    	<title>Mein Bereich - Registrieren</title>
    </head>
    <body style="background:#52B20E">
    <?php
    if(!isset($_GET["page"])) {
    ?>
    <table>
    		<tr>
    			<td width="100" height="100" style="background:url(vokfreak2.jpg) no-repeat;"></td>
    			<td width="500" height="100" style="background:url(newheader.jpg) no-repeat;"></td>
    			<td width="300" height="100" style="background:url(text.jpg) no-repeat;"></td>
    		</tr>
    </table>
    <br />
    <table>
    	<form action="register.php?page=2" method="post">
    		<tr>
    			<td><font size="5" face="comic sans ms"><b>Registrieren</b></font></td>
    		</tr>
    		<tr>
    			<td>Vorname:</td><td><input style="width:200px;" type="text" name="vor" /></td>
    		</tr>
    		<tr>
    			<td>Nachname:</td><td><input style="width:200px;" type="text" name="nach" /></td>
    		</tr>
    		<tr>
    			<td>E-mail adresse:</td><td><input style="width:200px;" type="text" name="email"></td>
    		</tr>
    		<tr>
    			<td>Geburtsdatum:</td><td><input maxlength="2" style="width:50px;" value="TT" type="text" name="tag" />.<input maxlength="2" style="width:50px;" value="MM" type="text" name="monat" />.<input maxlength="4" style="width:50px;" value="JJJJ" type="text" name="jahr" /></td>
    		</tr>
    		<tr>
    			<td>Username:</td><td><input style="width:200px;" type="text" name="user" /></td>
    		</tr>
    		<tr>
    			<td>Gew&uuml;nschtes Passwort:</td><td><input style="width:200px;" type="password" name="pw" /></td>
    		</tr>
    		<tr>
    			<td>Passwort wiedeholen:</td><td><input style="width:200px;" type="password" name="pw2" /></td>
    		</tr>
    		<tr>
    			<td><input type="submit" value="Senden" /></td>
    		</tr>
    	</form>
    </table>
    <?php
    }
    ?>
    <?php
    if(isset($_GET["page"])) {
    	if($_GET["page"] == "2") {
    		$verbindung = mysql_connect("mysql.lima-city.de", "<dein Benutzer>", "<dein Passwort>")
    		or die ("Fehler im System");
    
    		mysql_select_db("db_258331_1")
    		or die ("Verbidung zur Datenbank war nicht möglich...");
    
    		$user = mysql_real_escape_string(strtolower($_POST["user"]));
    		$pw = md5($_POST["pw"]);
    		$pw2 = md5($_POST["pw2"]);
    		$vorname = mysql_real_escape_string(strtolower($_POST["vor"]));
    		$nachname = mysql_real_escape_string(strtolower($_POST["nach"]));
    		$mail = mysql_real_escape_string(strtolower($_POST["email"]));
    		$date = mysql_real_escape_string($_POST["jahr"] . "_" . $_POST["monat"] . "_" . $_POST["tag"]);
    		if($user=="" or $pw=="" or $vorname=="" or $nachname=="" or $mail=="" or $date=="JJJJ_MM_TT") {
    		echo "Alle Felder m&uuml;ssen ausgef&uuml;llt werden.";
    		} else {
    		if($pw != $pw2) {
    			echo "Deine Passwörter stimmen nicht überein. Bitte wiederhole deine Eingabe....<a href=\"register.php\">zurück</a>";
    		} else {
    				$count = 0;		
    				$abfrage = "SELECT COUNT(username) FROM benutzer WHERE username = '$user'";
    				$ergebnis = mysql_query($abfrage);
    				$count = mysql_result($ergebnis, 0);
    				if($count == 1) {
    					echo "Username schon vergeben. Bitte verwende einen anderen Usernamen....<br /><a href=\"register.php\">zurück</a>";
    				} else {
    				$eintrag = "INSERT INTO benutzer
    				(username, vorname, nachname, date, passwort, mail)
    				VALUES
    				('$user', '$vorname', '$nachname', '$date', '$pw', '$mail')";
    				
    				$eintragen = mysql_query($eintrag);
    				
    				if($eintragen == true) {
    					echo "Vielen Dank. Du hast dich nun registriert.<a href=\"index.php\">Jetzt anmelden</a>";
    				} else {
    					echo "Fehler im System. Bitte versuche es später noch einmal...";
    				}
    				mysql_close($verbindung);
    				}
    		}
    		}
    		}
    		}
    ?>
    </body>
    </html>
    Die Datenbankverbindung wird jetzt vor der Nutzung von mysql_real_escape_string() geöffnet, deshalb sollte es jetzt so funktionieren.
  18. 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!