if (isset($_GET['id']) && ($_GET['id'] != ''))
$id = $_GET['id'];
elseif (isset($_SESSION['UserId']) && ($_SESSION['UserId'] != ''))
$id = $_SESSION['UserId'];
else
$id = '';
$abfrage = "SELECT * FROM travelplan WHERE UserId = $id";
Nur nebenbei: Wenn ich ein ganz böser Mensch wäre, würde ich in der Adressleiste meines Browsers '…?id=0 or true' eintippen und darauf spekulieren, dass du (wie ja tatsächlich oben zu sehen) den Parameter id ungefiltert und ungesichert in deinen SQL-Befehl einfügst: 'SELECT * FROM travelplan WHERE UserId = 0 or true'. Und nun lasse dir mal durch den Kopf gehen, was da passiert …
Füge ich nach if/else $id = 105; //als Beispiel ein, funktioniert mein Plan.
Auf der Ausgabeseite lasse ich mir ausserdem auch die UserId aus der Session anzeigen - sie ist da. Und wenn ich im Browser ?id=105 anhänge, funktioniert der Plan nicht.
Die doch eigentlich naheliegendste Frage hast du dir anscheined noch nicht gestellt: Wie sehen denn die an der if-Abfrage beteiligten Variablen aus, konkret: was steht denn in $_GET? Füge vor der if-Zeile 'var_dump($_GET); var_dump($_SESSION);' ein (überprüfe solche Ausgaben immer in der Quellcodeansicht des Browsers, nicht in der normalen Webseitendarstellung!), oder benutze 'phpinfo(INFO_VARIABLES);'. Erst dann hast du einen Überblick darüber, welche Bedinungen gegeben sind.
Bei php.net hab ich nichts gefunden ob man $_GET für bestimmte Seiten beschränken kann, genauso $_SESSION - kann man das machen(?)
Nein. Sie sind lediglich bei uralten PHP-Versionen nicht vorhanden, aber da sie bei dir ja an anderer Stelle funktionieren, wird das nicht die Ursache sein.
Auch die include()-Funktion für die Einbindung der DB-Varianblen habe ich nicht hinbekommen, was ich auch gesetzt habe ('../start.php'
include('../start.php'); sollte eine Datei aus dem darüber gelegenen Verzeichnis einbinden.
oder './start.php'
./ ist das aktuelle Verzeichnis.
Wenn include() die besagte Datei nicht findet, sollte sich im Fehlerprotokoll des Servers eine entsprechende Meldung finden.