• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Worin liegt der Fehler?

Status
Für weitere Antworten geschlossen.

Ay Chiquita

Neues Mitglied
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:
<a href="index.php?site=home.htm">HOME</a>
<a href="index.php?site=news.htm">NEWS</a>

<?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); 
} 
?> 

<div class="Inhalt_div"> 
     <?php include(site()); ?> 
</div>
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?
 
Code:
<a href="index.php?site=home.htm">HOME</a>
<a href="index.php?site=news.htm">NEWS</a>

<?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); 
} 
?> 



<div class="Inhalt_div"> 
     <?php include(site()); ?> 
</div>
Wenn dem wirklich so ist, es funktioniert immer noch nicht :P
 
oh man^^
Du Knalltüte :D
$_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 :/

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 ;)

in deinem fall ...

PHP:
<a href="index.php?site=home.htm">HOME</a>
<a href="index.php?site=news.htm">NEWS</a>

<?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); 
} 
?> 



<div class="Inhalt_div"> 
     <?php include(site()); ?> 
</div>

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 :/
 
Ich verstehe auch ehrlich gesagt nicht wieso du es so kompliziert machst ^^

Wieso arbeiteste nicht einfach mit einer switch / case ?

PHP:
 <a href="index.php?site=1">HOME</a>
<a href="index.php?site=2">NEWS</a>


<div class="Inhalt_div"> 
<?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");    
        
    }

?>
</div>

aber naja egal ... so zu deinem source ...

PHP:
<a href="index.php?site=home.htm">HOME</a>
<a href="index.php?site=news.htm">NEWS</a>

<?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);
}
?>



<div class="Inhalt_div">
     <?php include(site()); ?>
</div>

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); 
}
 
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 ;)

PHP:
 <a href="index.php?site=1">HOME</a>
<a href="index.php?site=2">NEWS</a>


<div class="Inhalt_div"> 
<?php

        switch($_GET['site']) {
        
            case 1:
            include("sites/home.html");
            break;
            
            case 2:
            include("sites/news.html");
            break;            
            
            default:
            include("sites/home.html");
            break;
                
        }
        
 ?>
</div>
 
Vielen, vielen Dank, Sven (+ Artemis + alle anderen)
Was lange währt, wird endlich gut :)
Alles funktioniert einwandfrei, nun kann ich endlich meine HP ummodellieren und muss mich nicht mehr mit Frames beschäftigen!
Ihr seid klasse, danke sehr!
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben