404 über Linkvariable

Kracky

Mitglied
Hallo,

bei der Website an der ich gerade arbeite wird die Seite immer über eine Linkvariable (z.B. ?page=Home) aufgerufen.

Jetzt möchte ich gerne falls jemand auf die Idee kommt in der Browserleiste irgendwas einzutippen - eine variable die nicht exestriert - das dieser jemand auf die 404 Seite gelenkt wird.

Mit SESSIONS habe ich es einfach mit einer überprüfung gemacht ala

PHP:
if($_GET['user'] != $_SESSION['user']) {
     header("Location: ?page=404");
}

aber wie mache ich das ganze mit den Variablen aus der Adresszeile? :o

Edit: Achso ich weiss nicht ob das wichtig ist aber die Inhalte werden über MySQL abegrufen über eine while schleife. Es sind also keine richtigen Dokumente :D
 
Zuletzt bearbeitet:
Hi,

- eine variable die nicht exestriert -
Du meinst wohl eine Seite, die nicht gefunden wurde.
Dann kannst du es genau mit dem Code machen, den du da hattest, nur dass der Code ausgeführt wird, wenn keine Seite gefunden wird.

PHP:
// Pseudocode

$page = GetPage($_GET['user']);
if ($page == -1) {
  Generate404();
}
else {
  DisplayPage();
}

Oder wie meinst du das genau?
 
Ich meine damit das bei ?page=Home ja "Home" die Variable ist oder um es einfacher darzustellen

$_GET['page'] wäre in diesem Fall "Home"

In einem Dokument oder einer Tabelle ist die Variable so deklariert das sie die Seite aufruft die aufgerufen werden soll.

Und er muss ja unterscheiden zwischen Seiten die existrieren und denen die halt nicht existrieren.
Da die "Inahlte" in einer MySQL Tabelle stecken sollte also vorher eine MySQL abfrage nach den Links stattfinden.
Dann bräuchte man nur noch eine Überprüfung ob die dieser Link in der Tabelle steht oder nicht.

Aber genau bei dieser Überprüfung stocke ich gerade ^^

Edit:
PHP:
if($_GET['page'] != $error->link) {
	header("Location: ?page=404");
}

Damit würde es glaube ich zwar gehen das Problem ist aber sobald ein Stationärer Link aufgerufen wird - also ein Link der in einem Dokument deklariert ist - kann die Anfrage nicht mehr beendet werden und landet in einer Endlosschleife.

Ich könnte das zwar so realisieren das ich jeden Stationären Link in eine MySQL Tabelle packe damit wirklich jeder Link in der abgefragten Liste steht aber das wäre natürlich recht aufwendig und es gibt bestimmt ne elegantere Lösung dafür.
 
Zuletzt bearbeitet:
Erstmal müsste man wissen, was bei dir Seiten sind und wie sie gespeichert sind.

Sind es z.B. nur einfache Template-Dateien, dann ist die Prüfung auf Existenz sehr einfach.
Du hast geschrieben, dass du jeden möglichen Link in eine Tabelle gepackt hast?

Damit würde es glaube ich zwar gehen das Problem ist aber sobald ein Stationärer Link aufgerufen wird - also ein Link der in einem Dokument deklariert ist - kann die Anfrage nicht mehr beendet werden und landet in einer Endlosschleife.
Was ist denn bei dir das Objekt $error?
Und wie rufst du denn sonst Links/URIs auf?
 
Also es gibt 2 verschieden Möglichkeiten Links aufzurufen.

Die erste speichert den Inhalt in einer MySQL Tabelle. Dort wird der Name der Seite, die Variable und der Inhalt gespeichert.

PHP:
$error beinhaltet dann

$daten = mysql_query("SELECT link FROM seiten WHERE link LIKE '$_GET[page]'");
$error = mysql_fetch_object($error);

link ist dabei die Variable.

Die Zweite ist, das Links in einem Array in einem PHP Dokument eingetragen sind.

Ein Beispiel dafür wäre

PHP:
$check['404'] = array(
	'link'	=> '404.php');

Die Home-Seite befindet sich also in einer MySQL Tabelle wobei die Variable "home" heißt.
Es wird also erst eine Verbindung zu MySQL aufgebaut und dort nach der Variable der entsprechende Inhalt ausgegeben.

Die 404-Seite befindet sich wiederum in einem Dokument und nicht in einer MySQL Tabelle.
Die Variable ist "404".
 
Ein Tipp: Alle usereingaben (GET-Array) immer überprüfen! SQL-Injectio Risiko!

Ansonsten einfach prüfen, ob deine MySQL Abfrage einen Wert zurückliefert, wenn nicht dann show404() ;)
 
Wenn du so einen Aufbau hast, dann musst du beide Quellen durchsuchen.

Ansonsten bitte MySQLi oder PDO anstatt der alten MySQL-PHP Erweiterung nutzen.
 
Danke für die Antworten,

nach einigem herumprobieren und umstrukturieren habe ich nun die Lösung gefunden.

PHP:
if(isset($_GET['page'])) {
	[MYSQL ABFRAGE]

	if($_GET['page'] == !(isset($error2->link) or isset($err2->linkname))) {
		header("Location: ?page=404");
	}
}

Für alle dies Interessiert ;)
 
Zurück