Anfänger sucht Hilfe bei User-Account-Erstellung

AHelfer

Mitglied
Guten Abend
Als erstes sollte ich erwähnen das ich blutiger anfänger in sachen PHP bin und wollte nun auf einer seite ein accountsystem erstellen wo man sich registrieren kann und die Daten in einer Datenbank gespeichert werden.

ich habe jetzt seit einiger zeit hier etwas reingeschaut und gesucht jedoch entweder zuviel infos gefunden oder nicht wirklich das was ich suche.

Deshalb hoffe ich das es ok ist wenn ich nun hier was erstelle

Also ich habe ein normales html formular dann werden Daten per Post weitergesendet an mein php "kontroll" file wo die Felder geprüft werden und dann die Daten in die DB geschrieben werden sollte. jetzt wollte ich aber noch Prüfen ob es den Accountname schon in der DB hat. Damit es keine Doppelten Accountnamen gibt.

hier mal mein script (ist wohl etwas chaotisch und würde sicher ein duzend bessere lösungen geben aber ich habs so mal hingebastelt)

PHP:
<?php
error_reporting(E_ALL);
//kontrolle ob es mit dem Formular abgeschickt wurde:
if (isset($_POST['abgeschickt'])){
//zur besseren überischt macht man variablen:
$accname=$_POST['accname'];
$pass1=$_POST['pass1'];
$pass2=$_POST['pass2'];
$mail=$_POST['mail'];
//variablen für kontrolle:
$accstat='0';
$pw1stat='0';
$pw2stat='0';
$pw1und2stat='0';
$mailstat='0';
/*
ganz einfach
1 = feld war leer
2 = feld war mit sonderzeichen
3 = alles ok
*/


//-------------------------------------------------
// Zuerst mal die Kontrolle der Daten:
//---
//account-name
if (!$accname){$accstat='1';}
elseif (!ereg('^([[:alnum:]]{4,20})*$', $accname)) {$accstat='2';}
else{$accstat='3';}
//passwort 1 kontrolle
if (!$accname){$pw1stat='1';}
elseif (!ereg('^([[:alnum:]]{4,20})*$', $pass1)) {$pw1stat='2';}
else{$pw1stat='3';}
//passwort 2 kontrolle
if (!$accname){$pw2stat='1';}
elseif (!ereg('^([[:alnum:]]{4,20})*$', $pass2)) {$pw2stat='2';}
else{$pw2stat='3';}
//passwort vergleichen:
if($pass1 == $pass2){$pw1und2stat='1';}
else{
  $pw1und2stat='0';
  $pw1stat='2';
  $pw2stat='2';}
//mail kontrolle
if (!$mail){$mailstat='1';}
elseif (!eregi("^[_\.0-9a-z-]+@([0-9 a-z][0-9a-z-]+\.)+[a-z]{2,6}$", $mail)) {$mailstat='2';}
else{$mailstat='3';}

//vorgabe wenn alle ok ist:
if ($accstat=='3' and $pw1stat=='3'and $pw2stat=='3' and $pw1und2stat=='1' and $mailstat=='3') {
//dann in datenbank schreiben:
  $verbindung = mysql_connect('localhost', 'root','')
			or die ("Konnte Verbindung zur Datenbank nicht aufbauen.");
			
		mysql_select_db('game',$verbindung);
		
		$sql= "insert into user (accname,pass,mail,date) values('".$accname."','".$pass1."','".$mail."',now())";

		mysql_query($sql, $verbindung)
		or die (echo "irgendwas war schief");
	
		echo '<h1>Folgende Daten wurden übermittelt und in unserer Datenbank gespeichert.</h1><br />';
		echo 'Accountname: '.$accname.'<br /> ' ;
		echo 'Passwort: '.$pass1.'<br />';
		echo 'Mail: '.$mail.'<br />';
}
//-----------------------------------------------------------
//fals nicht alles richtig ausgefüllt wurde
else{
//Formularstuff:
echo '<form action="accanmeldung-test.php" method="post">';
echo 'Nicht alle Felder wurden korrekt ausgefüllt bitte kontrollieren sie ihre angaben <br />';
//accountnamefeld
if ($accstat=='1'){
echo "<b>Accountname:</b> <input type=\"text\" name=\"accname\"> <font color=\"#ff0000\">Bitte Feld ausfüllen!</font> <br />";}  
elseif ($accstat=='2'){
echo '<b>Accountname:</b> <input type="text" name="accname" value="'.$accname.'"> <font color="#ff0000">Bitte nur a-z, A-Z und 0-9 benutzen und min 4 Buchstaben lang!</font> <br />';}
else{echo '<input type="hidden" name="accname" value="'.$accname.'">';} 
//passwort 1 und 2 nicht gleich:
if ($pw1und2stat=='0'){
echo 'Die Passwörter stimmen nicht überein bitte gib 2 mal das gleiche an: <br />';
//passwort 1 feld:
if ($pw1stat=='1'){
echo "<b>Passwort:</b> <input type=\"text\" name=\"pass1\"> <font color=\"#ff0000\">Bitte Feld ausfüllen!</font> <br />";}
elseif($pw1stat=='2'){
echo '<b>Passwort:</b> <input type="text" name="pass1" value="'.$pass1.'"> <font color="#ff0000">Bitte nur a-z, A-Z und 0-9 benutzen und min 4 Buchstaben lang!</font> <br />';}
else {echo '<input type="hidden" name="pass1" value="'.$pass1.'">';}
//passwort 2 feld:
if ($pw1stat=='1'){
echo "<b>Passwort:</b> <input type=\"text\" name=\"pass2\"> <font color=\"#ff0000\">Bitte Feld ausfüllen!</font> <br />";}
elseif($pw1stat=='2'){
echo '<b>Passwort:</b> <input type="text" name="pass2" value="'.$pass2.'"> <font color="#ff0000">Bitte nur a-z, A-Z und 0-9 benutzen und min 4 Buchstaben lang!</font> <br />';} 
else {echo '<input type="hidden" name="pass2" value="'.$pass2.'">';}
}  
//passwort 1 und 2  gleich:
if ($pw1und2stat=='1'){
echo 'Auch wenn die Passwörter identisch sind hat es da noch einen fehler: <br />';
//passwort 1 feld:
if ($pw1stat=='1'){
echo "<b>Passwort:</b> <input type=\"text\" name=\"pass1\"> <font color=\"#ff0000\">Bitte Feld ausfüllen!</font> <br />";}
elseif($pw1stat=='2'){
echo '<b>Passwort:</b> <input type="text" name="pass1" value="'.$pass1.'"> <font color="#ff0000">Bitte nur a-z, A-Z und 0-9 benutzen und min 4 Buchstaben lang!</font> <br />';}
else {echo '<input type="hidden" name="pass1" value="'.$pass1.'">';}
//passwort 2 feld:
if ($pw1stat=='1'){
echo "<b>Passwort:</b> <input type=\"text\" name=\"pass2\"> <font color=\"#ff0000\">Bitte Feld ausfüllen!</font> <br />";}
elseif($pw1stat=='2'){
echo '<b>Passwort:</b> <input type="text" name="pass2" value="'.$pass2.'"> <font color="#ff0000">Bitte nur a-z, A-Z und 0-9 benutzen und min 4 Buchstaben lang!</font> <br />';} 
else {echo '<input type="hidden" name="pass2" value="'.$pass2.'">';}
}  
//mail feld:
if ($mailstat=='1'){
echo "<b>e-mail:</b> <input type=\"text\" name=\"mail\"> <font color=\"#ff0000\">Bitte Feld ausfüllen!</font> <br />";}
elseif ($mailstat=='2'){
echo '<b>e-mail:</b> <input type="text" name="mail" value="'.$mail.'"> <font color="#ff0000">Bitte neine gültige adresse eingeben.</font> <br />';}
else {echo '<input type="hidden" name="mail" value="'.$mail.'">';}  
//Absende button
echo '<input type="submit" value="Abschicken" /><input type="reset" value="Zurücksetzen" />';
echo '<input type="hidden" name="abgeschickt" value="1">';  
}
}



//--------------------------------------------------------------------------
else {
	  echo 'Bitte benutzen Sie das <a href="accanmeldung.htm">Formular</a> um sich anzumelden.';	}
?>


Ich dachte man sollte die abfrage ob der name schon vergeben ist am besten hier reinschreiben:

PHP:
//account-name
if (!$accname){$accstat='1';}
elseif (!ereg('^([[:alnum:]]{4,20})*$', $accname)) {$accstat='2';}
else{
if ( abfrage){ wenn der name schon vorhanden $accstat='4}
else {$accstat='3';}
}

oder so ähnlich.. wäre froh wenn mir hier jemand helfen könnte

MFG
AHelfer
 
Hallo!

Dein Code ist ganz schön unübersichtlich. :(
Ist mir aber auch schon zu spät.

Aber ich würde per SELECT Query die Datenbank nach dem im Formular angegebenen Accountnamen durchsuchen lassen.
Wird ein FALSE zurückgeliefert, kann der Accountname eingetragen werden, andernfalls könntest Du eine entsprechende Meldung ausgeben lassen.
Wo die Abfrage stattfindet dürfte theoretisch egal sein, hauptsache nach dem abschicken des Formulars und vor dem INSERT Query.

Dein Query könnte ungefähr so aussehen:
PHP:
$search = "SELECT accname FROM user WHERE accname LIKE '".$accname."'";
Gruss Dr Dau
 
HI,

also, der Code ist unübersichtlich...... wie auch immer.

Am besten setzt du dich direkt zu Beginn mit Funktionen auseinander - das als Tipp.

Der Query für die DB bzgl. doppelter Account lautet (weil ja genaue Übereinstimmung geprüft werden soll):
PHP:
<?php
// prüfe ob eMail bereits vorhanden und ob Username bereits vorhanden
$result = mysql_query("SELECT accname, mail FROM user WHERE accname='$accname' OR mail='$mail'");
// ist vorhanden....
if($row = mysql_num_rows($result) >= 1) {
	// zurück an User, das Account bereits existiert oder bereits eMail 
}
else {
	// Daten nun prüfen ob, Passwort stimmt, wenn ja, Daten in Datenbank oder Rückmeldung an User
}
?>

Bevor ich die Abarbeitung der Daten in das Script tippe, würde ich zuvor die Prüfung durchführen. Danach erst die Abarbeitung.

Aber spätestens in einem halben Jahr wirst du das Script wieder überarbeiten ;)
 
Danke für die schnelle Antwort. Ich werde das heute Abend oder am Wochenende mal testen (bin jetzt leider garade bei der Arbeit)


:offtopic: ich weiss das mein Script etwas unübersichtlich ist. aber ich hab versucht mit Kommentare es etwas übersichtlciher zu gestalten. Wenn ihr Lust und Zeit habt könnt ihr mir ja Stichwortartig sagen wie ich so chaotische Scripts vermeiden kann. Nicht das ich in einem halben jahr alles neu machen muss :) Vielleicht auch stichwortartig php-befehle die so abfragen und kontrollen von Fomularfelder vereinfachen als ich es gemacht habe. Weil ich habe eigentlich vor ein Onlinegame zu realisieren und da kommt ja noch einiges auf mich zu (ich weiss Onlinegames gibts wie Sand am Meer aber ich finde das is eine gute PHP-Übung)
 
