Problem mit if(isset()) else

Wie der Titel bereits sagt, ist mein Problem mit if, else.

Mein Code sieht so aus:
[php]<?php if (isset($navig)) { $navig= $_GET['navig']; switch ($navig) { default: include('_navig/home.php'); break; case 'home': include('_navig/home.php'); break; case 'onama': include('_navig/onama.php'); break; case 'servis': include('_navig/servis.php'); break; } } else { include("error.php"); } ?>[/php]Der Code sitmmt ja eigentlich. Doch nun gibt es da ein Problem.
Wenn ich die Datei herauflade, dann kommt man ja auf index.php direkt und nicht index.php?..
Deshalb das default.
Aber wenn ich auf index.php bin, dann kommt folgender Error:

Warning: main() [function.main]: open_basedir restriction in effect. File(/usr/share/pear/error.php) is not within the allowed path(s): (/home/httpd/vhosts/paradoxe.de/subdomains/habboville/httpdocs:/tmp) in /home/httpd/vhosts/paradoxe.de/subdomains/habboville/httpdocs/Exponent/index.php on line 90

Warning: main(error.php) [function.main]: failed to open stream: Operation not permitted in /home/httpd/vhosts/paradoxe.de/subdomains/habboville/httpdocs/Exponent/index.php on line 90

Warning: main() [function.include]: Failed opening ‚error.php‘ for inclusion (include_path=‚.:/usr/share/pear‘) in /home/httpd/vhosts/paradoxe.de/subdomains/habboville/httpdocs/Exponent/index.php on line [B]90

[/B]Und auf Zeile 90 steht:
include(„error.php“);

Doch ich sehe nicht, was ich falsch gemacht habe.

PS: Seid nicht so hart mit mir, bin noch neu in PHP und am lernen. :wink:

Wieso schreibt du nach switch ein else?
Dafür gibt es doch default.
[php]
if(isset($navig)) {
$navig = $_GET[‚nagiv‘];
switch($_GET[‚navig‘]) {
case ‚home‘: include(‚_navig/home.php‘); break;
case ‚onama‘: include(‚_navig/onama.php‘); break;
case ‚servis‘: include(‚_navig/servis.php‘); break;
default: include(‚error.php‘); break;
}
}
[/php]

Dein php script ist einwandfrei nur hat es nicht die recht die error.php einzubinden :wink:
Du solltest überprüfen ob es allen user gestattet ist die datei zu lesen und ob es innerhalb des webserververzeichnisses liegt.

@ TheShadow: Nur das er das dafault noch anderswo verwendet…

Wollt’ ich auch sagen.
Ich möchte das Default als home gebrauchen, dass, wenn man auf index.php zugfreift, dass das default home.php einbindet.

@ Prophet.
Habe nun den CHMOD der error.php Datei auf 777 gesetzt.
Doch es kommt immernoch ein Error.
Guckst du hier:
http://habboville.paradoxe.de/Exponent/index.php
wenn man auf einen link klickt, dann kommt alle snormal.
Aber wenn man auf die index.php datei (ohne ?site=…&navig=…) zugreift, kommen diese zwei Errormeldungen.
Ich habe für die Sub-Navigation und für den Inhalt ein include.

Ich lasse mal die Meldungen mit Google übersetzten.
:smiley:

edit:
Übersetzung half mir nicht viel weiter. :frowning:
Nun ja… Vielleicht kann mir jemand helfen! Hier hab ich den ganzen Code:

[CODE]

Exponent  

E x p o n e n t  -  V i t e z  &  B u s o v a č a

Početna stranicaO namaServis ● ...

  <?php if (isset($navig)) { $navig = $_GET['navig']; switch ($navig) { default: include('_navig/home.php'); break; case 'home': include('_navig/home.php'); break; case 'onama': include('_navig/onama.php'); break; case 'servis': include('_navig/servis.php'); break; } } else { include("error.php"); } ?>
  </td>
  <td height="233" width="10">&nbsp;</td>
  <td height="233" width="575" valign="top">
<?php if (isset($site)) { $site = $_GET['site']; switch ($site) { default: include('_private/home.php'); break; case 'home': include('_private/home.php'); break; case 'onama': include('_private/onama.php'); break; case 'servis': include('_private/servis.php'); break; } } else { include("error.php"); } ?>
  </td>
  </tr>
