closed
else {
echo'<p class="meldung">Registrierung fehlgeschlagen: Der Account existiert bereits.</p>';
echo mysql_error();
}
Quote:
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:
Danach habe ich mich mit der register.php beschäftigt.PHP Code:
function PASSWORD($x) {
return '*'.strtoupper(sha1(sha1($x, true)));
}
Habe alle Reihen definiert, die vom User aufgerufen werden.
Danach habe ich alle fehlenden Tabellen aufgerufen.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
);
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:
Und danach füge ich die Reihen zusammen.PHP Code:
if ($SQL_query)
/*Code*/ ;
else
exit('Ein Fehler beim ausführen eines Befehls ist aufgetreten.');
Man kann das ganze auch Mittels array_merge machen.PHP Code:
if ($SQL_query)
while ($SQL_columns = mysql_fetch_array($SQL_query, MYSQL_ASSOC))
$USER_columns[$SQL_columns['COLUMN_NAME']] = $SQL_columns['COLUMN_DEFAULT'];
else
exit('Ein Fehler beim ausführen eines Befehls ist aufgetreten.');
Und dann kommt der CMD der vom HEN definiert wurde (etwas abgeändert)
Somit sollte bei einigen nun der Fehler behoben sein. Schöner wär's (find' ich), wenn man es statisch löst.PHP Code:
$sqlCmd = 'INSERT INTO account.account ('.implode(',', array_keys($USER_columns)).') VALUES (\''.implode('\',\'', array_values($USER_columns)).'\')';
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 :)
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:
Man könnte auch einfach die Standard-Werte anpassen :awesome:
Dennoch danke für das Release, ist bestimmt für einige hilfreich :)
MfG
Oben wurd's grade beantwortet. Das ich das ganze etwas beschrieben habe, ist eigentlich nur für mich persönlich.Quote:
facepalm, einfach in PHP eine Abfrage einfügen, schauen welche Spalte, in welcher Tabelle fehlt und sie einfügen.
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.Quote:
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;
[Only registered and activated users can see links. Click Here To Register...]PHP Code:
else {
echo'<p class="meldung">Registrierung fehlgeschlagen: Der Account existiert bereits.</p>';
echo mysql_error();
}
Fehlende Spalten oder Defaultwerte werden damit bspw. bei der Fehlerausgabe angegeben, so viel Tohuwabohu ist also gar nicht zwingend notwendig.
lg
echo '<pre>';
print_r(error_get_last());
echo '</pre>';
Es gibt auch MySQLs die mit test_* und so. Manche etwas komisch.Quote:
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 ^^
Ja, so ist es. Ich möchte dir, auch wenn's jetzt grad' nicht pass, einen Dank aussprechen.Quote:
Es liegt eigentlich immer an eins von beiden:
- Es fehlen Spalten in der "account" Tabelle
- Die Spalten die eingetragen werden haben keine Standardwerte
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.Quote:
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
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.Quote:
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
while ($SQL_columns = mysql_fetch_array($SQL_query, MYSQL_ASSOC))
$USER_columns[$SQL_columns['COLUMN_NAME']] = $SQL_columns['COLUMN_DEFAULT'];