SQL Count() | Checken, ob username bereits vorhanden

Hallo.

Ich programmiere gerade an einem Registrierungsformular.
Dabei möchte ich überprüfen, ob ein Benutzername oder eine E-mail schon vorhanden ist.
Mein Code dafür:

// mail checken $sqlmailcheck = "COUNT(*) FROM user WHERE e-mail='$mail'"; $sqlmailcheckquery = mysql_query($sqlusercheck); $mailcheck2 = mysql_fetch_row($sqmailcheckquery); if ($mail != $mailcheck || strlen($mail) > 100 || strlen($mail) < 8 || $mailcheck2 == 1){ $inputerror[3] = "Ihre Email-Adresse entspricht nicht dem gewünschten Format, oder wird schon verwendet !<br />(8-100 Zeichen, 'a-z', 'A-z', '_', '-', '.', '0-9', '@')"; } else $inputerror[3] = "";

Funktioniert so aber nicht. Wie muss ich die Datenbankabfrage machen?
Tabellenname: user.
Spaltenname: user, e-mail

Vielen Dank schonmal im voraus. :wink2:

probier mal
$sqlmailcheck = “SELECT COUNT(user) FROM user WHERE e-mail=”.$mail;

vilen dank schonmal, das mache ich. aber anscheineend hat das script auch ein problem mit mysql_fetch_row():

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in D:\Programme\xampp\htdocs\timemanager\login.php on line 134

Habe den Code jetzt um einiges abgeändert.

Folgendes Funktioniert nicht:

das ist die stelle, mit der e-mail überprüfung.
ausserdem erkennt das script vergebene usernamen nicht :frowning:

[code]//username checken
if (strlen($username) >= 3){
$sqlusercheck = “SELECT COUNT(*) FROM user WHERE user=’”.$username."’";
$sqlusercheckquery = mysql_query($sqlusercheck);
$usercheck2 = mysql_fetch_row($sqlusercheckquery);
if (strlen($username) > 35){
if ($usercheck2[0] != 0){
$inputerror[2] = “Username schon vergeben. Sorry!”;
}
else{
$inputerror[2] = “Ihr Username ist länger als 35 Zeichen !”;
}
}
else{
$username = htmlspecialchars($username);
$inputerror[2] = “”;
}
}
else
$inputerror[2] = “Ihr Username ist zu kurz! (Mindestens 3 Zeichen)”;

// mail checken
if (strlen($mail) >= 8){
$sqlmailcheck = “SELECT COUNT(*) FROM user WHERE e-mail=’”.$mail."’";
$sqlmailcheckquery = mysql_query($sqlmailcheck);
$mailcheck2 = mysql_fetch_row($sqlmailcheckquery);
if ($mail != $mailcheck || strlen($mail) > 100 || strlen($mail) < 8 ||
!ereg("^(([a-zA-Z0-9]|[.-])+)@(([a-zA-Z0-9]|[.-])+).([a-z0-9]{2,4})$", $mail) || $mailcheck2[0] != 0){
// habe auch schon $,ailcheck2[0] != “0” probiert!
$inputerror[3] = “Ihre Email-Adresse entspricht nicht dem gewünschten Format, oder wird schon verwendet !
(8-100 Zeichen, ‘a-z’, ‘A-z’, ‘_’, ‘-’, ‘.’, ‘0-9’, ‘@’)”;
}
else
$inputerror[3] = “”;
}
else
$inputerror[3] = “Ihre Email-Adresse ist zu kurz! (Mindesten 8 Zeichen)”;
[/code]

//username checken
if (isset($username) && strlen($username) >= 3){
$sqlusercheck = „SELECT COUNT(*) FROM user WHERE user=’“.$username."’";
$sqlusercheckquery = mysql_query($sqlusercheck);
$usercheck2 = mysql_fetch_row($sqlusercheckquery);
if (strlen($username) > 35){
if ($usercheck2[0] != 0){
$inputerror[2] = „Username schon vergeben. Sorry!“;
}
else{
$inputerror[2] = „Ihr Username ist länger als 35 Zeichen !“;
}
}
else{
$username = htmlspecialchars($username);
$inputerror[2] = „“;
}
}
else
$inputerror[2] = „Ihr Username ist zu kurz! (Mindestens 3 Zeichen)“;

// mail checken
if (strlen($mail) >= 8){
$sqlmailcheck = „SELECT COUNT(*) FROM user WHERE e-mail=’“.$mail."’";
$sqlmailcheckquery = mysql_query($sqlmailcheck);
$mailcheck2 = mysql_fetch_row($sqlmailcheckquery);
if ($mail != $mailcheck || strlen($mail) > 100 || strlen($mail) < 8 ||
!ereg("^(([a-zA-Z0-9]|[.-])+)@(([a-zA-Z0-9]|[.-])+).([a-z0-9]{2,4})$", $mail) || $mailcheck2[0] != 0){
// habe auch schon $,ailcheck2[0] != „0“ probiert!
$inputerror[3] = „Ihre Email-Adresse entspricht nicht dem gewünschten Format, oder wird schon verwendet !
(8-100 Zeichen, ‚a-z‘, ‚A-z‘, ‚_‘, ‚-‘, ‚.‘, ‚0-9‘, ‚@‘)“;
}
else
$inputerror[3] = „“;
}
else
$inputerror[3] = „Ihre Email-Adresse ist zu kurz! (Mindesten 8 Zeichen)“;

das kann nicht gehen weil der mysql_query hier mehr als einen wert zurück gibt deswegen musst du mit mysql_fetch_array() oder mysql_fetch_assoc() arbeiten

ich habe mit einer menge bastelei das problem jetzt gelöst.

  1. Schritt:

Über SQL-Abfragen im PHPMyAdmin habe ich den Fehler in der SQL-Abfrage gesucht.
Die Abfrage war:

und hätte sein müssen:

Dann war der Error bei mysql_fetch_row() weg, es lag an dem Bindestrich in e-mail=’…’ .

Als nächstes habe ich mir eine Datei erstellt, mitr der ich auf die Suche nach der Auslesbarkeit der Abfrage gegangen bin:

<?php echo "<html><body>"; include "mysql_connect.inc.php"; $sql = "SELECT COUNT(*) FROM `user` WHERE `e-mail`='<mail>'"; if (!$query = mysql_query($sql)) echo mysql_error(); $dsatz = mysql_fetch_assoc($query); print_r($dsatz); echo "<br>....".$dsatz[COUNT(*)]; // den Arraykey in der vorherigen Zeile hab ich immer wieder geändert... echo "</body></html>"; ?>
Durch das Sternchen in $dsatz[COUNT(*)] Funktioniete es so aber auch nicht.

Die Lösung brachte dann:

$sql = "SELECT COUNT(*) AS `number` FROM `user` WHERE `e-mail`='<mail>'";
/// restlicher code
echo "<br>......".$dsatz[number];

vielen dank trotzdem für die Hilfe.

Das sollte alles in einem Query geht…bin da aber kein Fachmann :wink:

ja, klar gehts noch besser.
die effektivität kommt später. :ps: