[PHP] (include,switch) frage was an meinem code nicht stimmt!

neuz8

Well-known member
ID: 232608
L
10 Juli 2006
1.491
78
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>Seitenname - <?php echo ucfirst($_GET['site']); ?></title>
</head>
<body>
<ul id="navi">
<li><a href="index.php?site=home">Home</a></li>
<li><a href="index.php?site=projekte">Projekte</a></li>
</ul>
<div id="content">
<?php
switch ($_GET['site']) {
          case "home":
                  include("1.php"); 
                  break;
          case "projekte":
                  include("2.php"); 
                  break;
};
?>
</div>
</body>
</html>

1/2.php liegt im gleichen ordner und der inhalt ist

PHP:
    <table>
     <td>test</td>
      </tr>
    </table>

passiert aber nix!

also meine frage was stimmt ned?
hab mir das so mit diversen tuts zusammengeschustert...

also ein "case "";" hat auch nix geholfen!

bei klick auf die 2 menupunkte wechstelt zwar der titel in das angegebene jedoch wird der inhalt von 1.php ud 2.php nicht einbezogen...

grummel...

ich verlange keinen kompletten code wäre besser wenn man mir erklärt was falsch läuft dabei...möchte lernen!
 
Lerne erstmal Folgendes: Wenn ein Fehler da is, solltest du diesen erstmal lokalisieren, bevor du ihn beheben kannst. Stichwort: Debugging
PHP:
echo "site = ".$_GET['site']; // <- Debugging
switch ($_GET['site']) { 
          case "home": 
                  echo "Include: 1"; // <- Debugging
                  include("1.php");  
                  break; 
          case "projekte": 
                  echo "Include: 2"; // <- Debugging
                  include("2.php");  
                  break; 
          default: // <- Debugging
                  echo "MIST !!!!";
                  break;
};
Ist das alles korrekt, musst du gucken, ob die inkludierten Scripts wirklich eine Ausgabe machen.

(Nebenbei sei erwähnt, dass du include() völlig entartet benutzst :sick: Nimm ein Template-System)
 
hi,
danke für die schnelle antwort und dien hilfe!

also das echo wird immer korrekt ausgegeben und site zeigt auch immer das richtige an aber das tats ja im titel auch schon war also soweit ok

es ist doch richtig dass

include("1.php");

die datei 1.php im gleichen verzeichnis aufruft...

komme nicht auf den trichter...

wenn "mist" ausgegeben wird bei default
und echo auch bei den menupunkten

dann kanns doch nur an den dateien liegen welche includet werden oder?

und erklär mir bitte warum das nun völlig entartet ist was ich tue?(bzw vesuche?)
 
es ist doch richtig dass

include("1.php");

die datei 1.php im gleichen verzeichnis aufruft...

komme nicht auf den trichter...
Sollte der Parser die Datei nicht finden, dann gäbe es auf dem Bildschirm eine Fehlermeldung.


dann kanns doch nur an den dateien liegen welche includet werden oder?

und erklär mir bitte warum das nun völlig entartet ist was ich tue?(bzw vesuche?)
Ja, an denen wird es auch liegen. Hast du den Code in eine Variable gepackt? Wenn ja, machst du dann auch ein echo?
 
ja genau das mit der fehlermeldung habe ich mir auch überlegt!
nein das wird nix großes muss nicht in ne variable
https://wohn - wert.com/temp/ (vorsicht leerzeichen)

da kanste dirs ansehen wies mit den debuger code ausschaut!

ist also echt nix großes ich kennt mich nicht damit aus ist also das erste mal aber frames verwenden...naja

ich möchte ja nicht viel nur ein menu dass hald content irgendwo reinlädt...also im grunde ganz einfach!

ich habs jetzt auch mit html dateien zum laden probiert...geht auch ned...würde gerne wissen worans liegt!... am server kanns nicht liegen oder? php5 ist dabei!

wäre echt dankbar für hilfe! (hilfe können auch tipps sein...lernen möcht ich ja auch was)
 
haste mal ne phpinfo(); oder mach mal ein
PHP:
include('gibtsnichtwegen.ist.nicht');
da müsste defintiv ne fehlermeldung kommen... ansonsten sind die auf dem server unterdrückt.
 
fahlermeldung kam nicht...somit ich erstaml gesachaut...wird ja geloggt sowat...

und jep da steht dann auch die fehlermeldung...wie stelle ich dass um?
 
also leutchen!

warum sagt mir keiner dass man die fehlermeldung per .htaccess einschalten kann!

nun bekomme ich folgenden fehler:

Warning: main() [function.main]: open_basedir restriction in effect. File(/usr/share/php5/1.php) is not within the allowed path(s): (/home/www/web144/) in /home/www/web144/web/index.php on line 15

Warning: main(1.php) [function.main]: failed to open stream: Operation not permitted in /home/www/web144/web/index.php on line 15

Warning: main() [function.include]: Failed opening '1.php' for inclusion (include_path='/usr/share/php5') in /home/www/web144/web/index.php on line 15

also ich kenne mich ja nicht wirklich aus deshalb nicht steinigen:
ich interpretiere das ungefähr...naja vllt und keine ahnung so:
-zu includete dateien müssen in einen separaten ordner?...
-es ist nicht erlaubt zu includen
-fehler beim öffnen (wegen fehler 1,2) nochmal zusammengefasst dass es dramatischer aussieht..

nun habe ich bissel rumgelesen vonwegen php.ini oder ispconfig... keine ahnung gehe ich in die richtige richtung?
 
haha...funktioniert!

auch wenn ich trotzdem gerne paar infos von euch hätte!

anscheinend ist ein verzeichnis festgelegt zum includen in dem moment wenn man versucht "x.php" zu includen und sobald man jedoch "./x.php" includen möchte gehts... naja mir wurst in welchem verzeichnis die includes sind aber infos von euch wären cool!

danke und vonmiraus close oder hald ned vllt hilfts jemand anderem
 
php.net schrieb:
include_path string Specifies a list of directories where the require(), include() and fopen_with_path() functions look for files. The format is like the system's PATH environment variable: a list of directories separated with a colon in Unix or semicolon in Windows.

https://de2.php.net/manual/en/ini.core.php#ini.include-path

Das dürfte das sein, was du suchst ... ;)
Einfach per php.ini oder set_include_path() auf "." setzen, /usr/share/php liegt ja sowieso nicht in deinem open_basedir ...

Ach und noch was allgemeines - im Programmiererforum werden keine Threads geschlossen ;)
 
warum auch immer habe ich nun ein neues problemchen!

also ich dachte mir jeder verwendet "site" oder "page" oder sowas... nun habe ich einfach site in welt ändern wollen und es kam folgende fehlermeldung:

Notice: Undefined index: welt in /home/www/web144/web/index.php on line 20

in linie 20 steht im code folgendes:

<?php
switch ($_GET['welt']) {

case "home":
include("./1.php");
break;
case "projekte":
include("./2.php");
break;
default:
include ("./1.html");
break;
};
?>

was hat es denn damit aufsich?
das zurückändern auf site hat den fehler auch nicht verschwinden lassen...(oder ich war unaufmerksam und es war andauernd da...naja)

wenn ichs auf nem anderen server ausprobiere gehts auch ohne den fehler... ich nehme an dass kann man auch per htaccess abstellen! jedoch habe ich auch gelesen "sollte man nicht dann gewöhnt man sich saubereres programmieren an" also?
 
Das ist nur eine Notiz, die zu sauberem Code führen soll, auch wenn das hier nicht wirklich viel hilft, das ist nicht der Sinn von Include, und auch sonst ... :roll:
Template-System benutzen, unbedingt, das wäre schonmal ein Anfang!

Zur Notiz:
Ändere
PHP:
switch ($_GET['welt']) {
zu
PHP:
if(!isset($_GET['welt']))
  $page = "home";
else
  $page = $_GET['welt'];

switch ($page) {
 
Zuletzt bearbeitet:
ok so gehts!
1. kann ich nun den default unter switch weglassen?

2. gib mal nen link mit lesestoff wegen template...weiß grad nix mit anzufangen bin hald noob aber möchte unbedingt lernen!
 
Ich würde immer ein default lassen - um eine "Seite-nicht-gefunden"-Nachricht anzuzeigen ;)

Das bekannteste Template-System ist Smarty, ich schreibe meine Template-Engines aber samt Compiler immer selber - ist für Anfänger aber nicht zu empfehlen ;)
Versuch dich also erstmal in Smarty, dann kannst du weitersehen.