• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Registrierungsscript: Problem mit MySQL-abfrage

Barzul

Mitglied
Registrierungsscript(jetzt: Loginscript): Problem mit MySQL

Hi,

Ich bin gerade dabei ein registrierungsscript zu schreiben, und hänge an einem Problem:

Ich möchte erreichen, dass soich kein user mit der gleichen e-mail oder den gleichen namen registrieren kann, aber man kann sich immer noch zweimal mit dem namen Barzul Registrieren.

Hier mal der Quelltext:

PHP:
<?php

mysql_connect("localhost","shinobi-no-kage","**Passwort**");
mysql_select_db("shinobi-no-kage");
$abfrage_name = "SELECT * FROM snk_user WHERE name LIKE ".$_POST['name']."";
$abfrage_email = "SELECT * FROM snk_user WHERE name LIKE ".$_POST['email']."";
$ergebnis_name = mysql_query($abfrage_name);
$ergebnis_email = mysql_query($abfrage_email);
$name = $_POST["name"];
$pw = $_POST["pw"];
$pw2 = $_POST["pw2"];
$email = $_POST["email"];

if ($pw != $pw2 OR $ergebnis_name == $name OR $ergebnis_email == $email)
{
echo "Die beiden angegebenen Passwörter stimmen nicht überein, der NAme ist bereits vergeben,
 oder die Email wird bereits benutzt!";
}
else
{
$eintrag = "INSERT INTO snk_user(name, pw, email) VALUES ('$name', '$pw', '$email')";
$eintragen = mysql_query($eintrag);
echo 'Sie wurden erfolgreich registriert! <a href="index.php">weiter</a>';
}
?>
 
Zuletzt bearbeitet:
Werbung:
aber?
du musst nicht einmal LIKE nehmen, eine direktabfrage geht auch:

PHP:
<?php
$sql[1] = "SELECT * FROM snk_user WHERE name = '".$_POST['name']."' ";
$sql[2] = "SELECT * FROM snk_user WHERE email = '".$_POST['email']."' ";
/* 
invertierte kommata vergessen, da es kein ausdruck sondern ein suchwert ist. 
außerdem sollte das feld doch eher "email" als "name" heißen, wenn du 
die mail checken willst.
*/
?>

OR mit || ersetzen, das wird schneller verarbeitet und die $_POST-arrays nicht nochmal als variablen abspeichern, das verlangsamt erst wieder:

PHP:
<?php
//braucht man alles nicht
$name = $_POST["name"];
$pw = $_POST["pw"];
$pw2 = $_POST["pw2"];
$email = $_POST["email"];

//besser:
if ($_POST["pw"] != $_POST["pw2"] OR $ergebnis_name == $name OR $ergebnis_email == $email)
?>

Nils aka XraYSoLo
 
okay, danke Xraysolo, ich werds mal ausprobieren ;)

zu dem Aber: Es funktioniert(e) halt nicht^^

//EDIT:Es ist ein großes problem -.-* wenn man daen gleiche namen oder email eingibt, steht im DB-eintrag bei name und email gar nichts. Und nachdem mand as formular abgeschickt hat, wird man trptzdem noch weitergeleitet Oo
 
Zuletzt bearbeitet:
Werbung:
wenn du LIKE nimmst, muss der ausdruck %e enthalten: LIKE %suchwert%. ist aber von abzuraten, da du ja nach einem bekannten wert und nicht nach einem bruchstück suchst.

Nils aka XraYSoLo
 
LIKE habe ich jetzt auch rausgenommen gehabt, dann giung es immer noch nciht. Jetzt habe ich das script nochmal geändert udn es müsste eigentlich gehen nur das Problem ist, Die meldung wird angezeigt, dass man sich registriert hat und in der DB steht ein eintrag mit "" bei name und email.

Mein Quellcode sieht jetzt so aus:

PHP:
<?php

mysql_connect("localhost","shinobi-no-kage","**");
mysql_select_db("shinobi-no-kage");
$abfrage_name = "SELECT * FROM snk_user WHERE name = '".$_POST['name']."' ";
$abfrage_email = "SELECT * FROM snk_user WHERE email = '".$_POST['email']."' ";
$ergebnis_name = mysql_query($abfrage_name);
$ergebnis_email = mysql_query($abfrage_email);


if ($_POST["pw"] != $_POST["pw2"] OR $ergebnis_name == $_POST['name'] OR $ergebnis_email == $_POST['email'])
{
echo "Die beiden angegebenen Passwörter stimmen nicht überein, der Name ist bereits vergeben,
 oder die Email wird bereits benutzt!";
}
elseif ($ergebnis_name != $_POST['name'] OR $ergebnis_email != $_POST['email'])
{
$eintrag = "INSERT INTO snk_user(name, pw, email) VALUES ('$name', '$pw', '$email')";
$eintragen = mysql_query($eintrag);
echo 'Sie wurden erfolgreich registriert! <a href="index.php">weiter</a>';
}
?>
Ich habe das OR jetzt nicht durch || ersetzt, da ich die variante nicht mag^^

EDIT: und noch ein Problem: Wenn man sich jetzt mit anderem namen und anderer email anmeldet, wird in die spalte name , email UND Pw nichts mehr eingegeben OO
 
Zuletzt bearbeitet:
PHP:
<?php
elseif ($ergebnis_name != $_POST['name'] OR $ergebnis_email != $_POST['email'])
//OR durch AND ersetzen, da beides NICHT zutreffen darf
?>

liegt wohl daran, dass nach korrektur die neuen werte nicht übernommen werden.
sichere das ganze mit einer abfrage ab, ob das formular überhaupt gesendet wurde:

PHP:
<?php
if(isset($_POST['submit']))
   {
   /*
   dann deine anweisungen
   "submit" ist sinngemäß durch die betitelung des abschick-buttons zu ersetzen.
   */
   }
?>

das ganze nennt sich "affenformular", da auch nach eingabe einer million AFFEN (nachäffen) das skript nicht weiterarbeitet und sich immer wieder in den ausgangszustand versetzt.

Nils aka XraYSoLo
 
Werbung:
hab ich ;) aber es will immer noch nicht >o> ich schicke wieder das formular mit gleicher email und gleichem username ab und da steht das ich registriert wurde. in der db is es auch eingetragen >o<.

Quellcode:

PHP:
<?php
mysql_connect("localhost","shinobi-no-kage","Passwort");
mysql_select_db("shinobi-no-kage");
$abfrage_name = "SELECT * FROM snk_user WHERE name = '".$_POST['name']."' ";
$abfrage_email = "SELECT * FROM snk_user WHERE email = '".$_POST['email']."' ";
$ergebnis_name = mysql_query($abfrage_name);
$ergebnis_email = mysql_query($abfrage_email);


if ($_POST["pw"] != $_POST["pw2"] OR $ergebnis_name == $_POST['name'] OR $ergebnis_email == $_POST['email'])
{
echo "Die beiden angegebenen Passwörter stimmen nicht überein, der Name ist bereits vergeben,
 oder die Email wird bereits benutzt!";
}
elseif ($ergebnis_name != $_POST['name'] AND $ergebnis_email != $_POST['email'])
{
$eintrag = "INSERT INTO snk_user(name, pw, email) VALUES ('".$_POST['name']."', '".$_POST['pw']."', '".$_POST['email']."')";
$eintragen = mysql_query($eintrag);
echo 'Sie wurden erfolgreich registriert! <a href="index.php">weiter</a>';
}

?>

fi(isset... hab ich weggelassen, da es nur ne fehlermeldung gab
 
Werbung:
if(isset()) eben NICHT weglassen, sonst verliert sich der sinn.

jetzt fällts mir auf, das kann auch gar nicht funktionieren, da du die beiden werte ja nie vergleichst.
versuch' mal:

PHP:
<?php
$abfrage_name = "SELECT * FROM snk_user WHERE name = '".$_POST['name']."' ";
$abfrage_email = "SELECT * FROM snk_user WHERE email = '".$_POST['email']."' ";
$ergebnis_name = mysql_query($abfrage_name);
$ergebnis_email = mysql_query($abfrage_email);

if(mysql_fetch_array($ergebnis_name) == 1)
   {
   echo 'dieser benutzername wird bereits verwendet';
   }

if(mysql_fetch_array($ergebnis_email) == 1)
   {
   echo 'diese e-mail-adresse wird bereits verwendet';
   }
?>

du musst doch nachsehen, ob es das nochmal in der datenbank gibt. wenn ja, abbrechen, wenn nein, eintragen.

mit mysql_fetch_array() holst du sämtliche einträge in den temporären speicher und siehst nach, ob EINES ( == 1) dieser einträge den abfragewert enthält. wenn ja (und einer reicht schon), wird abgebrochen.

Nils aka XraYSoLo
 
ALSO: Wenn ich if(isset()) nehme, dann bleibt das Fenster komplett weiß.

Und jetzt nimmt er gar keinen User mehr an >.>

viellciht hab ich aber auch am quelltext was falsch gemacht:

PHP:
<?php
mysql_connect("localhost","shinobi-no-kage","**PW**");
mysql_select_db("shinobi-no-kage");
$abfrage_name = "SELECT * FROM snk_user WHERE name = '".$_POST['name']."' ";
$abfrage_email = "SELECT * FROM snk_user WHERE email = '".$_POST['email']."' ";
$ergebnis_name = mysql_query($abfrage_name);
$ergebnis_email = mysql_query($abfrage_email);

if (isset($_POST['Absenden']))
{
if(mysql_fetch_array($ergebnis_name) == 1)
   {
   echo 'dieser benutzername wird bereits verwendet';
   }

if(mysql_fetch_array($ergebnis_email) == 1)
   {
   echo 'diese e-mail-adresse wird bereits verwendet';
   }
elseif ($ergebnis_name != $_POST['name'] AND $ergebnis_email != $_POST['email'])
{
$eintrag = "INSERT INTO snk_user(name, pw, email) VALUES ('".$_POST['name']."', '".$_POST['pw']."', '".$_POST['email']."')";
$eintragen = mysql_query($eintrag);
echo 'Sie wurden erfolgreich registriert! <a href="index.php">weiter</a>';
}
}
?>
 
Werbung:
musstes halt dementsprechend ausbauen, einfach nur abkupfern bringt nicht. wenn ich zeit hab', poste ich dir hier mal das komplette und funktionierende skript ab.

Nils aka XraYSoLo
 
da haben wirs (is' getestet, läuft):

PHP:
<?php
mysql_connect("localhost","shinobi-no-kage","**PW**");
mysql_select_db("shinobi-no-kage");
?>

hier das HTML-formular hin

<?php
$sql = array();

//SQL-anweisungen der übersicht halber auf arrays umgebaut
$sql[1] = "SELECT * FROM snk_user WHERE name = '".$_POST['name']."' ";
$sql[2] = "SELECT * FROM snk_user WHERE email = '".$_POST['email']."' ";

$ergebnis_name = mysql_query($sql[1]);
$ergebnis_email = mysql_query($sql[2]);

if(isset($_POST['submit']))
   {
   //man sollte auch prüfen, ob überhaupt was in den feldern drinsteht
   if(empty($_POST['name']) || empty($_POST['email']))
      {
	  echo 'bitte f&uuml;llen sie BEIDE felder aus.';
	  }
	     elseif(mysql_num_rows($ergebnis_name) == 1)
            {
            echo 'dieser benutzername wird bereits verwendet.';
			}
               elseif(mysql_num_rows($ergebnis_email) == 1)
			      {
			      echo 'diese e-mail-adresse wird bereits verwendet.';
			      }
				     else
					    {
						//an deiner stelle würde ich das passwort mit md5 verschlüsseln
						$sql[3] = "
						            INSERT INTO snk_user 
									VALUES
									(
									   '".$_POST['name']."', 
									   '".md5($_POST['pw'])."',
									   '".$_POST['email']."'
									)
								  ";
						
						mysql_query($sql[3]) or die(mysql_error());
						
						echo '<p>sie wurden erfolgreich registriert. <a href="inde.php">weiter</a></p>';
						}
   }
?>

btw, es war nicht mysql_fetch_array(), sondern mysql_num_rows(). hätte demnach auch gar nicht gehen können.

Nils aka XraYSoLo
 
Werbung:
vielen vielen dank xray :) habs immer versucht, aber wenns mit fetch_num_row geht, dann hättt ichs nich hingekriegt >.>

danke nochmal

Jedoch: Wenn man sich neu registriert, ist da ne leere seite und nicht "Sie wurden jetzt registriert weiter" OO aber trtozdem danke ;)
 
Zuletzt bearbeitet:
Ich glaub ich bin ein Trottel Oo

Das Script geht i-wie nicht mehr =O

es werden zumindest keine User mehr in die Datenbank eingefügt.

Ich habe es auch nochmal komplett hier rauskopiert und es ging immer noch nicht.

mfg

Barzul
 
Werbung:
liegt vielleicht daran, dass deine tabelle für die user keinen inkrementierten primärschlüssel besetzt, der jedem eintrag eine eindeutige ID verpasst...

Nils aka XraYSoLo
 
Also: In der mysql tabelle steht im Feld ID unter extra auto_incrediment.
Also müsste da doch der schlüssel sein oder??

Fehlermeldung nach absenden des Formulars:

Column count doesn't match value count at row 1
 
Zuletzt bearbeitet:
Zurück
Oben