Menü_switch_case

NEW_IN_JAVA

Grünschnabel
Hi
kriege folgende Fehlermeldung


Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/share/php')


Möchte eine Menü erstellen habe 2 Menüpunkte und darunter soll der Inhalt angezeigt werden

PHP:
.
.
<body>

<a href="index.php?action=auto" ><font color="#000000">Autos</font></a><br>
<a href="index.php?action=bike"><font color="#000000">Bikes</font></a><br>
.
.
<div id="Layer2">
 <?php
 include($content);
 ?>
 </div>


<?php
switch ($_GET["action"])
{ 
    case auto:
        $content = "Auto.php";
        break;
        
    case bike:
        $content = "Bike.php";
        break;
}
?>
</body>
 
Dein include Pfad ist leer was die Fehlermeldung aussagt! Gib doch einfach mal bevor du include() aufrufst $content aus.

Liegt anscheinden daran das du zuerst includierst bevor du der Variable $content einen Wert per switch-Statement zuweißt. Ausserdem solltest du beim switch-Statement noch ein default: Pfad hinzufügen, und bestimmen was includiert wird wenn nichts per GET übergeben wird. Ausserdem beim case "auto": draus machen:

Hier mal ein Code:
PHP:
 <?php

switch ($_GET["action"])
{ 
    case "auto":
        $content = "Auto.php";
        break;
        
    case "bike":
        $content = "Bike.php";
        break;
    default:
        $content = "Home.php";
}

include($content);
?>

Tausch dch einfach mal beide Sachen um!
 
Zuletzt bearbeitet:
Bitte wirf einen Blick auf die beiden Versionen der switch-case. Die cases bei zer0 sind syntaktisch ok! Deine nicht. Du prüfst anscheinend Konstanten, die es nicht gibt. Normalerweise wird da eine Warning-Nachricht angezeigt. Diese unterbleibt allerdings mit der PHP-Standard-Konfiguration. Du musst das selbst wieder aktivieren. Schreibe dazu an den Anfang des Scriptes

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

Das sollte natürlich nur auf der Test-Umgebung so laufen. Insbesondere der zweite Aufruf macht sich produktiv nicht so gut ;-)
 
Fehlermeldungen:

Notice: Undefined index: action

Notice: Undefined variable: content

Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/share/php')


Ich verstehe aber nicht warum
 
Ok,

erstens, du hast das Problem, das PHP eine Warnung ausgibt, wenn ein Element in einem Array ($_GET ist ein Array) nicht existiert. Das kannst du durch etwas erweiterten PHP-Code aus der Welt schaffen.

Das zweite Problem betrifft den Scope von Variablen. Wenn das kein Begriff ist: Eine Variable ist immer nur innerhalb des Kontextes verfügbar, in dem sie angelegt wurde. Hier ein Beispiel am Code:

PHP:
$a = 4;

function foo()
{
  $b = 5;
}

echo $a;  // << Das funktioniert, $a wurde innerhalb des globalen Kontextes erzeugt und befüllt.
echo $b; // << Das funktioniert nicht, $b wurde innerhalb des Funktions-Kontextes von foo() erzeugt und befüllt und ist im globalen Kontext nicht verfügbar

Wenn du deinen Code also zum funktionieren bewegen willst, musst du ihn etwas umbauen:

PHP:
<?php

// First initialize variable
$content = null;

// Now check the GET parameter for a action
$action  = isset($_GET['action']) ? $_GET['action'] : '';

// Use $action to import the correct page
switch ($action)
{ 
    case "auto":
        $content = "Auto.php";
        break;
        
    case "bike":
        $content = "Bike.php";
        break;

    // If no known action was given
    default:
        $content = "Home.php";
}

// Now content is filled, so we can include page
include($content);
?>
 
Gut die anderen 2 Fehlermeldungen sind weg

Aber er zeigt immer noch die Fehlemeldung:

Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/share/php') on line 45

als line 45 ist include($content);
 
exisitert ".:/usr/share/php"? Heist die Datei wirklich "php", nicht "share.php" oder sonst wie?$
Stimmt der Pfad?
 
exisitert ".:/usr/share/php"? Heist die Datei wirklich "php", nicht "share.php" oder sonst wie?$
Stimmt der Pfad?

. und /usr/share/php sind Pfade in der Konfiguration include_path innerhalb der php.ini. Das heißt, das dort nach Dateien gesucht werden soll, die mittels include() und friends eingebunden werden sollen.

@NEW_IN_JAVA:

Warum versuchst du nicht selbst, herauszufinden, warum das nicht hin haut? Ich habe die Vermutung, du hast keinen "default"-Case in deinem switch, und übergibst eine URL in der kein Parameter "action" definiert ist.

1. Zeig deinen Code
2. Zeige eine Beispiel URL mit der es _nicht_ funktioniert.

Ich kann nur raten, was da schief läuft, wenn du keine näheren Infos gibst.
 
Zurück