Referer zwar gleich aber falsche Funktionsaussgabe

Watusimann

Erfahrenes Mitglied
Hallo
Habe div. Links die erlaubt sind und möchte nicht wie im script ...
$bla or $bla1 or $bla2 .... schreiben, da es ja erweiterbar sein sollte - natürlich ohne wenig aufwand ;)
nun bastel ich schon seit locker 2 std. und irgendwie zeigt er mir zwar die richtigen links an - aber macht leider die else-ausgabe.
was mach ich denn nur falsch?
PHP:
<?
$sta[0]['ref'] = "http://localhost/xampp/privat/";
$sta[1]['ref'] = "http://localhost/xampp/privat/referer/weiterleitung.html";
$sta[2]['ref'] = "http://localhost/xampp/privat/referer/ref2/weiterleitung.html";

foreach ($sta as $ref){
echo $ref['ref'].' <br>';
}
//if ($_SERVER["HTTP_REFERER"] == ($sta[0]['ref'] or $sta[1]['ref'] or $sta[2]['ref'])){ <<<----- so gehts, aber ist zu aufwendig

if ($_SERVER["HTTP_REFERER"] == $ref['ref']){
   echo "<br><br>Welcome <br>";
   echo $_SERVER["HTTP_REFERER"]; 
} else {
echo "<br><br>schade <br>";
echo $_SERVER["HTTP_REFERER"];
}
?>
 
Also sehr verständlich ist der Sachverhalt nicht formuliert. Könntest du es diesbezüglich vielleicht noch einmal versuchen (falls folgende Zeilen nicht zur Lösung beitragen)? Danke.

Du hast also ein Array, in dem sich die "erlaubten" Referer befinden und willst nun überprüfen, ob der Referer des aktuellen Users mit einem im Array übereinstimmt, richtig?
Dann würde ich das viel einfacher lösen:
PHP:
<?php
$referers[] = "http://localhost/xampp/privat/";
$referers[] = "http://localhost/xampp/privat/referer/weiterleitung.html"; 
$referers[] = "http://localhost/xampp/privat/referer/ref2/weiterleitung.html"; 

if (!in_array($_SERVER['HTTP_REFERER'], $referers)) {
    echo 'Zugriff verweigert!';
    exit;
}
//sonstige ANweisungen, z.B. Willkommensmeldung
?>

Wenn du statt meines eindimensionalen doch ein mehrdimensionales Array benötigst, dann strukturiere das Ganze einfach nach deinen WÜnschen um.

Ein Fehler in deinem Script lag darin, dass du zwar mit einer FOREACH-Schleife das Array durchlaufen lassen, allerdings erst außerhalb der Schleife die Abfrage durchgeführt hast. So war $_SERVER['HTTP_REFERER'] nie == $ref['ref'], weil $ref nicht definiert ist.
 
mmmm.gif
Das sieht in der Tat einfacher gestrickt aus.
Wenn ich das richtig verstanden habe, hätte ich die komplette if Anweisung in den Block mit reinschreiben müssen ? *seufz*
Ich hatte meine $var als eindimensional gestaltet, doch das Script hat permanent Array angezeigt. Vielen Dank auf jedenfall für die verkürzte, einfachere Variante und für die Fehleraufklärung :)

nice Weekend
 
Zurück