Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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

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

	}



?>

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

auf gut deutsch direkt in der mysql tabelle 'benutzer'

diese auf unique stellen oder verstehe ich das falsch?

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

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

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

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

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.

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

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

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

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

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

ist alles nicht schlimm ich lern den kram ja alles noch ich nehm das alles als konstrucktive kritik danke

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.