Username auf Verfügbarkeit prüfen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anmelden
benutzer
code
date
eintrag
eintragen
ergebnis
fehler
feld
monat
nachname
page
registrieren
system
url
verbindung
vergeben
versuchen
vorname
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo vokabelfreak,
ich würde es wie folgt machen:
Wenn '0' zurückkommt, dann ist er noch nicht vergeben, bei '1' ist er weg.SELECT COUNT(id) FROM users WHERE username LIKE '<neuer Name>'
-
Vielen dank jetzt muss ichs noch kapieren.
-
darkpandemic schrieb:
Warum
ich würde es wie folgt machen:
Wenn '0' zurückkommt, dann ist er noch nicht vergeben, bei '1' ist er weg.SELECT COUNT(id) FROM users WHERE username LIKE '<neuer Name>'
?LIKE
Warum nicht einfach so:SELECT COUNT(id) FROM users WHERE username = '<neuer Name>'
-
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:
Und man führt die Abfrageartikel | preis ---------------+---------- Stift | 0.50 Radiergummi | 0.75 Block | 1.20 Klebeband | 1.50 Hefter | 2.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 preis < 1.00
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.SELECT COUNT(artikel) FROM preise WHERE artikel LIKE 's%'
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 -
darkpandemic schrieb:
Könnte es sein, dass das mit dem Zeichensatz zusammenhängt?
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'.
Normalerweise kann man sich ja zwischen
und*_cs
aussuchen. Bei*_ci
sollte es Case-sensitiv und bei_cs
sollte es eben Case-insensitiv sein._ci
Was auch noch als Info zu erwähnen ist:
Mit demSELECT COUNT(artikel) AS count FROM preise WHERE preis < 1.00
könntest du das COUNT(artikel)-Feld noch benennen.AS
-
Also der nickname aus dem formular heist $user und die tabellenspalte 'username'
-
vokabelfreak schrieb:
Und was hilft uns das jetzt? Wozu sollten wir das wissen?
Also der nickname aus dem formular heist $user und die tabellenspalte 'username'
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');
-
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 -
vokabelfreak schrieb:
Ganz einfach warum das nicht funktioniert... das Problem liegt hier:
Es funktioniert noch nicht.$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:
Danach hast du in$user = mysql_real_escape_string($user); $sql = "SELECT COUNT(id) FROM users WHERE username = '$user'"; $result = mysql_query($sql); $count = mysql_result($result, 0);
die Anzahl wie oft es den Benutzer schon gibt.$count
-
Nur den Code verwenden oder zusätzlich zu meinen?
-
vokabelfreak schrieb:
Statt dem Code:
Nur den Code verwenden oder zusätzlich zu meinen?
Du könntest das $control bei dir zu $count umbenennen... das würde mehr Sinn machen ;)$abfrage = "SELECT count(username) FROM benutzer WHERE username LIKE '$user'"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $control++; }
Falls du vorher schon deine Eingaben gefiltert hast musst du das mysql_real_escape_string entfernen... -
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ü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üssen ausgefü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 -
vokabelfreak schrieb:
Also wie es aussehen könnte:
Es funktioiert noch nicht. Ich schreib jetzt mal den ganzen Quellcode rein:
Die SQL-Injection-Verwundbarkeit habe ich dir auch behoben.<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ü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üssen ausgefü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>
Du musst deine MySQL-Zugangsdaten im Script einfügen...
Beitrag zuletzt geändert: 5.4.2012 12:49:44 von hackyourlife -
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 -
vokabelfreak schrieb:
Ach ja klar, die mysql_real_escape_string Funktion braucht schon eine Datenbankverbindung; den Fehler dazu bekommst du aber nicht angezeigt.
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;
Also ausgebessert:
Die Datenbankverbindung wird jetzt vor der Nutzung von mysql_real_escape_string() geöffnet, deshalb sollte es jetzt so funktionieren.<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ü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üssen ausgefü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>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage