Statistik |
Beiträge: 144.534 (Täglich: 19,19 )
Themen: 16.701
Mitglieder: 13.209
Neuestes Mitglied: zitronentee.
Ausl. d. letzten Minute: 112%
Ausl. d. letzten 5 Minuten: 155%
Ausl. d. letzten 15 Minuten: 170%
Aktulle Uhrzeit: 10:18
Freier Webspace: 4.04 TB
PHP-Version: 7.4.33
|
|
|
wiw - Anzeige einer URL mit action und ID |
|
wiw - Anzeige einer URL mit action und ID |
|
Guten Abend,
das ist so ein Problem, dass mich schon eine ganze Weile beschäftigt und ich einfach nicht auf den richtigen Nenner komme. Und zwar geht es um den wer ist online-Hack; genauer gesagt um die aktuelle Anzeige. Wir haben zusätzliche PHP Seiten die mit einem action versehen sind, aber parallel dazu eine id übergeben.
(Kurz, wir sind ein Hosting-Forum für verschiedene kleine Rollenspiele)
die urls sehen zum Beispiel so aus:
listen.php?action=avatare&rpgid=2
listen.php?action=ages&rpgid=2
listen.php?action=berufe&rpgid=2
Nun möchte ich natürlich, dass in der wer ist wo online Liste folgendes steht:
Avatarliste von Rollenspiel 2
Altersliste von Rollenspiel 2
Berufeliste von Rollenspiel 2
Ich arbeite mit der Wer ist wo online?-Ultimate, und somit mit der wiw_class.php
Was habe ich bereits getan?
In der Übersicht wird folgendes angezeigt:
Altersliste von (mit Link listen.php?action=ages&rpgid= )
Also wird die rpgid nicht mit übergeben. In der PHP habe ich folgende Änderungen durchgeführt:
(chronologisch in der Datei)
code: |
1:
2:
3:
4:
5:
|
var $rpgid= ""; (hinzugefügt)
|| $this->urlend=="listen.php" (erweitert)
else if($this->urlend=="listen.php") $this->action= $url[0]; (erweitert)
else if($this->urlend=="listen.php") $this->id = $url[0]; (erweitert)
|
|
Hier soll er sich den Namen aus der Datenbank des Rollenspiels holen:
code: |
1:
2:
3:
4:
|
else if($this->urlend=="listen.php") {
$info = $db->query_first("SELECT name FROM bb".$n."_rollenspiele WHERE rpgid='$this->rpgid'");
$this->name = $info['name'];
} |
|
Bei allen anderen ohne Action geht es einwandfrei.
Und hier die Abfrage mit den Actions zur Anzeige:
code: |
1:
2:
3:
4:
5:
6:
|
/* LISTEN */
CASE "listen.php":
if($this->action=="avatare") {$location = "<a href=\"listen.php?action=avatare&rpgid=$this->rpgid\" target=\"_blank\">Avatarliste $this->name</a>";}
elseif($this->action=="ages") {$location = "<a href=\"listen.php?action=ages&rpgid=$this->rpgid\" target=\"_blank\">Altersliste $this->name</a>";}
else {$location = "<a href=\"listen.php&sid=$session[hash]\" target=\"_blank\">Die Listenübersicht</a>";}
break; |
|
Wie gesagt: das mit den action funktioniert. Es wird der Name der Liste korrekt angezeigt, aber er zieht sich einfach nicht die RPG-ID. Und nun hoffe ich, dass mir vielleicht jemand einen Denkanstoß geben kann.
(Falls mehr Code benötigt wird, dann bitte Bescheid sagen. die class_wiw ist bei mir nur sehr, sehr voll und würde wohl nicht zur Übersichtlichkeit beitragen.)
beste Grüße
|
|
04.10.2018 22:37 |
|
|
|
Hallo Viktor, und dank für deine Rückmeldung.
Mein Fehler, ich war der festen Überzeugung, dass ich den Hack von hier habe; weil der von Schrimm ist.
Zerlegt wird es in zwei Bereichen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
function cut($result) {
$url=explode("?", $result['request_uri']);
$this->urlend=$url[0];
if($this->urlend=="board.php" || $this->urlend=="newthread.php") $this->boardid = $result['boardid'];
else if($this->urlend=="addreply.php" || $this->urlend=="attachments.php" || $this->urlend=="thread.php") $this->threadid = $result['threadid'];
else if($this->urlend=="editpost.php" || $this->urlend=="misc.php" || $this->urlend=="profile.php") {
$url=explode("=", $result['request_uri']);
$url=explode("&", $url[1]);
if($this->urlend=="editpost.php") $this->postid = $url[0];
else if($this->urlend=="misc.php") $this->postid = $url[0];
else if($this->urlend=="profile.php") $this->userid = $url[0];
}
$this->result = $result;
} |
|
Aber wie gesagt, er holt sich leider die ID nicht. Ich hab mich da an den verschiedenen voreingestellten Seiten orientiert, wie hier verlässt er mich.
beste Grüße
beste Grüße
|
|
05.10.2018 21:00 |
|
|
|
Hallo,
Zum Anfang:
php: |
1:
2:
3:
4:
|
$url=explode("&", $url[1]);
if($this->urlend=="editpost.php") $this->postid = $url[0];
else if($this->urlend=="misc.php") $this->postid = $url[0];
else if($this->urlend=="profile.php") $this->userid = $url[0]; |
|
ersetze gegen:
php: |
1:
2:
3:
4:
5:
|
$url=explode("&", $url[1]);
$url[0]=intval($url[0]);
if($this->urlend=="editpost.php") $this->postid = $url[0];
else if($this->urlend=="misc.php") $this->postid = $url[0];
else if($this->urlend=="profile.php") $this->userid = $url[0]; |
|
Damit sollte ein "Fehler" beseitigt worden sein...
Zu deinem Anliegen:
Ganz oben:
php: |
1:
2:
|
var $action = "";
var $rpgid = ""; |
|
Dann:
php: |
1:
|
$this->result = $result; |
|
füge darüber ein:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
else if($this->urlend=="listen.php") {
$url=explode("&",$url[1]);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
} |
|
Damit solltest du nun auf "$this->action" und "$this->rpgid" zugreifen können.
Der "Wer ist wo online?-Ultimate" wurde hier nie hochgeladen.
Er wird nur auf Anfrage hochgeladen und auch nur dann, wenn er überarbeitet worden ist.
__________________
|
|
06.10.2018 00:11 |
|
|
|
Guten Morgen,
ja, das mit dem Hack hier hat mich auch kurz wirklich verwirrt. Seit dem mybb aber dicht ist habe ich angefangen einfach alles auf einem USB-Stick zusammeln an Hacks. Da bin ich glaube ich durcheinander gekommen und hab die Fakten falsch zusammen gesetzt.
Vielen Dank für deine Antwort.
Ich hab alles soweit angepasst, aber jetzt wird nur noch der
code: |
1:
2:
3:
4:
5:
6:
|
//* LISTEN */
CASE "listen.php":
if($this->action=="avatare") {$location = "<a href=\"listen.php?action=$this->action&id=$this->rpgid\" target=\"_blank\">Avatarliste $this->name</a>";}
elseif($this->action=="ages") {$location = "<a href=\"listen.php?action=$this->action&id=$this->rpgid\" target=\"_blank\">Altersliste $this->name</a>";}
else {$location = "<a href=\"listen.php&sid=$session[hash]\" target=\"_blank\">Die Listenübersicht</a>";}
break; |
|
reine else-Teil in der wer-ist-wo-Anzeige angezeigt. (Also Listenübersicht) Wenn ich den testweise entferne, dann bleibt die Spalte leer.
beste Grüße
|
|
06.10.2018 10:45 |
|
|
|
Hallo,
Die "Definition" der "foreach" war nicht ganz korrekt($url statt $url[1]).
Nimm den "neuen Code".
__________________
|
|
06.10.2018 11:19 |
|
|
|
Moin,
das ist mir jetzt super unangenehm, aber es hat leider keine Veränderung mit sich gebracht.
Ich versuche jetzt einmal "laut zu denken", weil ich so ganz in den Schleifen noch nicht durchsteige und ich sowieso jede Möglichkeit aufschnappe etwas zu lernen.
code: |
1:
|
$url=explode("&",$url[1]); |
|
wenn ich das richtig verstanden habe, würde die URL so zerteilt werden:
url[0] listen.php?action=avatare
url[1] rpgid=2
weil das & Zeichen ja das Trennungszeichen ist. Hier bin ich mir relativ sicher es verstanden zu haben. (Hoffe ich!)
das foreach erstellt jetzt für jeden Bestandteil der eben zerteilten URL ein val, korrekt?
also wäre
code: |
1:
|
$val=explode("=",$val); |
|
ich verstehe an dieser Stelle nicht, wie er es jetzt zerteilen würde. So wie ich das Fehlverhaten verstehe erkennt er diesen Teil ja nicht:
if($this->action=="avatare") da er ja nur das else am Ende anzeigt.
(macht das eigentlich Sinn, was ich schreibe?)
|
|
06.10.2018 11:48 |
|
|
|
Hallo,
An besagter Stelle sollte deine URL in etwa so aussehen: action=avatare&rpgid=2
Das "Fragezeichen" wurde schon am Anfang der Funktion gesplittet.
An besagter Stelle sollte also "$url" so aussehen:
$url[0]: listen.php
$url[1]: action=avatare&rpgid=2
Weiters wird nur $url[1] weiterverwendet, nach "&" gesplittet und die ursprüngliche $url überschrieben.
Ergebnis sollte sein:
$url[0]: action=avatare
$url[1]: rpgid=2
Das "foreach" geht nun, da in der "URL" theortetisch "action" und "rpgid" vertauscht und auch weitere Bestandteile vorhanden sein könnten, durch das vorhin erzeugte Array.
Für die "listen.php" wird noch etwas "gefiltert":
php: |
1:
2:
|
if($val[0]=='action') $this->action=$val[1];
else $this->rpgid=intval($val[1]); |
|
Da dies das einzige Ergebnis ist, das kein Integer ist.
$val[0] sollte hier eben "action" sein und $val[1] beispielsweise "avatare".
Dies wird dann auch in "$this->action" gespeichert.
Für den Rest verwendet man immer "intval" um dadurch möglichen Problemen vorzubeugen.
Daher müsste man, je nach Fall, nur mehr "$this->action" etwas weiterbehandeln.
Wie bereits gesagt, aus meiner Sicht müssten "$this->action" und "$this->rpgid" bereits richtig befüllt sein.
Lasse dir die mal gesondert ausgeben?
__________________
|
|
06.10.2018 19:04 |
|
|
|
Grüß dich,
vielen Dank für die Information! Das hat auf jeden Fall geholfen ein wenig zum zu probieren. Ich arbeite mich gerade ein wenig vor, hänge aber jetzt fest.
Aktuell bin ich bei diesem Teil:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
else if($this->urlend=="listen.php") {
$url=explode("&",$url[1]);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
} |
|
Erste Änderung: er muss über die Klammer vom
code: |
1:
|
$this->result = $result; |
|
Dieser Teil hier
code: |
1:
|
$url=explode("&",$url[1]); |
|
Ich habe den mal mit var_dump ($url); anzeigen lassen wollen und das Ergebnis ist nur
array(1) { [0]=> string(2) "id" } array(1) { [0]=> string(2) "id" }
(Jetzt halt zwei Mal, weil die Liste gerade von wem anders auch betrachtet wird.)
Ergo hat er das action gar nicht und daher wird nur der "Ersatzlink" angezeigt.
Testweise habe ich den Code so geändert:
code: |
1:
|
$url=explode("&", $result['request_uri']); |
|
und habe dann folgende Ausgabe:
array(2) { [0]=> string(22) "listen.php?action=jobs" [1]=> string(5) "id=40" } array(2) { [0]=> string(25) "listen.php?action=avatare" [1]=> string(4) "id=2" }
bei
code: |
1:
|
$url=explode("&", $url[0]); |
|
bekomme ich nur 0 als Ausgabe.
Dann bin ich weiter im Text, und hab den $val part mit var_dump anzeigen lassen.
array(2) { [0]=> string(17) "listen.php?action" [1]=> string(4) "jobs" } array(2) { [0]=> string(2) "id" [1]=> string(2) "40" } array(2) { [0]=> string(17) "listen.php?action" [1]=> string(7) "avatare" } array(2) { [0]=> string(2) "id" [1]=> string(1) "2" }
Ich finde, das sieht schon mehr nach dem aus, was ich gerne möchte. Aber (ich hoffe, ich verstehe das richtig, wie gesagt, ich bin noch nicht ganz fit!) kann es sein, dass es nicht klappt, da er jeden Bestandteil der url als eigenen array nimmt? In meinem Kopf würde es nur gehen, wenn alle Bestandteile in einem array wären? Weil nur da könnte man ja das "if das, dann das, sonst das". Ist das korrekt? Es kann natürlich auch sein, dass ich gerade Mumpitz mache. Wenn dir das zu viel oder zu doof ist, dann sag bitte Bescheid. Ich finde es gerade aber super spannend.
|
|
06.10.2018 20:33 |
|
|
|
Hallo,
Welche Klammer?
Die "cut"-Funktion müsste so aussehen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
function cut($result) {
$url=explode("?", $result['request_uri']);
$this->urlend=$url[0];
if($this->urlend=="board.php" || $this->urlend=="newthread.php") $this->boardid = $result['boardid'];
else if($this->urlend=="addreply.php" || $this->urlend=="attachments.php" || $this->urlend=="thread.php") $this->threadid = $result['threadid'];
else if($this->urlend=="editpost.php" || $this->urlend=="misc.php" || $this->urlend=="profile.php") {
$url=explode("=", $result['request_uri']);
$url=explode("&", $url[1]);
if($this->urlend=="editpost.php") $this->postid = $url[0];
else if($this->urlend=="misc.php") $this->postid = $url[0];
else if($this->urlend=="profile.php") $this->userid = $url[0];
}
else if($this->urlend=="listen.php") {
$url=explode("&",$url[1]);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
}
$this->result = $result;
} |
|
Soweit passt es?
__________________
|
|
06.10.2018 20:50 |
|
|
|
Ja, so sieht es bei mir auch aus. Da habe ich deinem Posting am Anfang falsch verstanden.
Und dann halt meine andere Änderungen, dass ich überhaupt Daten drin habe.
|
|
06.10.2018 20:52 |
|
|
|
Hallo,
Ändere mal das:
php: |
1:
2:
|
else if($this->urlend=="listen.php") {
$url=explode("&",$url[1]); |
|
zu:
php: |
1:
2:
3:
|
else if($this->urlend=="listen.php") {
print_r($url);
$url=explode("&",$url[1]); |
|
__________________
|
|
06.10.2018 20:54 |
|
|
|
Da gibt es:
code: |
1:
|
Array ( [0] => 0 [1] => id ) |
|
Das hatte ich in meinem Beitrag davor ja schon geschrieben. Er zieht sich da nur die ID. Das Action kriegt er gar nicht zu fassen, weswegen wohl immer nur der Ersatzlink angezeigt wird.
Mit
code: |
1:
|
$url=explode("&", $result['request_uri']); |
|
wird beides ausgegeben. Siehe drei Beiträge über dir (:
|
|
06.10.2018 21:00 |
|
|
|
Hallo,
An der Stelle wo ich es eingefügt habe?
Das kann eigentlich nicht sein...
__________________
|
|
06.10.2018 21:01 |
|
|
|
Ich hab es jetzt noch einmal geprüft.
Mein Code:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
else if($this->urlend=="listen.php") {
print_r($url);
$url=explode("&",$url[1]);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='listen.php?action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
} |
|
Die Ausgabe
code: |
1:
|
Array ( [0] => 0 [1] => id ) |
|
|
|
06.10.2018 21:04 |
|
|
|
Hallo,
Da müsste sowas stehen:
php: |
1:
2:
3:
4:
5:
|
Array
(
[0] => listen.php
[1] => action=avatare&id=3
) |
|
Bitte poste mal deine "cut"-Funktion.
__________________
|
|
06.10.2018 21:04 |
|
|
|
Ja, das steht da, wenn ich nicht $url[1] verwende, sondern das $result[request_uri]
Aber natürlich.
code: |
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:
|
function cut($result) {
$url=explode("?", $result['request_uri']);
$this->urlend=$url[0];
if($this->urlend=="board.php" || $this->urlend=="newthread.php") $this->boardid = $result['boardid'];
else if($this->urlend=="addreply.php" || $this->urlend=="attachments.php" || $this->urlend=="thread.php") $this->threadid = $result['threadid'];
else if($this->urlend=="editpost.php" || $this->urlend=="misc.php" || $this->urlend=="profile.php" || $this->urlend=="charaktere.php" || $this->urlend=="charakterlist.php" || $this->urlend=="reservierung.php" || $this->urlend=="szenen.php" || $this->urlend=="quests.php" || $this->urlend=="listen.php") {
$url=explode("=", $result['request_uri']);
$url=explode("&", $url[1]);
$url[0]=intval($url[0]);
if($this->urlend=="editpost.php") $this->postid = $url[0];
else if($this->urlend=="misc.php") $this->postid = $url[0];
else if($this->urlend=="profile.php") $this->userid = $url[0];
else if($this->urlend=="charaktere.php") $this->charaid = $url[0];
else if($this->urlend=="charakterlist.php") $this->id = $url[0];
else if($this->urlend=="reservierung.php") $this->id = $url[0];
else if($this->urlend=="szenen.php") $this->id = $url[0];
else if($this->urlend=="quests.php") $this->id = $url[0];
else if($this->urlend=="listen.php") {
print_r($url);
$url=explode("&",$url[1]);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='listen.php?action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
}
}
$this->result = $result;
} |
|
|
|
06.10.2018 21:07 |
|
|
|
Hallo,
Danke.
Deine Funktion sieht anders aus...
Bitte verwende diese:
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:
|
function cut($result) {
$url=explode("?", $result['request_uri']);
$this->urlend=$url[0];
if($this->urlend=="board.php" || $this->urlend=="newthread.php") $this->boardid = $result['boardid'];
else if($this->urlend=="addreply.php" || $this->urlend=="attachments.php" || $this->urlend=="thread.php") $this->threadid = $result['threadid'];
else if($this->urlend=="editpost.php" || $this->urlend=="misc.php" || $this->urlend=="profile.php" || $this->urlend=="charaktere.php" || $this->urlend=="charakterlist.php" || $this->urlend=="reservierung.php" || $this->urlend=="szenen.php" || $this->urlend=="quests.php") {
$url=explode("=", $result['request_uri']);
$url=explode("&", $url[1]);
$url[0]=intval($url[0]);
if($this->urlend=="editpost.php") $this->postid = $url[0];
else if($this->urlend=="misc.php") $this->postid = $url[0];
else if($this->urlend=="profile.php") $this->userid = $url[0];
else if($this->urlend=="charaktere.php") $this->charaid = $url[0];
else if($this->urlend=="charakterlist.php") $this->id = $url[0];
else if($this->urlend=="reservierung.php") $this->id = $url[0];
else if($this->urlend=="szenen.php") $this->id = $url[0];
else if($this->urlend=="quests.php") $this->id = $url[0];
}
else if($this->urlend=="listen.php") {
$url=explode("&",$url[1]);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
}
$this->result = $result;
} |
|
__________________
|
|
06.10.2018 21:09 |
|
|
|
Wah. Jetzt habe ich nebenbei probiert und ich habe es hinbekommen.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
else if($this->urlend=="listen.php") {
$url=explode("&", $result['request_uri']);
foreach($url as $val) {
$val=explode("=",$val);
if($val[0]=='listen.php?action') $this->action=$val[1];
else $this->rpgid=intval($val[1]);
}
} |
|
Ist vielleicht nicht ganz schön, aberich bin gerade schon etwas stolz.
Habe deine Version auch reingepackt und die funktioniert jetzt auch. Jetzt muss ich mal schauen wo der Fehler lag und beide Versionen vergleichen.
Auf jeden Fall: vielen, vielen, vielen, vielen, vielen Dank! Für deine Geduld und deine Erklärungen.
|
|
06.10.2018 21:15 |
|
|
|
Hallo,
Der Fehler war die Platzierung.
Du hast den "listen.php"-Teil in einen anderen Teil gepackt, wo die URL bereits zusätzlich verändert wurde.
Mein Code ging aber stets von einem separaten "else if"-Teil aus und dadurch war er nicht für die Stelle gedacht, an der du sie hingepackt hast.
__________________
|
|
06.10.2018 21:18 |
|
|
|
|
|
|