[RELEASE|HOWTO] Funktionierende Registrations-Page [DOWNLOAD]

03/13/2015 01:40 methosiea#1
closed
03/13/2015 02:18 spakasseosna#2
Hi du
1. es geht schon, aber bei fehlenden tabellen macht es alles nur noch schlimmer. 2. für soviel code kannst du auch table_list nehmen.

3. Sonst ist gut^^ also bis morgen :) #Niewiederumdieuhrzeit
03/13/2015 07:13 Yiv#3
Man könnte auch einfach die Standard-Werte anpassen :awesome:

Dennoch danke für das Release, ist bestimmt für einige hilfreich :)

MfG
03/13/2015 10:31 Nick#4
An dieser Stelle kann direkt der neue Bereich eingeweiht werden.
(moverequested => [Only registered and activated users can see links. Click Here To Register...])

Ich bin noch immer der Meinung, dass sich das Ganze hiermit am simpelsten lösen lässt;
PHP Code:
        else {
          echo
'<p class="meldung">Registrierung fehlgeschlagen: Der Account existiert bereits.</p>';
          echo 
mysql_error();
        } 
[Only registered and activated users can see links. Click Here To Register...]

Fehlende Spalten oder Defaultwerte werden damit bspw. bei der Fehlerausgabe angegeben, so viel Tohuwabohu ist also gar nicht zwingend notwendig.

lg
03/13/2015 10:38 [SA]Hylight#5
Quote:
Originally Posted by methosiea View Post
Hallo liebe Community,

Da ich in letzter Zeit des öfteren gefragt wurde wegen dem Registrations-Fehler: Account existierts bereits, habe ich hier nun für Einige eine Lösung (klappt nicht bei allen). Bei mir ging der Fehler damit weg. (Das übrigens 1. Release, das ich auch getestet habe ^^)

Wie dem auch sei könnt ihr euch die Registration unten im Anhang downloaden.

Für die Anderen, dies interessiert werde ich das hier nochmal dokumentieren.

Also mir wurde mitgeteilt, das der Fehler darin liegt das er die DEFAULT-Werte nicht übernimmt, sprich sie sind nicht definiert.

Ich habe das nun so gemacht.

1. Habe ich die PASSWORD()-Funktion in PHP nachgeschrieben und sie in die function.php versetzt (beim Downloadbaren wurde es in register.php versetzt)

Das sah dann so aus:
PHP Code:
function PASSWORD($x) {
    return 
'*'.strtoupper(sha1(sha1($xtrue)));

Danach habe ich mich mit der register.php beschäftigt.
Habe alle Reihen definiert, die vom User aufgerufen werden.

PHP Code:
$USER_columns = array(
    
'login' => $_POST['account'],
    
'password' => PASSWORD($userpass),
    
'real_name' => mysql_real_escape_string($_POST['uname']),
    
'email' => mysql_real_escape_string($_POST['email']),
    
'social_id' => $lcode,
    
'question1' => $sfNum,
    
'answer1' => $hashSF,
    
'create_time' => $sqlZeit,
    
'status' => $accountStatus,
    
'coins' => $regCoins,
    
'autoloot_expire' => $expireDate,
    
'safebox_expire' => $expireDate,
    
'web_aktiviert' => $aktivHash
); 
Danach habe ich alle fehlenden Tabellen aufgerufen.
PHP Code:
$SQL_query mysql_query('SELECT COLUMN_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = \'account\' AND table_schema = \'account\' AND column_name NOT IN (\''.implode('\', \''array_keys($USER_columns)).'\')'$sqlServ); 

(SideFact: Für alle, die immer behaupten, ich sage ich wüsse alles, ich wusste nicht mehr wie ich die mysql_* funktionen definiere und dachte ich könn's ebenefalls objektorientiert machen und suchte 30 Minuten nach dem Fehler.)

Danach Prüfe ich das ganze noch:

PHP Code:
if ($SQL_query
    
/*Code*/ ;
else
    exit(
'Ein Fehler beim ausführen eines Befehls ist aufgetreten.'); 
Und danach füge ich die Reihen zusammen.

PHP Code:
if ($SQL_query)
    while (
$SQL_columns mysql_fetch_array($SQL_queryMYSQL_ASSOC))
        
$USER_columns[$SQL_columns['COLUMN_NAME']] = $SQL_columns['COLUMN_DEFAULT'];
else
    exit(
'Ein Fehler beim ausführen eines Befehls ist aufgetreten.'); 
Man kann das ganze auch Mittels array_merge machen.

Und dann kommt der CMD der vom HEN definiert wurde (etwas abgeändert)
PHP Code:
$sqlCmd 'INSERT INTO account.account ('.implode(','array_keys($USER_columns)).') VALUES (\''.implode('\',\''array_values($USER_columns)).'\')'
Somit sollte bei einigen nun der Fehler behoben sein. Schöner wär's (find' ich), wenn man es statisch löst.

Wenn's ein Fehler gibt einfach melden, aber mit Verzeihung, denn es ist 1:30 und hab' den Schluss noch schnell hingewurstelt :)

PS: Falls ihr andere Datenbanken in Benutzung habt, ist es wichtig das ihr diese verwendet auch bei Erweiterungen muss es umgeschrieben werden.

Virustotal: [Only registered and activated users can see links. Click Here To Register...]
Grüsse alle :)

vielen dank für das Release.
bei mir hast du ja auch nachgeschaut und ich hab den Fehler ebenfalls gefunden.
es lag bei mir daran das auf neue files gewechselt bin aber die alten Logs und Usage caches und temp dateien auf dem webhost ftp hatte.
als ich diese gelöscht habe, hab ich die normale register.php nochmal ausprobiert und es ging wunderbar ^^
03/13/2015 12:13 .Kibito#6
Es liegt eigentlich immer an eins von beiden:
- Es fehlen Spalten in der "account" Tabelle
- Die Spalten die eingetragen werden haben keine Standardwerte
03/13/2015 16:30 methosiea#7
Quote:
Originally Posted by .Yiv. View Post
Man könnte auch einfach die Standard-Werte anpassen :awesome:

Dennoch danke für das Release, ist bestimmt für einige hilfreich :)

MfG
Das ist klar. Aber dabei scheiterts schon bei den meisten. Ich dachte zuerst auch wieso mache ich nicht einfach nur ein Query und release das, aber das hätten bereits einige nicht verstanden wies geht. Zudem Release ich ungerne was einfach so, wenn ich's noch kurz erkläre, kann ich wenigstens meine Lehrer fertigkeiten etwas verbessern :)

Quote:
Originally Posted by BizepsSupportAccount View Post
facepalm, einfach in PHP eine Abfrage einfügen, schauen welche Spalte, in welcher Tabelle fehlt und sie einfügen.
Oben wurd's grade beantwortet. Das ich das ganze etwas beschrieben habe, ist eigentlich nur für mich persönlich.

Quote:
Originally Posted by .JayZoN View Post
An dieser Stelle kann direkt der neue Bereich eingeweiht werden.
(moverequested => [Only registered and activated users can see links. Click Here To Register...])

Ich bin noch immer der Meinung, dass sich das Ganze hiermit am simpelsten lösen lässt;
PHP Code:
        else {
          echo
'<p class="meldung">Registrierung fehlgeschlagen: Der Account existiert bereits.</p>';
          echo 
mysql_error();
        } 
[Only registered and activated users can see links. Click Here To Register...]

Fehlende Spalten oder Defaultwerte werden damit bspw. bei der Fehlerausgabe angegeben, so viel Tohuwabohu ist also gar nicht zwingend notwendig.

lg
Für Leute die etwas Ahnung haben, ja. Man könnte damit dann auch einen Thread eröffnen. Besser ist jedoch, man schaue sich die Error-Liste auf dem Server an. Dazu müsste man sich den Pfad ausgebenlassen.

2. Ehm nein, dies ist nicht der Richtige Zeitpunkt^^. 99% aller Releases haben hier nichts verloren. Und ich habe extra ein HowTo dazwischen gequetscht. Es ist ja auch ein HowTo. Also wieso ich ^^.

PHP Code:
echo '<pre>';
print_r(error_get_last());
echo 
'</pre>'
Quote:
Originally Posted by [SA]Hylight View Post
vielen dank für das Release.
bei mir hast du ja auch nachgeschaut und ich hab den Fehler ebenfalls gefunden.
es lag bei mir daran das auf neue files gewechselt bin aber die alten Logs und Usage caches und temp dateien auf dem webhost ftp hatte.
als ich diese gelöscht habe, hab ich die normale register.php nochmal ausprobiert und es ging wunderbar ^^
Es gibt auch MySQLs die mit test_* und so. Manche etwas komisch.

