php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.07.2005, 10:12  
Erfahrener Benutzer
 
Registriert seit: 08.08.2003
Beiträge: 111
Fraylman
Standard problem mit klasse zum registrieren

hallo leute!

versuch mich mal ein wenig in klassen einzuarbeiten aber da hab ich schon ein kleines problem! es soll mal eine login klasse werden die alles damit verbundene regelt! hab mal mit der registrierung angefangen! soweit funktioniert sie ja wenn ich das formular abschicke registriert er mir auch den user aber er macht das ganze nur 1 mal! danach kommt immer die fehlermeldung

Duplicate entry '0' for key 2


hier mal der wichtige ausschnitt aus der register.php
Code:
				# Passwort verschl�sseln - Geburtsdatum zusammensetzen - Aktivierungscode erstellen
				$passwort = md5($pw1);
				$geburtsdatum .= "$jahr-$monat-$tag";
				$aktivierungscode = generatepw();
			
				# User in die Datenbank schreiben
				$user = new User;
				
				if($user->checkmail($email))
				{
					$user->registerUser($nickname,$email,$vorname,$nachname,$aktivierungscode,$geburtsdatum,$passwort);
					$user->send_activemail($id,$aktivierungscode,$email);
				
					# Textausgabe generieren
					mkerror("Deine Registrierung war erfolgreich!

Es wurde eine Email mit einen Aktivierungslink 

							auf deine Emailadresse ($email) gesendet.

Du musst deinen Account erst aktivieren bevor du 
							dich einloggen kannst.");
				}
				else
				{
					# Textausgabe generieren
					mkerror("Die eingegebene Email Adresse ist leider nicht zurl�ssig");				
				}
hier das wichtige aus der datei mit der klasse User
Code:
	# Funktion um die G�ltigkeit der Email zu �berpr�fen
	function checkmail($email){
		$email = explode ("@",$email);
		if (strstr($email[1],".")) return TRUE;
	}#ende checkmail
	
	# Funktion zum registrieren eines neuen Users
	function registerUser($nickname,$email,$vorname,$nachname,$aktivierungscode,$geburtsdatum,$passwort){
		$sql = "insert into user (nickname,passwort,geburtsdatum,email,vorname,nachname,aktivierungscode) values ";
		$sql .="('$nickname','$passwort','$geburtsdatum','$email','$vorname','$nachname','$aktivierungscode')";
		$result=mysql_query($sql) or die (mysql_error());
		$id = mysql_insert_id();
		
		return $id;
		
	}# ende der funktion user registrieren
Fraylman ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.07.2005, 10:28  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. gewöhn dir bitte die kommentare mit '#' ab - pear coding style.
methoden-kommentare werden
PHP-Code:
<?php
/** 
 * this is a description of method foo
 * @param $bar integer
 * @return integer
 * @access public 
*/
function foo($bar) {

}
?>
geschrieben,
einzeiler mit '//' eingeleitet.
kommentiere englisch - dann kommt auch kein utf8-kodierter datenmüll bei sonderzeichen raus
2. guck dir phpdoc bzw. javadoc an, um die korrekte kommentar-syntax zu verwenden
3. arbeite mit error_reporting(E_ALL), dann wäre dir ein 'notice: undefined variable $id ...' aufgefallen.
4. du hast vergessen, die aus registerUser() zurückgegebene ID an send_activemail() weiterzugeben.

PHP-Code:
<?php    
           $id 
$user->registerUser($nickname,$email,$vorname,
                 
$nachname,$aktivierungscode,$geburtsdatum,$passwort); 

               
$user->send_activemail($id,$aktivierungscode,$email); 
?>
5. hast du vergessen, auto_increment für die id-spalte in der user-tabelle einzustellen? oder welche indizies gibt's denn noch für die user-tabelle, die als 'key 2' in frage kommen?
axo ist offline  
Alt 05.07.2005, 11:18  
Erfahrener Benutzer
 
Registriert seit: 08.08.2003
Beiträge: 111
Fraylman
Standard

Zitat:
Zitat von axo

1. gewöhn dir bitte die kommentare mit '#' ab - pear coding style kommentiere englisch - dann kommt auch kein utf8-kodierter datenmüll bei sonderzeichen raus
4. du hast vergessen, die aus registerUser() zurückgegebene ID an send_activemail() weiterzugeben.

5. hast du vergessen, auto_increment für die id-spalte in der user-tabelle einzustellen? oder welche indizies gibt's denn noch für die user-tabelle, die als 'key 2' in frage kommen?
zu1) werds mir zu gemüte führen
zu4) thx auf den fehler werd ich auch noch aufmerksam geworden wenn es nicht funktioniert hätte

zu5) leider nein! autoinc ist gesetzt

so sieht meine datenbank aus:

id -- int
nickname -- varchar
passwort -- varchar
aktiviert -- int
aktivierungscode -- varchar
geburtsdatum -- varchar
email -- varchar
vorname -- varchar
nachname -- varchar

verstehe nicht was daran falsch sein sollte
Fraylman ist offline  
Alt 05.07.2005, 11:20  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wie sehen die indizes aus? mach mal einen export der tabellenstruktur mit phpmyadmin und poste den kompletten CREATE TABLE befehl.
axo ist offline  
Alt 05.07.2005, 13:15  
Erfahrener Benutzer
 
Registriert seit: 08.08.2003
Beiträge: 111
Fraylman
Standard

sorry aber hier ist er:


CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`nickname` varchar(50) collate latin1_general_ci default NULL,
`passwort` varchar(100) collate latin1_general_ci default NULL,
`aktiviert` int(2) default '0',
`aktivierungscode` varchar(15) collate latin1_general_ci default '0',
`geburtsdatum` varchar(50) collate latin1_general_ci NOT NULL default '0',
`email` varchar(150) collate latin1_general_ci default '',
`vorname` varchar(25) collate latin1_general_ci default '',
`nachname` varchar(25) collate latin1_general_ci default '',
PRIMARY KEY (`id`),
UNIQUE KEY `playername` (`aktiviert`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `authname` (`nickname`),
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;
Fraylman ist offline  
Alt 05.07.2005, 13:55  
Erfahrener Benutzer
 
Registriert seit: 08.08.2003
Beiträge: 111
Fraylman
Standard

UNIQUE KEY `playername` (`aktiviert`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `authname` (`nickname`),

also hab das mal raus gemacht uns nun funktioniert es! thx an alle die geholfen haben!
Fraylman ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Problem mit OOP PHP Tipps 2005-2 5 01.09.2005 19:37
Problem mit mysql_fetch_array in Klasse PHP Tipps 2005-2 3 16.08.2005 09:14
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
[Erledigt] Funktionen in einer Klasse 'registrieren' bzw. includieren ? PHP-Fortgeschrittene 1 16.07.2005 13:23
[Erledigt] Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Problem mit einer rekursiven Funktion in einer Klasse ajo_silent PHP-Fortgeschrittene 6 13.06.2005 16:40
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
Unverständlichkeit bei dem Instanzieren einer Klasse... PHP Tipps 2005-2 2 08.06.2005 12:44
Problem beim Registrieren von Session-Variablen in Klasse zwelch PHP-Fortgeschrittene 6 18.10.2004 08:07
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
Problem bei einer Klasse mit "hat" beziehung PHP Tipps 2004 4 06.10.2004 21:29
[Erledigt] Brauche Hilfe bei meiner ersten Klasse PHP-Fortgeschrittene 9 24.09.2004 17:09
Problem mit optionalen Parametern bei Funktion in Klasse RudiS PHP-Fortgeschrittene 6 24.09.2004 09:03
Klassenobjet in anderer Klasse benutzen inu PHP Tipps 2004 6 19.09.2004 10:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.