Username vergleich mit Datenbank

Reen86

Grünschnabel
Nach stöbern hatte ich was gefunden kam aber nicht wirklich damit zurecht.
mein Problem sieht wie folgt aus, ich lerne php seid nun ca 2 monaten also bin ich noch sehr .
Ich hab ein Registrierungsmenu geschrieben wo sich ein Benutzer anmeldet und ein autom. generiertes PW zugeschickt bekommt. Die Daten werden gleich in die Datenbank reingeschrieben. Ich will natürlich dass jede Email oder jeder username nur einmal vorhanden ist, aber ich bekomme den vergleich nicht hin. Daten aus der datenbank hole ich üblicherweise mit:
PHP:
$sql = "SELECT * FROM $tabUser ";
$query = mysql_query($sql);
// Überprüfung der Eingabe
if(!$query)
echo "<br>SQL-Anweisung fehlgeschlagen";
// Schleife der Ausgabe
?>

<?php
while ($zeile = mysql_fetch_array($query))
{
?>
die variable die übergeben wird ist:
PHP:
$username 	= 	$_POST["username"];

Das ganze script sieht so aus bitte nicht lachen ich machs ja noch net lang:
PHP:
<?php

// öffnen der DB_open.php

include("DB_open.php");
include_once("funktionen.php");

// Variablen die übergeben wurden definieren

$username 	= 	$_POST["username"];			// Benutzername = Nickname
$email 		= 	$_POST["email"];                        // Email Adresse
$register_date 	= 	$_POST["datum"];                	// Registrierungsdatum
$register_time 	= 	$_POST["register_time"];                // Registrierungsuhrzeit
$register_day 	= 	$_POST["register_day"];                 // Registrierungstag

//Passwort Generieren
$conso=array("b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","x","y","z"); 	// Konsonanten
$vocal=array("a","e","i","o","u");								// Vokale
$count=array("1","2","3","4","5","6","7","8","9");						// Zahlen
$password="";
srand ((double)microtime()*1000000);
for($f=1; $f<=3; $f++) {										// Schleife für das Passwort
$password.=$conso[rand(0,19)];
$password.=$vocal[rand(0,4)];
$password.=$count[rand(0,8)];
}
// Zum server connecten

$verbindung = @mysql_connect($db_server, $db_user, $db_password) or die ("Zugriff auf $db_server nicht möglich...");

// Die Datenbank auswählen
mysql_select_db($name_datenbank, $verbindung) or die ("Fehler beim Zugriff auf $name_datenbank...");

	$eingabenOK = checkGueltigesDatum($datum);		// Datumscheck
	if($eingabenOK == true)                                 // Wenn Datumsformatierung richtig
	{
	$register_date = datum_normal2db($register_date);			// Datumsformatierung

// Daten in die Datenbank schreiben
		$result = mysql_query("INSERT INTO $tabUser (username, email, password, register_date, register_time, register_day)
		VALUES ('$username', '$email', '$password', '$register_date', '$register_time', '$register_day')");
         	$var = mysql_insert_id();

//E-Mail versand
$ppo		=	"blabla";
$admin 		= 	$email;
$user 		= 	"$username";
$subject 	= 	"Onlineregistrierung";
$message 	= 	"Nachricht fuer $user von $ppo\n\n"
.$message	=	"Die Onlineregistrierung war erfolgreich, du kannst dich mit folgenden Daten einloggen auf www.blabla.de.\n\n"
.$message	=	"Vielen Dank\n"
.$message	=	"blablub\n\n"
.$message	=	"Dein Benutzername : $username\n"
.$message	=	"Dein Passwort : $password\n";

mail($admin,$subject,$message,"From: $ppo");

// Ausgabe bei Erfolg
                 $erfolg = true;
            		header("location: ../user_register.php?message=$erfolg");	// Weiterleitung
         }
         else {
	$erfolg = false;
         }

?>
Bitte um rat
 
Zuletzt bearbeitet:
Es funktioniert ja, aber ich weiss nicht wie ich ne sicherheitsabfrage mache wo PHP vergleicht ob ein benutzername schon vorhanden ist bzw eine email adresse, diese sicherheitsabfrage bekomme ich nicht hin.

Er muss also den eingegeben Benutzernamen oder Emailadresse mit den Sachen inder Datenbank vergleichen.

Ich hatte schon die ganze zeit gegoogelt aber nichts gefunden was mir hilft
 
Zuletzt bearbeitet:
Also, ich geb dir mal ein paar tipps, bin zu müde jetzt noch den ganzen code umzuschreiben und rein zu schreiben.
Na dann:
Schreib mal eine Funktion zum E-Mail-Adressen chechen, gibts viele, brauchst also nichmal selbst programmieren. Dann ist deine frage, wie kannst du probieren ob der username schon existiert?
PHP:
<?php
$sql = "SELECT COUNT(username) AS Anzahl_U, COUNT(email) AS Anzahl_E FROM ".$tabuser." WHERE username = ".$_POST['username'];
$result = mysql_fetch_array($sql, MYSQL_ASSOC);
if(($result['Anzahl_U'] == 0) AND ($result['Anzahl_E'] == 0)) echo "Username und Email gibts noch nicht"; 
elseif(($result['Anzahl_U'] == 0) OR ($result['Anzahl_E'] >= 1)) echo "Username gibts noch nicht, denk dir einen anderen aus ;-)"; 
elseif(($result['Anzahl_U'] >= 1) AND ($result['Anzahl_E'] == 0)) echo "Email gibts noch nicht, such dir eine andere ;-)"; 
else echo "Usernamen und Email gibts leider schon, such dir bitte einen neuen";
?>
Hf damit.
Ich such dann mal weiter nach uml tuts, blöde schule, it wird immer schwerer -.-

Ps: Sorry, erst jetzt gelesen wegen email addy, dass das noch dazu kommt.
 
Zuletzt bearbeitet:
ach lol der Ansatz ist ja total simpel,

vielen dank

Ich habe das jetzt so gelöst:
PHP:
<?php
$sql = "SELECT * FROM $tabUser WHERE username = '$username'";
$query = mysql_query($sql);
if(!$query) echo "Username gibts noch nicht";
else echo "Usernamen gibts leider schon, such dir bitte einen neuen";
?>

Ist das ok so oder nicht wirklich gut?
 
Ist ok, aber nich wirklich gut, man sollte das auswählen, was mana uch benötigt, auf Fehler oder boolesche Werte zu plädieren ist selten gut. Mit Count könntest du durch den kleinen nebeneffekt auch noch die anzahl der email adressen etc rausfinden. Außerdem überprüfst du nich die email addy. Also deine lösung funktioniert, dass ist die hauptsache. Nur mit email überprüfung:
PHP:
$sql = "SELECT ID FROM $tabUser WHERE username = ".$_POST['username']." OR email = ".$_POST['email'];
 
Also Irgendwie funktioniert das nicht er verschickt trotzdem Emails und trägt die Sachen in die Datenbank ein egal was ich reinschreibe die Sicherheitsabfrage funktioniert nicht.

PHP:
<?php

// öffnen der DB_open.php

include("DB_open.php");
include_once("funktionen.php");

// Variablen die übergeben wurden definieren

$username 	= 	$_POST["username"];			// Benutzername = Nickname
$email 		= 	$_POST["email"];                        // Email Adresse
$register_date 	= 	$_POST["datum"];                	// Registrierungsdatum
$register_time 	= 	$_POST["register_time"];                // Registrierungsuhrzeit
$register_day 	= 	$_POST["register_day"];                 // Registrierungstag

//Passwort Generieren
$conso=array("b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","x","y","z"); 	// Konsonanten
$vocal=array("a","e","i","o","u");								// Vokale
$count=array("1","2","3","4","5","6","7","8","9");						// Zahlen
$password="";
srand ((double)microtime()*1000000);
for($f=1; $f<=3; $f++) {										// Schleife für das Passwort
$password.=$conso[rand(0,19)];
$password.=$vocal[rand(0,4)];
$password.=$count[rand(0,8)];
}
// Zum server connecten

$verbindung = @mysql_connect($db_server, $db_user, $db_password) or die ("Zugriff auf $db_server nicht möglich...");

// Die Datenbank auswählen
mysql_select_db($name_datenbank, $verbindung) or die ("Fehler beim Zugriff auf $name_datenbank...");

//eingaben Überprüfen
$sql = "SELECT * FROM $tabUser WHERE username = ".$_POST['username']." OR email = ".$_POST['email'];
$query = mysql_query($sql);
if(!$query)
	{


				$eingabenOK = checkGueltigesDatum($datum);		// Datumscheck
				if($eingabenOK == true)                                 // Wenn Datumsformatierung richtig
				{
				$register_date = datum_normal2db($register_date);			// Datumsformatierung

// Daten in die Datenbank schreiben
					$result = mysql_query("INSERT INTO $tabUser (username, email, password, register_date, register_time, register_day)
					VALUES ('$username', '$email', '$password', '$register_date', '$register_time', '$register_day')");
         				$var = mysql_insert_id();

//E-Mail versand
$ppo		=	"blub;
$admin 		= 	$email;
$user 		= 	"$username";
$subject 	= 	"Onlineregistrierung";
$message 	= 	"Nachricht fuer $user von $blub\n\n"
.$message	=	"Die Onlineregistrierung war erfolgreich, du kannst dich mit folgenden Daten einloggen auf blub.\n\n"
.$message	=	"Vielen Dank\n"
.$message	=	"Dein blub\n\n"
.$message	=	"Dein Benutzername : $username\n"
.$message	=	"Dein Passwort : $password\n";

mail($admin,$subject,$message,"From: $ppo");

// Ausgabe bei Erfolg
                 			$erfolg = true;
         			}
               			else { $erfolg = false; }

	}
	else { $erfolg = username_exists; }

header("location: ../user_register.php?message=$erfolg");	// Weiterleitung
?>
 
Du musst die Anzahl der ausgewählten Datensätze prüfen (siehe mysql_num_rows()-Funktion) und nicht nur den Erfolg der Abfrage. Außerdem hat das Skript noch ein Syntaxfehler. Die Syntaxhervorhebung dieses Forums sollte dir bei der Fehlersuche helfen.
 
Ja gut die Anzahl kann ich mir ja ausgeben lassen das sind momentant nur 2 Stück, aber was bringt das dann?
PHP:
$anz = mysql_num_rows($query);
das Problem ist ich wills ja net einfach abschreiben, ich versteh gerade die Logig nicht dahinter wie man vorgeht um eine variable mit dem inhalt eines feldes der Datenbank abzugleichen
 
Die Logik hinter Flex’ und meinem Ansatz ist, dass statt alle Datensätze auszuwählen und diese mit PHP nach Übereinstimmungen zu prüfen, es wesentlich einfacher und effektiver ist, nur die Anzahl der Datensätze mit Übereinstimmungen zu verarbeiten. Der Vorteil ist, dass MySQL dies wesentlich schneller kann als PHP – denn Datenbanken sind für so etwas optimiert.
 

Neue Beiträge

Zurück