Ungültige Eingaben per $_GET verbieten [PHP]

Hallo,

ich habe in meinem Blog nun die Möglichkeit eingebaut die Seiten zu wechseln, also um auch Ältere bzw. neuere Beiträge sehen zu können.
Das ganze funktioniert auch.

Nun habe ich am Seitenende 2 Links eingefügt die jeweils Vor bzw. zurück “blättern” ($_GET[‘page’] -1 usw.).

Nun Standard wenn man meine Seite aufruft landet man ja auf dem Blog wodurch er unten erstmal ?p=blog&page=1 als nächste Seite angibt -> folglich Falsch das ist die derzeitige Seite nochmals.
Auch ist es so möglich in den Bereich 0, -1, -2 usw. zu kommen bzw. eine höhere Seite anzugeben die nicht möglich wäre bsp. 100.

Das möchte ich gerne verhindern, also das er am besten wenn die Seite nicht exestiert (zu hoch/niedrig) einfach die 1. Seite läd.

Hier der entsprechende Teil des Blog-Scriptes der die Seiten ausgibt und auch die Links bereitstellt:
pastebin.com/Nq5cU49Q

Wie man vlt. schon erkennen kann habe ich zumindest bei den Links unten schonmal versucht zu verhindern das er kleinere Werte als 1 angibt als Seite :slight_smile:.

Hoffe doch es ist verständlich was ich meine :slight_smile:.

MfG
Syntafin

Hi,
Ich würde einen etwas anderen Ansatz wählen:

  • Indexiere Seiten beginnend mit 0, also Startsetite = 0
  • Bei Angaben kleiner 0 Fehlerseite
  • Bei Angaben, wo keine Beiträge in der DB gefunden wurde (= zu große Nummer) Fehlerseite
  • Zurück-Button nur, wenn page > 0
  • Zum Vorwärtsblättern: Du hast die Anzahl der Seiten berechnet, also kein Problem zum ausblenden :wink:

Hi,

erstmal danke für die Antwort.
-Also das Seite 1 die ersten 5 Beiträge sind ist Standard so, wie man das ändert wüsste ich jetzt nicht.
-Wie man bei kleiner 0 bzw. größer als möglich eine Fehlerseite ausgibt ist ja genau das was ich gerne wissen würde (ich hab schon überlegt ob es mit if() ginge).
-Ja das habe ich eigentlich vor das er nur da ist wenn $page > 0, nur ist wenn ich > statt = verwende ein Fehler o_O
-Wie meinst du das jetzt mit einem mehr laden? Statt 5 dann 6? Und den 6. nicht einblenden oder wie?

Läuft die Seite über einen Puffer? (ob_start, usw)
Dann kannst du bei einem Fehler den Puffer leeren, per header(…) einen 404 schicken und dann die Fehlerseite ausgeben.
Oder falls der Puffer bisher nur das Template und keine Daten enthält, einfach die Fehlerausgabe reinschreiben, header 404 senden und den Rest nicht ausgeben. Dazu ist eine If-Abfrage perfekt.

Das mit einem mehr laden kansnt du vergessen. Ich habe übersehen, dass du bereits die Anzahl aller Beiträge ausliest. Damit seihst du ja dann, was die maximale Seitennummer ist.

Wozu eine Fehlerseite?
Wenn eine Seite kleiner als 1 angegeben wurde, setzt du einfach innerhalb des Scripts die aktuelle Seite auf 1.
Wenn eine Seite angegeben wurde, die größer als die letzte Seite ist (bei 10 Seiten z.B. alles was größer als 10 angegeben wurde), dann setzt du die Seite innerhalb des Scripts auf die letzte Seite (im Beispiel auf 10).

Du wirst ja sicherlich irgendwo die Anzahl der Seiten zur Verfügung haben:

$pages = ...; //die Anzahl der Seiten, die es insgesamt gibt
$page = intval($_GET['page']);
if($page < 1)
{
    $page = 1;
}
elseif($page > $pages)
{
    $page = $pages;
}

Fehlermeldungen sind hier überflüssig.

Für die Lesbarkeit in der URL empfiehlt es sich mit 1 zu beginnen.
Der Offset für die Query lässt sich ja trotzdem noch berechnen :slight_smile:

mfg Balmung

Ich würde zumindest einen Infotext ausgeben wie “Keine weiteren Beiträge vorhanden, zeige erste/letzte” :wink:

Ich würde zumindest einen Infotext ausgeben wie “Keine weiteren Beiträge vorhanden, zeige erste/letzte” :wink:[/quote]

Nun das dürfte nach dem Vorschlag von Balmung kein Problem sein,
einfach einen Hinweiß einbauen der nur erscheint bei besagtem Problem.

Genauer werde ich mir das ganze heute Mittag durchlesen.
Jetzt erstmal gute Nacht :morgen:

Wenn die Seite korrekt funktioniert, dann sollte das Problem im Regelfall nicht auftreten.
Nur wenn man explizit die URL manipuliert, passieren unerwartete Dinge. Es gibt keinen Grund für sowas extra Ausgaben zu formulieren, die in der Regel sowieso nicht auftreten sollten.

Wenn also jemand „böse“ genug ist, es zu versuchen, dann darfst du auch „böse“ genug sein, ihm zu verschweigen was genau passiert ist. „Hackangriffe“ (wenn man das so nennen darf) verdienen keine Fehlermeldungen.

Wenn die Seite korrekt funktioniert, dann sollte das Problem im Regelfall nicht auftreten.
Nur wenn man explizit die URL manipuliert, passieren unerwartete Dinge. Es gibt keinen Grund für sowas extra Ausgaben zu formulieren, die in der Regel sowieso nicht auftreten sollten.

Wenn also jemand „böse“ genug ist, es zu versuchen, dann darfst du auch „böse“ genug sein, ihm zu verschweigen was genau passiert ist. „Hackangriffe“ (wenn man das so nennen darf) verdienen keine Fehlermeldungen.[/quote]

Bin derzeit noch am “basteln” weil ich ein wenig das derzeitige Script umbauen muss damit das funktioniert :slight_smile:.
Aber wie du sagst, wenn es geht ist das nicht nötig.