Notice: Undefined variable site

Kalito

Erfahrenes Mitglied
Wie der Titel schon sagt, hab ich Probleme mit dieser Fehlermeldung. Dieser tritt aber nur lokal bei Xampp auf. Auf einen Webserver aber nicht. Leider kann ich mir den Fehler auch nicht wirklich erklären

ich habe die url meineDomain/index.php?site=1

dazu folgender code:
PHP:
<?php
if(isset($_GET['site'])){
     switch($_GET['site']){
          case 1: $site = 'eineSeite.php';break;
     }
}
ob_start()
?>
<html>
    <body>
        <?php include($site); ?>
     </body>
</html>
<?php ob-end-flush(); ?>

Es scheint so als wenn $site nicht existieren würde. Selbst ein Var_dump darauf brachte nichts. Woran kann das liegen?

Gruß
 
Das liegt daran das $site nicht initialisiert ist. Die Variable ist nicht sauber deklariert. Bei deinem Code wird die Variable $site erst erstellt, wenn es einen GET-Parameter $_GET['site'] gibt. Wenn dieser nicht existiert, dann gibt es auch kein $site.

Auf dem lokalen Webserver(XAMPP) wird eine Fehlermeldung deshalb angezeigt, weil dieser Standard mäßig so läuft das du Code debugen kannst. Auf einem Produktivsystem wird dafür in ein Log geschrieben.
PHP:
<?php 
$site = "default";
if(isset($_GET['site'])){ 
     switch($_GET['site']){ 
          case 1: $site = 'eineSeite.php';break; 
     } 
} 
ob_start() 
?> 
<html> 
    <body> 
        <?php include($site); ?> 
     </body> 
</html> 
<?php ob-end-flush(); ?>
 
Zuletzt bearbeitet:
OK, danke.

Und wie kann ich das bei Xampp ausschalten? Hab eig keine Lust 40 Scripte umzuschreiben oder ist das mit der initialisierung besser so?
 
Solltest du mal in einer (anderen) Programmiersprache programmieren wollen, wird das mit der Deklaration VOR der Benutzung dort nicht anders sein. Also lern' es lieber gleich.

Das Umschreiben deiner Skripte ist dann wie in der Grundschule 40 mal das große 'G' ordentlich über alle drei Linien schreiben ;)
 
Es gibt Wege das zu umgehen. Bzw. den Apachen von XAMPP so ein zu stellen. Ist aber nicht die saubere Lösung und sollte auch nicht gemacht werden. Admins mögen es nicht, wenn man ihre Logfiles mit so dämlichen Fehlern füllt.

Btw. wie erik brereits sagte, es kann dir in anderen Programmiersprachen (vor allem bei den streng typisierten) einfach mal sowas von um die Ohren fliegen, wenn du dir das falsch angewöhnst.

Also in den sauren Apfel beißen und ändern, ist die Lösung die du wählen solltest.
 
OK,

was aber ich nicht verstehe ist, das ich mit
PHP:
$rid = 'hallo Welt';
echo $rid;
keine Probleme habe aber mit
PHP:
$query = mysql_query("Select ....");
$RID = mysql_fetch_array($query);
$rid = $RID['rid'];
echo $rid;

nicht.

Warum wird das eine initialisiert, aber das andere nicht
 
Im ersten Fall ist alles okay, weil $rid mit einem String initialisiert wird.
Im zweiten Fall hast du ein Problem, weil der Fall eintreten kann, dass es keinen passenden Datensatz in der DB gibt und die mysql_fetch_array()-Funktion dir ein false zurückgibt. Damit würde der Aufruf von $RID['rid'] schon zu einer Warnung führen.

Ähnlich verhält es sich beim Code in deinem ersten Post.
PHP:
<?php 
if(isset($_GET['site'])){ 
     switch($_GET['site']){ 
          case 1: $site = 'eineSeite.php';break; 
     } 
} 
ob_start() 
?> 
<html> 
    <body> 
        <?php include($site); ?> 
     </body> 
</html> 
<?php ob-end-flush(); ?>
Ist $_GET['site'] mal nicht gesetzt, wird auch $site nicht initialisiert. In jedem Fall wird $site aber in der darauf folgenden include-Anweisung genutzt.
 
Zurück