Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo alle zusamm ich hab folgendes problem.

Ich habe mit einer gruppe ein forum in den letzten tagen aufgebaut.

jetzt fehlt es nur noch an kleinigkeiten.

das is die sache das wenn man sich registriert noch doppelte datesätze entstehen können kann mir bitte wer helfen das

ich das problem auf die reihe bekomme

danke.

Geschrieben
Hallo alle zusamm ich hab folgendes problem.

Ich habe mit einer gruppe ein forum in den letzten tagen aufgebaut.

jetzt fehlt es nur noch an kleinigkeiten.

das is die sache das wenn man sich registriert noch doppelte datesätze entstehen können kann mir bitte wer helfen das

ich das problem auf die reihe bekomme

danke.

Hm, verstehe jetzt nicht genau, wo das Problem liegt. Registrierung mit 'nem Nicknamen? Dann einfach die entsprechende Spalte auf "UNIQUE" setzen ...

Oder versteh' ich da jetzt was falsch? Konkretisier' doch mal bitte dein Problem.

Geschrieben

ja ich hab das script und dann kann man sich mit nick und pw anmelden unr das prob is es geht noch das nicks doppel vorkommen können wie kann ich das abfangen

Geschrieben

wenn ich das wüsste dann würde ich das beheben.!

<?php


	include "inc/mysqlconfig.php";


	if(isset($_POST['benutzer']) AND isset($_POST['pass']) AND isset($_POST['passB'])) {

		$benutzer = $_POST['benutzer'];

		$pass = $_POST['pass'];

		$passB = $_POST['passB'];


		if(empty($benutzer) OR empty($pass) OR empty($passB)) {

			header("location:registrierung.php?status=empty");

		}

		else {

			$userid = mysql_query("select * from user where uname='".$benutzer."'");

				// Überprüfen ob Benutzername Existiert 

				if($userid) {

					header("Location: registrierung.php?status=userdoppelt");

				}


		 	if($pass == $passB)

			{

				mysql_query("INSERT IGNORE INTO user set uname='$benutzer', upassword='$pass'");

				header("location: login.php");

			}

			else

			{

				header("location:registrierung.php?status=passwort");	

			}

		}

	}

	else 

	{

		header("location:registrierung.php");

	}



?>

Geschrieben

Die Antwort hab' ich eigentlich bereits gegeben, wie man Redundanz bei den Nicknames vermeiden kann.

[...] Registrierung mit 'nem Nicknamen? Dann einfach die entsprechende Spalte auf "UNIQUE" setzen [...]
Geschrieben
auf gut deutsch direkt in der mysql tabelle 'benutzer'

diese auf unique stellen oder verstehe ich das falsch?

Ich weiß nicht, wie deine Datenbank aufgebaut ist. Wenn die Tabelle 'BENUTZER' alle benutzerbezogenen Daten wie bspw. Nickname, Geburtsdatum oder Registrierungsdatum enthält, dann setzt du die entsprechende Spalte, für die du redundante Daten vermeiden willst (in deinem Fall wäre das 'NICKNAME' oder etwas Ähnliches) auf 'UNIQUE'.

Mal nebenbei, wenn du schon bei so einem Problem nicht weiter weißt, will ich nicht wissen, wie die restliche Datenbank aufgebaut ist. ;)

Geschrieben

ich denke ich hab nur iwie nen brett vorm kopf ich hab heute schon 5 stunden da dran gearbeitet.

ich versuche das mal.

Vielleicht war das auch einfach nur ein total doofer fehler oder so trotzdem danke.

  • 2 Wochen später...
Geschrieben

<?php


	include "inc/mysqlconfig.php";


	if(isset($_POST['benutzer']) AND isset($_POST['pass']) AND isset($_POST['passB'])) {

		$benutzer = $_POST['benutzer'];

		$pass = $_POST['pass'];

		$passB = $_POST['passB'];


		if(empty($benutzer) OR empty($pass) OR empty($passB)) {

			header("location:registrierung.php?status=empty");

		}

		else {

			$userid = mysql_query("select * from user where uname='".$benutzer."'");

				// Überprüfen ob Benutzername Existiert 

				if($userid) {

					header("Location: registrierung.php?status=userdoppelt");

				}


		 	if($pass == $passB)

			{

				mysql_query("INSERT IGNORE INTO user set uname='$benutzer', upassword='$pass'");

				header("location: login.php");

			}

			else

			{

				header("location:registrierung.php?status=passwort");	

			}

		}

	}

	else 

	{

		header("location:registrierung.php");

	}



?>

Das Problem, warum das mit der überprüfung im Code ansich nicht funktioniert sind 2 sachen:

1.

