Felix Riesterer: PHP Weiterleitung

Beitrag lesen

Liebe(r) Jnnbo,

ich sehe da zwei Möglichkeiten, Deinen Code zu vereinfachen.

$host = $_SERVER["HTTP_HOST"];
$uri  = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\");

$extra = "produkte"; [...]

	header("Location: http://$host$uri/$extra");
}

Du willst, dass an eine Adresse mit dem Zusatz "/produkte" weitergeleitet wird, stimmt's? Wozu muss die Zeichenkette "produkte" da in eine eigene Variable? Das geht kürzer! Außerdem sollten GET-Requests keine Daten ändern (es sei denn, Du willst was tracken/protokollieren), daher verwende lieber POST-Requests. Vielleicht willst Du auch das "http" variabel gestalten, damit später auch "https"-Aufrufe möglich sind? Dann ist im Prinzip nur noch der (absolute) Pfad wichtig, der Servername und das Protokoll nicht mehr. Insgesamt benötigst Du wohl das hier:

$uri      = $_SERVER['REQUEST_URI']; // wozu hier eigentlich doppelte Anführungszeichen?

$uri = preg_replace('~(\?|\#).*~', '', $uri); // URL-Parameter und Anker entfernen
$uri = preg_replace('~/*$~', '/produkte', $uri); // auf Produkte-Unterseite zeigen

// REST-kompatible APIs verändern mit GET-Aufrufen keine Daten, daher hier $_POST!
if (array_key_exists('delete', $_POST)) {

    // Löschung vornehmen
    $stmt = $mysqli->prepare("DELETE FROM web_produkte WHERE wk_wkID=?");
    $stmt->bind_param("s",  $_POST['delete']);
    $stmt->execute();
    $stmt->close();

    // weiterleiten
    header("Location: $uri");
}

Zu mir wurde gesagt das "rtrim(dirname(htmlspecialchars" kann komplett weg, dieses ist in einer URL nicht wichtig, habe ich das richtig verstanden? Ich räume gerade mein Code bisschen auf.

Wozu sollten denn Protokoll und Hostname relevant sein? Und auf welchen Pfad willst Du hier reagieren? Es soll doch wohl immer wieder dasselbe PHP-Script aufgerufen werden, welches sich dann im Zweifel den Pfad sowieso in seine Einzelteile zerlegt, um dann passend zu antworten. Also genügt uns doch alles nach dem Domain-Namen, beginnend mit dem Wurzelverzeichnis-Slash.

Außerdem wurde gesagt eine header Weiterleitung benötigt eine absolut URL, ist dieses so richtig, wie ich es oben geschrieben habe?

Lies bitte tatsächlich noch einmal genau nach, was eine absolute URL ist. Du schmeißt da ein paar Sachen in einen Topf, die nicht wirklich zusammen da hinein gehören. Also. Für Dich. Eine klitzekleine Selbst-Test-Aufgabe:

Welche der folgenden Adressen ist eine "absolute" URL?

  • ../pics/img.gif
  • /site/forum/view.php
  • //www.example.org
  • https://example.org

Liebe Grüße,

Felix Riesterer.