<tr>
  <td height="1" width="1" background="images/line.png">
  <img border="0" src="images/line.png" width="1" height="1"></td>
  <td height="1" width="164" background="images/line.png" colspan="2">
  <img border="0" src="images/line.png" width="1" height="1"></td>
  <td height="1" width="1" background="images/line.png">
  <img border="0" src="images/line.png" width="1" height="1"></td>
  <td height="1" width="586" background="images/line.png" colspan="2">
  <img border="0" src="images/line.png" width="1" height="1"></td>
  <td height="1" width="1" background="images/line.png">
  <img border="0" src="images/line.png" width="1" height="1"></td>
</tr>

2007 - 2008 © by Exponent

[/CODE]

Ich finde das aber irgendwie komisch, eine defaultseite und eine else Seite.
Na ja, jeder, wie er es mag. : )

Das einzige was ich mir nochvorstellen könnte ist das die error.php außerhalb der für den server zuläsigen ordners liegt. Wie ist den die ordner struktur aufgebaut?

Ist der ordner vll nicht für schreibzugriffe anderer zugelassen?

UUps!
Thx Prophet.
Die Errormeldung sollte _navig/error.php sein, statt error.php
Leichtsinningkeitsfehler! :slight_smile:

Doch habe ich einen weiteren Fehler entdeckt.
Wenn ich die Seite index.php aufrufe, dann verzweigt es sich zum else und es ruft nicht die default-seite auf, aber eben den else-Weg, die Fehlermeldung.
Schaut es euch an:
http://habboville.paradoxe.de/Exponent/index.php

Hier nochmal der Code, dass ihr euch das scrollen spart:
[PHP]<?php if (isset($navig)) { $navig = $_GET['navig']; switch ($navig) { default: include('_navig/home.php'); break; case 'home': include('_navig/home.php'); break; case 'onama': include('_navig/onama.php'); break; case 'servis': include('_navig/servis.php'); break; } } else { include("_navig/error.php"); } ?>[/PHP]

[PHP]if (isset($navig))
{
$navig = $_GET[‚navig‘];[/PHP]

Weil du $navig erst nach dem if setzt. Das heißt es exsistiert nie davor!

Habe den Code so umgeschrieben:
[PHP]<?php $navig = $_GET['navig']; if (isset($navig)) { switch ($navig) { default: include('_navig/home.php'); break; case 'home': include('_navig/home.php'); break; case 'onama': include('_navig/onama.php'); break; case 'servis': include('_navig/servis.php'); break; } } else { include("_navig/error.php"); } ?>
[/PHP]

Doch es kommt wieder das gleiche.
PS: Falls ich es falsch umgesetzt habe, dann klär mich auf. Bi noch nicht so gut in PHP. :wink:

So sollte es eigentlich funktionieren. Was steht in $navig drinne? kannst du mal diese zeile unter der zuweisung einsetzten und posten was raukommt?
[PHP]var_dump($navig);[/PHP]

Tut mir Leid Prophet, aber ich weiss nicht wohin mit diesem Befehl (var_dump($navig):wink:
Ich weiss nicht was dieser Befehl machen soll.

Könntest du mit meinen Code so schreiben, dass der Code drin ist?

Füge ihn so ein:
[PHP]<?php
$navig = $_GET[‚navig‘];
var_dump($navig);
if (isset($navig))[/PHP]

Das kommt dabei raus:
http://habboville.paradoxe.de/Exponent/index.php

NULL kommt auf einmal. !?!

Ah das habe ich befürchtet. Das $_GET[‚navig‘] nicht gesetzt ist steht in $navig NULL. Das ist der einzige variablen wert den isset ebenfalls mit einem false abtut da das der standard wert für variablen ist.

Mach es mal folgendermaßen:
[PHP]if(isset($_GET[‚navig‘])) // Wenn der Parameter gesetzt wurde…
$navig = $_GET[‚navig‘]; // übernehmen
else // Wenn nicht…
$navig = ‚home‘; // standard wert setzten.

switch ($navig) // Seiten einbinden.
{
case ‚home‘: include(‚_navig/home.php‘); break;
case ‚onama‘: include(‚_navig/onama.php‘); break;
case ‚servis‘: include(‚_navig/servis.php‘); break;
default: include(‚_navig/error.php‘); break; // Bei ungültiger seitenangabe in $navig error anzeigen.
}[/PHP]

Danke!
Jetzt funktionierts!
Mann hätte ich dein Wissen über PHP… puh das wäre der Hammer! :wink:

Eines Tages weiss ich vieleicht auch mal so viel!

Ich denke dieses Thread kann geschlossen werden. Fall hat sich erledigt.