Kommentare sind nützlich..... sie sind aber nicht alles.
Mit unübersichtlich meine ich in erster Linie die quasi durchgägig fehlenen Zeileneinrückungen.
Auch eine Leerzeile kann hin und wieder nicht schaden.
Z.B. so:
PHP:
<?php
if(isset($_POST['abschicken'])) {
     if(empty($_POST['Benutzername'])) {
          $out = "Bitte geben Sie ihren Benutzernamen an!";
     } else {
          $out = "Formular wurde abgeschickt.";
     }
} else {
     $out = "Bitte benutzen Sie das Formular!";
}
 
echo $out;
?>
Kommentare halte ich persönlich hier für überflüssig, da ja eigentlich alles selbsterklärend ist.

Ein Patentrezept wie ein Fromular aufgebaut wird, bzw. wie die Daten weiter verarbeitet werden, gibt es nicht.
Es gibt allerdings die eine oder andere Sache die das Leben einfacher macht.
Z.b. füge ich in einem GRANT Query die ausgewählten Checkboxen mit impolde() zusammen.
So brauche ich nicht jede einzelne Checkbox überprüfen ob diese ausgewählt wurde und brauche auch nicht für jede erdenklichen kombinationen ein extra Query schreiben.
Erspart mir eine Menge Schreibarbeit. ;)
Um solche "Helferlein" zu kennen, gibt es aber wohl nur 2 Möglichkeiten:
1. für jeden Sch**** Fragen stellen (könnte die Helfenden irgendwann abschrecken).
2. lesen, probieren, lesen, probieren, lesen, probieren..... ;)
Ich habe mich für letzteres entschieden und bin damit bisher eigentlich ganz gut klar gekommen.
Dazu darf einem aber auch nicht die Zeit im Nacken sitzen.
Wenn man weder Zeit noch Ahnung hat, sollte man das Projekt eh ablehnen.

