Zum Inhalt springen

Doppelte Datensäte


smarti

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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");

	}



?>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

<?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.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...