Quote:
Originally Posted by .Kibito View Post
Es liegt eigentlich immer an eins von beiden:
- Es fehlen Spalten in der "account" Tabelle
- Die Spalten die eingetragen werden haben keine Standardwerte
Ja, so ist es. Ich möchte dir, auch wenn's jetzt grad' nicht pass, einen Dank aussprechen.

Quote:
Originally Posted by spakasseosna View Post
Hi du
1. es geht schon, aber bei fehlenden tabellen macht es alles nur noch schlimmer. 2. für soviel code kannst du auch table_list nehmen.

3. Sonst ist gut^^ also bis morgen :) #Niewiederumdieuhrzeit
Schön, dass du mir in den Rücken fällst, nein Spass, aber ich habe dir das nun ein wenig beigebracht und nun so.

1. Es ist auch nicht für fehlende Tabellen gedacht.

2. table_list ist eine Funktion, die PHP zukünftig eigentlich nicht mehr unterstützen möchte.

3. Also, war heute mal lustig, oder :) Ich sollte Lehrer werden ^^
03/13/2015 21:25 #dynastie#8
Tut mir Leid, aber hiermit hast du entgültig bewiesen, dass du fast keine Ahnung hast.
Du äußerst dich so oft hier von wegen, dass du gar keine große Ahnung von den Datenbanken von Metin2 etc. hast aber versuchst dann irgendwie ein bisschen Aufmerksamkeit mit halbfertigen Sachen zu ergattern. Finde das echt unglaublich.

Außerdem laden sich die Meisten direkt ein ganzes CMS wo relativ gute Scripts dabei sind (HenCMS z.B.). Dazu kommt, dass deine Codes, die ich bisher hier gesehen haben, wirklich unter aller Sau sind. Vorallem jetzt diese Modifikation vom HenCMS.

Lern' ein wenig und komm in 2-3 Jahren wieder. Damit würdest du wirklich jedem ein Gefallen tun. Möchte dich da nicht persönlich angreifen aber so langsam..

Grüße
03/13/2015 21:51 methosiea#9
Quote:
Originally Posted by #dynastie View Post
Tut mir Leid, aber hiermit hast du entgültig bewiesen, dass du fast keine Ahnung hast.
Du äußerst dich so oft hier von wegen, dass du gar keine große Ahnung von den Datenbanken von Metin2 etc. hast aber versuchst dann irgendwie ein bisschen Aufmerksamkeit mit halbfertigen Sachen zu ergattern. Finde das echt unglaublich.

Außerdem laden sich die Meisten direkt ein ganzes CMS wo relativ gute Scripts dabei sind (HenCMS z.B.). Dazu kommt, dass deine Codes, die ich bisher hier gesehen haben, wirklich unter aller Sau sind. Vorallem jetzt diese Modifikation vom HenCMS.

Lern' ein wenig und komm in 2-3 Jahren wieder. Damit würdest du wirklich jedem ein Gefallen tun. Möchte dich da nicht persönlich angreifen aber so langsam..

Grüße
Hallo, das viele dieses HEN benutzen ist eine klare Sache. Sonst gäbe es nicht jeden Tag, diese Frage über ein' Problem dazu. ich habe 2 Mal gesagt, dass ich keine Ahnung von der Metin2 Datenbank habe. Sonst wär's schon wenig komisch.

Das ich Halbfertige-Sachen released habe ist auch Fakt, aber das gehört sicherlich nicht dazu.

Das ist sicherlich nicht unter aller Sau. Diesen Teil, hätte man schöner lösen können:

PHP Code:
while ($SQL_columns mysql_fetch_array($SQL_queryMYSQL_ASSOC))
        
$USER_columns[$SQL_columns['COLUMN_NAME']] = $SQL_columns['COLUMN_DEFAULT']; 
Aber das habe ich sogar angesprochen. Erklär mir mal bitte etwas genauer wo du's unter aller Sau findest und sage dir weshalb es so ist, aber so nicht. Könnte mir vorstellen das du vllt. das neue definieren meinst. Jedoch muss man das machen, damit es wirklich mit jeder PHP-Konfiguration funktioniert. Zu jedem der Query, denke mal die hätte man nicht besser lösen können.

...verwende man SHOW ist dies keine kompatible Lösung

Zuerst, solltest du überlegen, dass's einwandfrei läuft, habe dazu schlecht Zeit komplett selbst Erstelltes zu releasen, weil ich dazu keine Zeit habe.
Grüsse dich
03/15/2015 12:52 .aNNdii##10
#moved