Sich als Anfänger an ein Online-Game ranzuwagen, halte ich für ganz schön mutig.
Hoffentlich hast Du da nicht voreilig einen Starttermin genannt. ;)
Meine Projekte nutze ich eigentlich auch nur zu Übungszwecken..... wirklich brauchen tue ich sie eigentlich nicht.
 
Was das Zeileneinrücken angeht werde ich in zukunft besser darauf achten.


Dr Dau hat gesagt.:
Sich als Anfänger an ein Online-Game ranzuwagen, halte ich für ganz schön mutig.
Hoffentlich hast Du da nicht voreilig einen Starttermin genannt. ;)
Meine Projekte nutze ich eigentlich auch nur zu Übungszwecken..... wirklich brauchen tue ich sie eigentlich nicht.

Nene das Game ist noch in der "Planungsphase" wir sind 3 Leute aber für die Programmierung bin ich wohl allein zuständig (die anderen sind eher konzept und Story schreiber). Und wirklich damit anfangen das aufzubauen werden wir erst so im Juni oder Junli. Bis dahin übe ich einfach. und da dachte ich ich fang damit an wie man bei einem Game anfängt.. mit dem Account erstellen. danach kommt Daten ändern, dann so sachen wie Cronjob mit Täglichem update und Aktionen die dann ausgeführt werden die vom User ausgewählt wurden. usw usw.. schön ohne zeitdruck.. (nur meine eigene Ungeduld) und ich denke vorerst wird das ganze eh nur auf meiner Platte laufen. und erst wenn es sogesagt "Game-fertig" ist werd ich es wenn überhaupt online schalten.
 
Also ich hab mich für das Beispiel von Saila entschieden (war mir einfach gerade klarer) und hat auch auf Anhieb geklappt.

sieht bei mir nun so aus:

PHP:
//Kontrolle ob es den namen (mail) schon gibt:
$verbindung = mysql_connect('localhost', 'root','')
					or die ("Konnte Verbindung zur Datenbank nicht aufbauen.");
			  mysql_select_db('game',$verbindung);
$result = mysql_query("SELECT accname, mail FROM user WHERE accname='$accname' OR mail='$mail'"); 

// ist vorhanden.... 
if($row = mysql_num_rows($result) >= 1) {
 echo 'Diesen Accountname gibt es schon oder diese mailaddy hat schon ein account! <br />
 	  Hier gehts zurück zum <a href="accanmeldung.htm">Formular</a> um es nochmal zu versuchen.';} 
else {

Danke euch vielmals.

Werde dieses Forum sicher wieder aufsuchen.
 
Zurück