Worin liegt der Fehler?

Hi Jungs,

ich habe soweit meine iframes durch divs ersetzt. Doch irgendwie funktioniert das alles noch nicht so ganz. Zur „Probe“ habe ich mir mal eine viel einfachere „Seite“ gebastelt, die war ebenfalls nicht funktioniert, jedoch überschaubarer ist. Der Code:

[code]HOME
NEWS

<?php function site() { if (empty($_REQUEST['site'])) { $site="home.htm"; } else { $erlaubt = array("home.htm","news.htm"); if (!in_array($site, $erlaubt)) { $site="404.htm"; } } return("sites/".$site); } ?>
<?php include(site()); ?>
[/code] In einem weiteren Ordner ("sites") sind sehr simple HTML-Dateien ("news.htm" und "home.htm"), doch wenn ich es it EasyPHP lokal öffne funktioniert es nicht und bei einer free-hosting-Domain (funpic.de) ebenfalls nicht (obwohl sie PHP unterstützen). Worin liegt der Fehler?

Versuch mal das $_REQUEST durch $_GET zu ersetzten.

if (!in_array($site, $erlaubt)) ← da hast du $_GET vergessen.

[code]HOME
NEWS

<?php function site() { if (empty($_GET['site'])) { $site="home.htm"; } else { $allow = array("home.htm","news.htm"); if (!in_array($site, $allow, $_GET)) { $site="404.htm"; } } return("sites/".$site); } ?>
<?php include(site()); ?>
[/code] Wenn dem wirklich so ist, es funktioniert immer noch nicht :P

oh man^^
Du Knalltüte :smiley:
$_GET ist ein Array… Du brauchst noch den Index… Du hast es doch bei der If Abfrage richtig gemacht, wieso denn nich auch bei der 2. If ?!

Ich blicke durch PHP schlichtweg nicht durch -.-
Ich brauche schließlich auch nur dieses Script, alles andere dürfte in HTML sein … Kannst du mir den Code nicht vorgeben? Ich verstehe nämlich nicht so ganz, was genau ich ändern soll :confused:

Das wäre wirklich nett …

Hi

also die Variablen wie $_GET, $_POST, $_SESSION, $_SERVER etc.

brauchen alle einen Index wie Crack schon sagte …

d.h.

$_GET ist nur vollständig wenn $_GET[‚index‘]

index steht dann halt für einen beliebigen namen :wink:

in deinem fall …

[PHP]
HOME
NEWS

<?php function site() { if (empty($_GET['site'])) { $site="home.htm"; } else { $allow = array("home.htm","news.htm"); if (!in_array($site, $allow, $_GET['site'])) { $site="404.htm"; } } return("sites/".$site); } ?>
<?php include(site()); ?>
[/PHP]

gruss sven

Hmm … ich habe es hier mal hochgeladen, funpic.de unterstützt soweit ich weiß PHP. Dennoch funktioniert es nicht - Er ruft die Seite „news.htm“ schlichtweg nicht auf :confused:

Ich verstehe auch ehrlich gesagt nicht wieso du es so kompliziert machst ^^

Wieso arbeiteste nicht einfach mit einer switch / case ?

[PHP]
HOME
NEWS

<?php
if(is_numeric($_GET['site'])) {

    switch($_GET['site']) {
    
        case 1:
        include("sites/home.html");
        break;
        
        case 2:
        include("sites/news.html");
        break;            
        
        default:
        include("sites/404.html");
        break;
            
    }
    
}else {

    include("sites/404.html");    
    
}

?>

[/PHP]

aber naja egal … so zu deinem source …

[PHP]
HOME
NEWS

<?php function site() { if (empty($_GET['site'])) { $site="home.htm"; } else { $allow = array("home.htm","news.htm"); if (!in_array($_GET['site'], $allow)) { $site="404.htm"; }else { $site = $_GET['site']; } } return("sites/".$site); } ?>
<?php include(site()); ?>
[/PHP]

So müsste es gehen, du hast da nen bisl was falsch gemacht bei der funktion in_array und hinterher bei der variablen zuweisung

gruss sven

Schau dir einfach mal die Beschreibung von in_array() an. Dann siehst du, dass es nur zwei Argumente erwartet. Zuerst das, was gesucht werden soll, und dann das Array.

Also musst du deinen Code entweder so ändern:[PHP]function site()
{
if (empty($_GET[‚site‘]))
{
$site=„home.htm“;
}
else
{
$site = $_GET[‚site‘]; // hinzugefügt
$allow = array(„home.htm“,„news.htm“);
if (!in_array($site, $allow)) // $_GET entfernt
{
$site=„404.htm“;
}
}
return(„sites/“.$site);
} [/PHP]

? habe ich das nicht auch im oberen source von mir gemacht ???

Guck dir mal die Posting-Zeit von mir und dir an. 1 Minute unterschied. Alles klar?

Ah okay i see … sry

Sven, deine Variante des switch / case gefiel mir wirklich gut (wahrscheinlich deswegen, weil dort selbst ich noch durchblickte ;)) - Doch eine Frage habe ich noch: Als „Standard“-div, quasi der „Startseite“, sofern man noch nicht in der Navi etwas angeklickt hat, muss doch auch eine Quelle festgelegt werden! Denn momentan öffnet sich zuerst im div-Bereich immer nur 404.htm, doch sollte die sich nicht nur dann öffnen, falls der Link auf ein nicht vorhandenes Dokument verweist? Wie lege ich das Startdokument fest?

Hi,

dann musste das halt so machen :wink:

[PHP]
HOME
NEWS

<?php
    switch($_GET['site']) {
    
        case 1:
        include("sites/home.html");
        break;
        
        case 2:
        include("sites/news.html");
        break;            
        
        default:
        include("sites/home.html");
        break;
            
    }

?>

[/PHP]

Vielen, vielen Dank, Sven (+ Artemis + alle anderen)
Was lange währt, wird endlich gut :slight_smile:
Alles funktioniert einwandfrei, nun kann ich endlich meine HP ummodellieren und muss mich nicht mehr mit Frames beschäftigen!
Ihr seid klasse, danke sehr!

hehe :wink:

freut mich das wir helfen konnten.

Gruss Sven ;Jump