Von Profil zu Listenerstellungshack |
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
# SQL hat nun super geklappt!!
# ich hab das in meine usercp.php eingefügt, und zwar so:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
if($action=="character_edit") {
if(isset($_POST['send'])) {
if(isset($_POST['cr_day'])) $cr_day = trim($_POST['cr_day']);
if(isset($_POST['cr_month'])) $cr_month = trim($_POST['cr_month']);
if(isset($_POST['cr_year'])) $cr_year = trim($_POST['cr_year']);
}
for($i=1;$i<=31;$i++) $day_options.=makeoption($i,$i,$cr_day);
for($i=1;$i<=12;$i++) $month_options.=makeoption($i,getmonth($i),$cr_month);
eval("\$tpl->output(\"".$tpl->get("usercp_character_edit")."\");");
}
$db->query("UPDATE bb".$n."_characters SET birthday='".addslashes(htmlspecialchars_old($birthday))."' WHERE userid = '$wbbuserdata[userid]'"); |
|
stimmt das?
|
|
26.01.14 15:53 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Nicht ganz.
Wir wollen nur etwas in die Datenbank schreiben, wenn im Formular auch auf "Speichern" geklickt wurde.
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
if($action=="character_edit") {
if(isset($_POST['send'])) {
if(isset($_POST['cr_day'])) $cr_day = trim($_POST['cr_day']);
if(isset($_POST['cr_month'])) $cr_month = trim($_POST['cr_month']);
if(isset($_POST['cr_year'])) $cr_year = trim($_POST['cr_year']);
$db->query("UPDATE bb".$n."_characters SET birthday='".addslashes(htmlspecialchars_old($birthday))."' WHERE userid = '$wbbuserdata[userid]'");
}
for($i=1;$i<=31;$i++) $day_options.=makeoption($i,$i,$cr_day);
for($i=1;$i<=12;$i++) $month_options.=makeoption($i,getmonth($i),$cr_month);
eval("\$tpl->output(\"".$tpl->get("usercp_character_edit")."\");");
} |
|
Zusätzlich besteht auch noch das Problem, dass wir "$birthday" nicht definiert haben.
Somit brauchen wir eine Auswahl die uns das "Format" für die Datenbank erstellt.
php: |
1:
2:
|
if($cr_day && $cr_month) $birthday=ifelse(strlen($cr_year)==4,$r_year,ifelse(strlen($cr_year)==2,"19$cr_year","0000"))."-".ifelse($cr_month<10,"0$cr_month",$cr_month)."-".ifelse($cr_day<10,"0$cr_day",$cr_day);
else $birthday = "0000-00-00"; |
|
Die "php"-Datei sollte nun so aussehen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
if($action=="character_edit") {
if(isset($_POST['send'])) {
if(isset($_POST['cr_day'])) $cr_day = trim($_POST['cr_day']);
if(isset($_POST['cr_month'])) $cr_month = trim($_POST['cr_month']);
if(isset($_POST['cr_year'])) $cr_year = trim($_POST['cr_year']);
if($cr_day && $cr_month) $birthday=ifelse(strlen($cr_year)==4,$r_year,ifelse(strlen($cr_year)==2,"19$cr_year","0000"))."-".ifelse($cr_month<10,"0$cr_month",$cr_month)."-".ifelse($cr_day<10,"0$cr_day",$cr_day);
else $birthday = "0000-00-00";
$db->query("UPDATE bb".$n."_characters SET birthday='".addslashes(htmlspecialchars_old($birthday))."' WHERE userid = '$wbbuserdata[userid]'");
}
for($i=1;$i<=31;$i++) $day_options.=makeoption($i,$i,$cr_day);
for($i=1;$i<=12;$i++) $month_options.=makeoption($i,getmonth($i),$cr_month);
eval("\$tpl->output(\"".$tpl->get("usercp_character_edit")."\");");
} |
|
|
|
26.01.14 15:59 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Es macht keinen unterschied ob du "crbirthday" schreibst oder "birthday".
Ich würde es so lassen, wie ich es gemacht habe.
Für die Jahreszahlen ließe sich auch eine "Schleife" erstellen, nur wird eine solche Liste recht lang.
Das mit den Zahlen ist ganz einfach:
Es wird alles nur durchgeführt wenn "$cr_day" und "$cr_month" befüllt sind.
Dann geschieht folgendes:
Ist die Länge von "$cr_year" gleich "4", enthält also das Jahreszahlfeld vier Zahlen, wird es direkt übernommen.
Wenn nicht, muss es zumindest zwei Zahlen enthalten.
Enthält es zwei Zahlen, wird "19" davor geschrieben, enthält es keine zwei Zahlen, wird automatisch "0000" eingefügt.
Mittels "-" geht es zum nächsten Abschnitt.
Ist "$cr_month" kleiner als "10", wird eine "0" davor geschrieben.
Ist es größer oder gleich "10" wird es übernommen, wie es übertragen wurde.
Der weitere Abschnitt ist wieder mit "-" getrennt.
Ist "$cr_day" kleiner als "10", wird eine "0" davor geschrieben.
Ist es größer oder gleich "10" wird es übernommen, wie es übertragen wurde.
Der Grund ist das Datumsformat: "XXXX-XX-XX".
Dies ist die Form, die wir für die Datenbank benötigen.
Die SQL-Spalte "birthday" hat den Datentyp "date" und jener verlangt diese Form der Darstellung.
|
|
26.01.14 16:24 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
suuuuuuper <333 damit hab ich das nun auch verstanden
&& okay
ich habs mal mit cr gelassen damit ich weiß wo ich es zuordnen muss <3 aber das ist auch nur ne Vorliebe
wow das ist so toll *richtig freu* <333
gut wenn wir nun unsere Datenbank haben und unser Datum, erstellen wir dann als nächstes die "Alters Anzeige" oder die "Geburtstagsliste"?
|
|
26.01.14 16:36 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
Also ich habe es eingesetzt habe auch mal einfach probeweise ein geburtstag eingetragen.... Ich weiß nur nicht ob das nu auch wirklich gespeichert wird......
da müsste ich jetzt ne anzeige einfügen also hab ich mal in der temp
eingefügt. das zeigt mir nun nur allerdings den Richtigen Monat und den Richtigen Tag aber kein Jahr an und alles shcön in der Falschen reihenfolge XD sprich das funktioniert aber irgendwie doch nicht so ganz :3
|
|
26.01.14 16:52 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Warum?
Einfach in die SQL-Datenbank schauen, ob bei der Tabelle ein Datensatz vorhanden ist.
|
|
26.01.14 16:59 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
Zitat: |
MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze). |
Ich nehme mal an dass du das schon erwartet hast oder?^^
|
|
26.01.14 17:07 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Richitg, denn wir arbeiten bisher mit einem "UPDATE"-Befehl für den Datenbankeintrag.
Das bedeutet, dass ein bereits existenter Eintrag nur aktualisiert wird.
Wir haben aber einen Eintrag und somit kann dies auch nicht funktionieren.
Mein Vorschlag wäre:
Es wird erst ein Charaktereintrag erstellt, wenn ein Benutzer das möchte.
D.h. Ein Klick auf "Charakter bearbeiten" wirft, beim Aufruf, falls kein Charakter existiert, eine Art Frage aus "Sie haben keinen Charakter. Möchten Sie einen erstellen?".
Wenn der Benutzer dies möchte, wird nun seine "userid" als Datensatz angelegt und ist bereit zur Bearbeitung.
|
|
26.01.14 17:10 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
okay.... könnte man das auch ohne die Frage machen? also einfach wenn er das eingibt wird es erstellt sobald er das erste mal auf senden drückt? Weil im Grunde muss man wenn man normal als User sein Profil ausfüllt ja auch nicht nochmal bestätigen beim ersten mal^^
|
|
26.01.14 17:26 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Könnte man...
Beim Profil funktioniert das jedoch etwas anders, da bereits bei der Registrierung ein Profil angelegt wird.
Jedoch ist es ganz einfach.
Wir müssen unseren "php"-Code nur modifzieren zu:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
if($action=="character_edit") {
$result = $db->query_first("SELECT birthday FROM bb".$n."_characters WHERE userid='$wbbuserdata[userid]'");
if(isset($_POST['send'])) {
if(isset($_POST['cr_day'])) $cr_day = trim($_POST['cr_day']);
if(isset($_POST['cr_month'])) $cr_month = trim($_POST['cr_month']);
if(isset($_POST['cr_year'])) $cr_year = trim($_POST['cr_year']);
if($cr_day && $cr_month) $birthday=ifelse(strlen($cr_year)==4,$r_year,ifelse(strlen($cr_year)==2,"19$cr_year","0000"))."-".ifelse($cr_month<10,"0$cr_month",$cr_month)."-".ifelse($cr_day<10,"0$cr_day",$cr_day);
else $birthday = "0000-00-00";
if($result) $db->query("UPDATE bb".$n."_characters SET birthday='".addslashes(htmlspecialchars_old($birthday))."' WHERE userid = '$wbbuserdata[userid]'");
else $db->query("INSERT INTO bb".$n."_characters (userid,birthday) VALUES ('".intval($wbbuserdata[userid])."','".addslashes(htmlspecialchars_old($birthday))."')");
}
else {
$birthday=explode("-",$result['birthday']);
$cr_day = $birthday[2];
$cr_month = $birthday[1];
$cr_year = ifelse($birthday[0],$birthday[0],"");
}
for($i=1;$i<=31;$i++) $day_options.=makeoption($i,$i,$cr_day);
for($i=1;$i<=12;$i++) $month_options.=makeoption($i,getmonth($i),$cr_month);
eval("\$tpl->output(\"".$tpl->get("usercp_character_edit")."\");");
} |
|
|
|
26.01.14 17:31 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
Okay also haben wir nun ein mal den Insert Befehl, der das ganze in unsere Datenbank schreibt und den Result Befehl, der das ganze dann aus der Datenbank zieht, wenn ich das richtig verstanden habe.
|
|
26.01.14 17:35 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Richtig.
Der "$result" ist wichtig um auch "Vorauswahlen" zu definieren, falls der Benutzer schon etwas eingestellt hat.
In unserem Falle hat er auch noch die Aufgabe zu überprüfen, ob es schon einen Datensatz des jeweiligen Benutzers gibt um zwischen "UPDATE" und "INSERT" auszuwählen.
Überprüfen ob nun ein Datensatz angelegt wird und ob auch alles gespeichert wird.
Die Kontrolle erfolgt über einen Blick in der SQL-Datenbank auf jene Tabelle.
edit:
Damit auch die Seite aktualisiert wird, würde ich diesen "php"-Code verwenden:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
|
if($action=="character_edit") {
$result = $db->query_first("SELECT birthday FROM bb".$n."_characters WHERE userid='$wbbuserdata[userid]'");
if(isset($_POST['send'])) {
if(isset($_POST['cr_day'])) $cr_day = trim($_POST['cr_day']);
if(isset($_POST['cr_month'])) $cr_month = trim($_POST['cr_month']);
if(isset($_POST['cr_year'])) $cr_year = trim($_POST['cr_year']);
if($cr_day && $cr_month) $birthday=ifelse(strlen($cr_year)==4,$cr_year,ifelse(strlen($cr_year)==2,"19$cr_year","0000"))."-".ifelse($cr_month<10,"0$cr_month",$cr_month)."-".ifelse($cr_day<10,"0$cr_day",$cr_day);
else $birthday = "0000-00-00";
if($result) $db->query("UPDATE bb".$n."_characters SET birthday='".addslashes(htmlspecialchars_old($birthday))."' WHERE userid = '$wbbuserdata[userid]'");
else $db->query("INSERT INTO bb".$n."_characters (userid,birthday) VALUES ('".intval($wbbuserdata[userid])."','".addslashes(htmlspecialchars_old($birthday))."')");
header("Location: usercp.php?action=character_edit&sid=$session[hash]");
exit();
}
else {
$birthday=explode("-",$result['birthday']);
$cr_day = $birthday[2];
$cr_month = $birthday[1];
$cr_year = ifelse($birthday[0],$birthday[0],"");
}
for($i=1;$i<=31;$i++) $day_options.=makeoption($i,$i,$cr_day);
for($i=1;$i<=12;$i++) $month_options.=makeoption($i,getmonth($i),$cr_month);
eval("\$tpl->output(\"".$tpl->get("usercp_character_edit")."\");");
} |
|
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Schrimm: 26.01.14 18:11.
|
|
26.01.14 17:39 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
Okay yaaay der Datencode existiert :3
Du hast jetzt dass genommen damit es aktualisiert wird ne:
php: |
1:
2:
|
header("Location: usercp.php?action=character_edit&sid=$session[hash]");
exit(); |
|
Okay super. also zusammengefasst bis hier, haben wir nun:
# Characterteil im UCP Bereich
# Geburtstagseingabefeld
# die Datenbank
|
|
26.01.14 17:53 |
Finden
Als Freund hinzufügen
|
|
Schrimm
Banned
Dabei seit: 21.08.11
Beiträge: 700
|
|
Ja, das aktualisiert dir die Seite, indem es die Seite erneut aufruft.
Richtig, diese Punkte haben wir nun, sofern sie richtig funktionieren.
|
|
26.01.14 18:04 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
Okay.
gut zu wissen && jap laut meiner Kenntniss funktionieren die alle :3 Nur, dass halt nicht angezeigt wird, welches Datum man wirklich eingegeben hat. Also im Profil beim Geburtstag ist das ja so, dass dann in der Eingabe das Datum drinnen steht, das ist hier nicht so, bei mir ist im Charakterbereich das leer :/
|
|
26.01.14 18:07 |
Finden
Als Freund hinzufügen
|
|
Raylan
Mitglied
Dabei seit: 02.06.13
Beiträge: 63
Fähigkeiten: WBB Lite 1 Anfänger Forenversion: Lite 1.0
Themenstarter
|
|
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
|
{!DOCTYPE}
<html>
<head>
<title>$master_board_name - Charakter bearbeiten</title>
$headinclude
</head>
<body id="bg">
$header
<tr bgcolor="{tablecolora}" id="tablea">
<td><table cellpadding=0 cellspacing=0 border=0 width="100%">
<tr>
<td><smallfont><b><a href="index.php?sid=$session[hash]">$master_board_name</a> » <a href="usercp.php?sid=$session[hash]">Kontrollzentrum von $wbbuserdata[username]</a> » Charakter bearbeiten</b></font></td>
<td align="right"><smallfont><b>$usercbar</b></font></td>
</tr>
</table></td>
</tr>
</table><br>
<form action="usercp.php" method="post"><table cellpadding=4 cellspacing=1 border=0 bgcolor="{tableinbordercolor}" width="{tableinwidth}">
<tr bgcolor="{tablecatcolor}" id="tablecat">
<td colspan=2><normalfont color="{fontcolorthird}"><b>» Charakter bearbeiten</b></font></td>
</tr>
<tr id="tablea" bgcolor="{tablecolora}">
<td ><normalfont><b>Geburtsdatum:</b></font></td>
<td><table>
<tr>
<td><smallfont>Tag</font></td>
<td><smallfont>Monat</font></td>
<td><smallfont>Jahr</font></td>
</tr>
<tr>
<td><select name="cr_day">
<option value="0"></option>
$day_options
</select></td>
<td><select name="cr_month">
<option value="0"></option>
$month_options
</select></td>
<td><input type="text" class="input" name="cr_year" value="$cr_year" maxlength="4" size=5></td>
</tr>
</table></td>
</tr>
</table><br>
<p align="center"><input class="input" type="submit" value="Speichern"> <input class="input" type="reset" value="Zurücksetzen"></p>
<input type="hidden" name="action" value="$action">
<input type="hidden" name="send" value="send">
<input type="hidden" name="sid" value="$session[hash]">
</form>
$footer
</body>
</html> |
|
|
|
26.01.14 18:11 |
Finden
Als Freund hinzufügen
|
|
|