$userid = mysql_query("select * from user where uname='".$benutzer."'");

Vor dieser Zeile wurde keine Datenbankverbindung geöffnet, damit hat $userid false als Inhalt, weil

2. $userid ein Resultat einer abfrage ist, und NICHT die Daten, die du gerne hättest beinhaltet.

Lösung:

1. Datenbankverbindung vor dem query öffnen

2. vielleicht mit mysql_num_rows() die anzahl der gefundenen Zeilen zurückgeben lassen (0 währe dann der Flag, der aussagt, dass der Benutzer nicht doppelt ist.)

Geschrieben

RTFM. vielleicht liest du einfach mal bei "mysql_query" nach, was es liefert.

du machst ein SELECT * - und dann? holst du dir, wenn du 20 million user hättest, für *jeden* login *alle* user?

ausserdem ist dein script schlecht konzeptioniert; sieh dir die entsprechenden funktion guter software an.

s'Amstel

Geschrieben
RTFM. vielleicht liest du einfach mal bei "mysql_query" nach, was es liefert.

du machst ein SELECT * - und dann? holst du dir, wenn du 20 million user hättest, für *jeden* login *alle* user?

ausserdem ist dein script schlecht konzeptioniert; sieh dir die entsprechenden funktion guter software an.

s'Amstel

ich verbessere Dich ja nur ungern... aber das * Sagt nur aus, dass du alle Spalten der Tabelle angezeigt haben möchtest...

Er hat ja schon eine WHERE-Bedingung drin, die bei sauberen Daten ja nur einen Datensatz finden dürfte, wobei diese dann natürlich in den 50000000000 Milliarden von Daten gesucht werden würde...

Wollte mit dem was ich geschrieben hatte nur verdeutlichen, WARUM sein script nicht funktioniert ;)

Mit dem Unique ist auf jeden Fall die bessere Lösung, da man dann nur noch nachsehen muss, ob ein Fehler aufgetreten ist. Trotzdem muss die Datenbank für sich intern nachsehen, ob das kriterium erfüllt ist.

Geschrieben

danke für die antworten

hab das problem gefunden war in der datenbank selber

war son blöder fehler den man garnet so schnell sieht

trotzdem danke für die antworten

Geschrieben
ich verbessere Dich ja nur ungern... aber das * Sagt nur aus, dass du alle Spalten der Tabelle angezeigt haben möchtest...

Er hat ja schon eine WHERE-Bedingung drin, die bei sauberen Daten ja nur einen Datensatz finden dürfte, wobei diese dann natürlich in den 50000000000 Milliarden von Daten gesucht werden würde...

verzeih, ich hab mich auch etwas missverständlich ausgedrückt; mir ist klar, dass SELECT * mit WHERE-bedingung nicht *alle* DS holt, sondern nur *alle* spalten (was im regelfall auch nicht notwendig ist) der DS, welche den kriterien entsprechen.

dass das ganze dennoch bei theoretisch (!) vielen usern unperformant werden *kann*, ist klar, kann aber im zweifelsfalls mittels eines ausführungsplans eruiert werden.

s'Amstel

Geschrieben
verzeih, ich hab mich auch etwas missverständlich ausgedrückt; mir ist klar, dass SELECT * mit WHERE-bedingung nicht *alle* DS holt, sondern nur *alle* spalten (was im regelfall auch nicht notwendig ist) der DS, welche den kriterien entsprechen.

dass das ganze dennoch bei theoretisch (!) vielen usern unperformant werden *kann*, ist klar, kann aber im zweifelsfalls mittels eines ausführungsplans eruiert werden.

s'Amstel

Naja... ich glaube nicht, dass es bei vielen Benutzern wirklich performace Einbußen gibt, da das ja eigentlich nur bei der Registrierung, und nicht bei dem aufrechterhalten einer Session oder beim anmelden gebraucht wird.

Lasse mich da aber gerne berichtigen, denn man lernt ja nie aus ;)

Geschrieben
danke für die antworten

hab das problem gefunden war in der datenbank selber

war son blöder fehler den man garnet so schnell sieht

trotzdem danke für die antworten

Hoffe, du liest das noch... :D

Mach dich mal über SQL Injection schlau ;)

Oder gib mir die Adresse des Forums und ich droppe dir alle Tables :D:D:D

Geschrieben

sql injektion werd ich mir nochmal durchlesen danke,

aber das forum haben inerhalb 1ner woche als projekt aufgebaut und hatten nicht gerade viel Zeit um uns um jede kleinigkeit zu kümmern da erstmal alles laufen musste.

Bevor wir es Online stellen werden wir das alles nochmal machen aber danke für den hinweis

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...