anfängerfrage

hallo,

ich bin neuling in php und hätte mal eine frage. ich will eine dynamische site aufbauen, wo auf der linken seite das menue ist und von dort über links auf der rechten seite der jeweilige inhalt angezeigt werden soll.
ich schreibe mal den quelltext rein:

menüe:

kontakt
support

 

$action = array („kontakt“, „support“);

switch ($action)
{
case kontakt:
{ include (kontakt.inc); }
break;
case support:
{ include (support.inc); }
break;
}
?>

nun meine frage. wenn ich auf die links klicke, passiert nichts, ausser dass die site neu aufgebaut wird. der inhalt der 2 dateien ist jeweils ein html-dokument.
wer kann mir einen tip geben, wo es hängt, bzw. wie die funktion richtig sein muss.

viele grüsse
micha

ps. ich habe den apache unter win98 installiert und php wird als cgi ausgeführt.

Hallo Michael,

PHP legt automatisch Variablen an, wenn es Query Strings gibt, also bei dir eine Variable $action, die enthält jetzt den mit action=xyz übergebenen String xyz, also bei dir dann „kontakt“ oder „support“.
Wenn die Seite jetzt aber nicht mit einem Query String namens action aufgerufen wird, gibts die Variable natürlich nicht, damit käme es dann aber zu einer Fehlermeldung sobald du sie im switch abfragen willst, deswegen musst du vor dem switch sicherstellen, dass die Variable $action neu definiert wird, aber halt nur, wenns sie noch nicht gibt. Dazu überprüfst du mit isset($action), ob es sie gibt, wenn nein, definierst du sie neu.
Hab dir deinen Code unten angepasst, das default im switch kommt immer dann zum tragen, wenn etwas anderes als „kontakt“ oder „support“ in der variable $action steht.

Hoffe du du kommst mit meinem gelaber klar, wenn nicht frag einfach noch mal nach.

Gruß
Enno

menüe:

kontakt
support

 

if (!isset($action)) {
$action = „kontakt“;
}

switch ($action)
{
case „kontakt“:
include (‚kontakt.inc‘);
break;
case „support“:
include (‚support.inc‘);
break;
default:
echo „bitte im menue etwas auswaehlen“;
break;
}
?>

hallo enno,

hab vielen dank für deine antwort. nun hab ich doch noch ein paar kleine fragen am rande. ich könnte also in default auch zb die startseite definieren, damit sie immer als erstes, wenn die site aufgerufen wird, geladen wird? und ich habe gelesen, dass bei include(), wenn es in einer if-abfrage steht, es nochmal in geschweifte klammern geschrieben werden muss. das ist dann wohl bei case nicht der fall, wie ich sehe. vielleicht kann ja nochmal jemand was drüber schreiben zur erklärung.

grüsse
michael

ich könnte also in default auch
zb die startseite definieren, damit sie immer als erstes, wenn
die site aufgerufen wird, geladen wird?

genau, könntest so du machen

und ich habe gelesen,
dass bei include(), wenn es in einer if-abfrage steht, es
nochmal in geschweifte klammern geschrieben werden muss. das
ist dann wohl bei case nicht der fall, wie ich sehe.

Mit geschweiften Klammern, fasst man Anweisungen zusammen zu einem Anweisungsblock, bei if ist das wichtig, damit es weis, was es alles machen soll, wenn du dort keine {} setzt, wird nur die erste Anweisunge genommen, nicht mehrere.
Bsp.

if($a==1)
{
echo „a ist gleich eins“;
include(‚seite1.inc‘);
}

hier würde er die echo und die include Anweisung nur ausführen, wenn a==1 ist.

falls man jetzt die {} weglässt, also:

if($a==1)
echo „a ist gleich eins“;
include(‚seite1.inc‘);

dann führt er das echo nur bei a==1 aus, den include befehl aber immer!

Das liegt daran, dass der if Befehl genau eine Anweisung kontrollieren kann, nicht mehr, falls men mehrere möchte, wie oben, muss man diee durch die {} zu einem Block zusammenfassen, dann gelten sie für if als „eine Anweisung“ .

Hoffe das ist jetzt nicht zu chaotisch erklärt? :smile:

switch macht das anders, hier werden alle Anweisungen ab dem entsprechenden case (oder dem default) abgearbeitet, zu beachten ist hier, das switch wirklich alle Anweisungen bearbeitet, bis zum schleißenden }, also auch die von case Fällen, die unter dem eigentlich entsprechendem stehen, damit er das nicht macht, kann man ihn durch die break; Anweisung vorher schon zum Ende springen lassen.

switch ($a)
{
case 1:
echo „1“;
case 2:
echo „2“;
case 3:
echo „3“;
}

Hier würde wenn $a 2 ist „23“ ausgegeben

switch ($a)
{
case 1:
echo „1“;
break;
case 2:
echo „2“;
break;
case 3:
{echo „3“;
break;}
}

Hier gibt er nur die 2 aus, da du ihm mirt dem break; sagst nach dem echo 2; zum Ende des switch zu springen
Fall drei hab ich hier mal in {} gesetzt, muss man eigentlich nicht, geht aber. Nur wer tippt schon gern mehr als nötig :smile:.

Gruß
Enno

hallo enno,

besten dank nochmal für die ausführliche erklärung.

grüsse
michael