• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

$_GET Parameter und Submit / Ideenfindung für eine Themensuche

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
Joa, ich zermartere mir hier wieder etwas mein Hirn. Bin dabei eine Themensuche zu erstellen. Diese umfasst ~ 50 bis 60 Checkboxen. Funktioniert so weit auch alles. Mein Problem ist nun das oft, also je nach dem WAS der Nutzer auswählt, auch mal 200, 300 oder 400 Ergebnisse ausgespuckt werden. Diese möchte ich nun natürlich auf mehrere Seiten verteilen. Klappt so weit auch wenn ich NUR die Seitenanzahl über den Link übergebe.

Ich ermittle die Trefferanzahl per mysql_num_rows und lasse so unter den Ergebnissen, Links ausgeben, mit denen man zwischen den Seiten springen kann. Das sieht dann so aus:

1 2 3 4

[src=php]for($i = 1; $i <= $Seiten; $i++) {
echo "<a href=\"". $_SERVER['PHP_SELF']. "";
echo "?seite=".($i-1)*$ErgebnisseProSeite."";
if ($seite == (($i-1)*$ErgebnisseProSeite)) {
echo "\"><b>$i</b></a> ";
} else {
echo "\">$i</a> ";
}
}[/src]

Soweit klappt das auch super. Jetzt kommt aber das Problem mit den weiteren GET-Parametern. Diese sind ja dymamisch. Nun habe ich es mit folgendem versucht:

[src=php]foreach($_GET as $key => $value) {
echo "&".$key."=".$value;
}[/src]
Was für meine anderen Parameter super funktioniert, leider das "?seite", welches ich mir ja eher manuell rein zwinge, dann doppelt vor kommt. Und irgendwie stehe ich grad auf dem Schlauch wie ich das am dümmsten lösen könnte. Ich will ja keine http://www.domain.de/suche.php?seite=50&seite=200&var1=foo&var2=bar Links haben :dozey:

Wo haperts bei mir denn gerade?

Edit: Hab mir mal sowas gebaut. Vielleicht nicht gerade das schönste aber es funktioniert...

[src=php]foreach($_GET as $key => $value) {
$get_param = "&".$key."=".$value;
echo str_replace("&seite=".$value,"",$get_param);
}[/src]
 
Zuletzt bearbeitet:

LemonDrops

Neu angemeldet

Registriert
20 Juli 2013
Beiträge
543
Einfach: Alle Fragen in ein Dokument ausgeben und die Paginierung mit Java Script lösen und mit einmal posten.

Besser: Du erstellst eine Session und pusht per Ajax/Post die Antworten an den Server. Dort speicherst du sie. Dann gibst du den nächsten Satz an Fragen aus und wiederholst den Fortgang, bis alle Fragen beantwortet sind.
 

Kugelfisch

Nerd

Registriert
12 Juli 2013
Beiträge
2.342
Ort
Im Ozean
Was für meine anderen Parameter super funktioniert, leider das "?seite", welches ich mir ja eher manuell rein zwinge, dann doppelt vor kommt. Und irgendwie stehe ich grad auf dem Schlauch wie ich das am dümmsten lösen könnte. Ich will ja keine http://www.domain.de/suche.php?seite=50&seite=200&var1=foo&var2=bar Links haben :dozey:
Das könntest du leicht vermeiden, indem du vor deiner Schleife `seite` aus $_GET löschst:
PHP:
unset($_GET['seite']);
Beachte auch, dass dein aktueller Code XSS-Schwachstellen aufreisst, da du sowohl Inhalte von $_GET als auch PHP_SELF ohne adäquate Maskierung im HTML-Kontext ausgibst. Nutze htmlspecialchars(), um das zu verhindern.

@LemonDrops: Wenn ich godlike richtig verstehe, möchte er nicht die Fragen auf mehrere Seiten verteilen, sondern eventuelle Suchergebnisse. Bei ~50 Checkboxen schiene mir eine Pagination auch noch wenig sinnvoll ...
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #4
Uh, das mit unset() ist natürlich um vieles besser :T Um XSS vorzubeugen werden im fertigen Script natürlich entsprechende $_GET-Inhalte maskiert.

Und ja, mir ging es weniger darum das ich die ganzen Checkboxen verteilen wollte, nur die Suchergebnisse, welche ich am Ende erhalte. Sprich ich grenze meinen Such-Query ein

[src=php]LIMIT ".$seite.", ".$ErgebnisseProSeite."";[/src]

und lasse mir dann am Ende Links ausgeben an die ich dann seite=0, seite=20, seite=40 anhängen lasse. Beim submit packt mir die foreach-Scheife dann aber immer noch ein zweites mal die "seite" an die URL. Das war das Problem :)

Vielen Dank an euch beide :T
 

Shodan

runs on biochips

Registriert
14 Juli 2013
Beiträge
661
Ort
Citadel Station
Um XSS vorzubeugen werden im fertigen Script natürlich entsprechende $_GET-Inhalte maskiert.
Du weißt das sicher alles, aber nur für den Fall der Fälle: htmlspecialchars konvertiert keine einfachen Anführungszeichen, sofern du deine href Attribute mit ' umschließt, solltest du das ENT_QUOTES flag setzen. htmlspecialchars wandelt dir auch das & in & um. Und vergiss nicht auch ein urlencode über die Werte laufen zu lassen: $_GET ist decodiert for your convenience.

Für die for Schleife gibt es etwas eleganteres:

[src=php]$parameters = array('seite' => $seite));
$url = http_build_query(array_merge($_GET, $parameters));[/src]

1: schleift die alten Parameter durch, die nicht konsumiert (mit unset entfernt) wurden
2: neue Parameter lassen sich praktisch in einem Array sammeln
3: wenn die url erstellt wird, überschreiben die Neuen die Alten, jene sind aber noch im $_GET
4: http_build_query nimmt dir urlencode, & und = ab.

Vor dem Konsum validieren und bei der Ausgabe von $url noch kontextspezifisch escapen und fertig :T
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #6
Klappt schon mal super, danke auch dir Shodan. Dein Script ist wirklich eleganter :T

Nun hab ich aber noch ne Frage wenn ich schon dabei bin. Da es sich hier um so viele Checkboxen handelt habe ich diese nach Themen gruppiert und in Spoiler gepackt welche standardmäßig auf display:none; gesetzt sind. Sende ich mein Formular ab sind demnach auch alle Spoiler wieder geschlossen. Momentan "umgehe" ich das in dem ich per isset($checkboxvariable) abfrage ob im entsprechenden Spoiler Checkboxen aktiviert sind. Ist das der Fall bekommen diese ein display:block;. Gibt es da eine elegantere Methode? Sollte ich das per Ajax regeln?

Viele Grüße

godlike
 
Oben