PHP - if, switch, break - Frage

Diskutiere PHP - if, switch, break - Frage im Computer Checkpoint Forum im Bereich Public Section; Hallo, hab wieder ein neues Prob, die restlichen hab ich ja großartig gemeistert :D Hier mal der Code, die Beschreibung darunter:...

  1. #1 Ruffneck, 04.06.2005
    Ruffneck

    Ruffneck Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    824
    Zustimmungen:
    0
    Auto:
    Mazda 323 GT-Turbo DOHC 16V
    KFZ-Kennzeichen:
    Hallo,

    hab wieder ein neues Prob, die restlichen hab ich ja großartig gemeistert :D
    Hier mal der Code, die Beschreibung darunter:
    [php:1:c6890123dd]// Standartsprache festlegen.
    $lang=$_GET['lang'];
    if (empty($lang))
    {
    $lang='german';
    }

    switch($lang)
    {
    case 'german': include('include/language_ger.php'); break;
    case 'english': include('include/language_eng.php'); break;
    case 'norwegian': include('include/language_nor.php'); break;
    }[/php:1:c6890123dd]

    Habe jetzt eine Funktion hinzugefügt wo man zwischen Deutsch, Englisch, Norwegisch wählen kann. Die Auswahl erfolgt über 3 Flaggen und die Übersetzung des Menüs funzt einwandfrei, aber!!! Wenn man auf einen Link klickt wird immer wieder die Standartsprache eingestellt. Definiert ist das in der ersten if-Anweisung. Bspw. kann man hier auch die Browserdaten abfragen und dann automatisch die entsprechende Sprache setzen. Aber das kann ich später machen.
    Mein Problem ist, ich kann der Variablen $lang nicht sagen das sie den Wert "default" (=Voreinstellung Deutsch) überschreiben soll wenn ich auf english oder norsk klicke. $lang muss dann $lang='english' bspw heißen, nur bekomme ich diese Information nicht aus dem case-break Block raus. Innerhalb dieses Blockes kann ich den Inhalt von $lang ermitteln, aber ich kann ihn nicht aus dem Block rausholen.
    Somit könnte ich nämlich sagen das $lang erst wieder beim nächsten Flaggenklick geändert werden darf.

    Ist bissel kompliziert erklärt, aber das lebende Beispiel könnt ihr unter www.marsutropia.com probieren.

    Gr33tinx, Ruffneck
     
  2. #2 Tha Rob, 05.06.2005
    Tha Rob

    Tha Rob Mazda-Forum Profi

    Dabei seit:
    24.03.2004
    Beiträge:
    748
    Zustimmungen:
    0
    Auto:
    '91er Mazda 626 GD 2.0i, 290.000km
    KFZ-Kennzeichen:
    Zweitwagen:
    '02er Mitsu Galant 2.5 V6 Kombi Elegance, 135TKM
    Ich vermute jetzt mal ins Blaue hinein, daß das Skript in dem Du die Sprache auswählst (über besagte Links), den entsprechenden Variablenwert nicht an das Skript übergibt, von dem Du hier den Ausschnitt gepostet hast. Das würde erklären warum Du immer "german" bekommst: Weil entweder die Variable leer bleibt bzw. bei mehrmaligem Durchlauf ihren Standardwert behält. An dem Case-Block kann ich auch keine Fehler erkennen. Versuche vielleicht mal das Vorhandensein des Variablen-Wertes mit ISSET abzufragen: if(isset($lang)) usw.
     
  3. #3 Ruffneck, 05.06.2005
    Ruffneck

    Ruffneck Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    824
    Zustimmungen:
    0
    Auto:
    Mazda 323 GT-Turbo DOHC 16V
    KFZ-Kennzeichen:
    Das hab ich schon probiert.
    So an der Stelle echo isset($lang) wird der Inhalt ausgegeben.
    [php:1:b7f3ebbb1c]// Standartsprache festlegen.
    $lang=$_GET['lang'];
    if (empty($lang))
    {
    $lang='german';
    }

    switch($lang)
    {
    case 'german': include('include/language_ger.php'); echo isset($lang); break;
    case 'english': include('include/language_eng.php'); echo isset($lang); break;
    case 'norwegian': include('include/language_nor.php'); echo isset($lang); break;
    } [/php:1:b7f3ebbb1c]

    Aber versuche ich es ausserhalb des break zu ausszugeben, bleibt $lang leer.
    [php:1:b7f3ebbb1c]
    ]// Standartsprache festlegen.
    $lang=$_GET['lang'];
    if (empty($lang))
    {
    $lang='german';
    }

    switch($lang)
    {
    case 'german': include('include/language_ger.php'); break;
    case 'english': include('include/language_eng.php'); break;
    case 'norwegian': include('include/language_nor.php'); break;

    echo isset($lang); //Hier kommt nix!!!
    }[/php:1:b7f3ebbb1c]

    Gr33tinx, Ruffneck
     
  4. #4 wirthensohn, 05.06.2005
    wirthensohn

    wirthensohn Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    3.802
    Zustimmungen:
    2
    Das kann so nicht gehen. Das "break" besagt ja, dass das Switch verlassen wird, wenn die jeweilige Bedingung erfüllt ist. Bei Deiner Konstruktion muss ja irgendeiner der drei Bedingungen erfüllt sein und durch die breaks wird direkt das Switch verlassen und das echo niemals ausgeführt. Du musst das echo ausserhalb des Switch, also darunter einbauen.

    Gruß,
    Christian
     
  5. #5 Ruffneck, 05.06.2005
    Ruffneck

    Ruffneck Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    824
    Zustimmungen:
    0
    Auto:
    Mazda 323 GT-Turbo DOHC 16V
    KFZ-Kennzeichen:
    Ich muss mal den fast kompletten Code posten. Denn das Prob ist glaub ich nicht im switch-Bereich.

    Dieses $lang wird nur einmal an die Menüstruktur weiter geleitet und nur dann wenn ich auf eine der Flaggen drücke, aber sobald ich auf einen Menülink (bspw. '.$neuigkeiten.'
    ) klicke dann wird $lang neugeladen aber mit Standart Deutsch.
    Also das Prob ist eigentlich das die eigentlichen Menülinks sich die letzte gewählte Sprache nicht merken und immer den Standartwert von $lang holen und ich nicht weiß wie ich die Infos aus der switch-break-Anweisung rausbekomme. Vielleicht mit einem Array???

    [php:1:38d1147db4]
    // Standartsprache festlegen
    $lang=$_GET['lang'];
    if (empty($lang))
    {
    $lang='german';
    }

    switch($lang)
    {
    case 'german': include('include/language_ger.php'); $lang='german'; break;
    case 'english': include('include/language_eng.php'); $lang='english'; break;
    case 'norwegian': include('include/language_nor.php'); $lang='norwegian'; break;
    }

    echo '<div id="langchg">'.$langd.'
    <a href="index.php?lang=german">[​IMG]
    <a href="index.php?lang=english">[​IMG]
    <a href="index.php?lang=norwegian">[​IMG]
    </div>
    <div id="menulnk">
    '.$neuigkeiten.'

    '.$gal_grafik.'

    '.$gal_norw.'

    '.$gal_mazda.'

    '.$animation.'

    '.$textur.'

    '.$tutorial.'

    '.$aboutme.'

    '.$guestbook.'

    '.$links.'

    '.$imp.'
    </div>
    </div>
    <div id="info">
    <a href="http://www.webcounter.goweb.de">
    [​IMG]</a>

    ';
    include('usercnt.php');
    echo '<p id="webminfo">
    '.$created.'20.Dez. 2001

    '.$updated.'04.Juni 2005

    '.$res_info.'1024x768x32Bit


    Ruffneck
    Webmaster

    © 2001-2005
    </p>
    </div>';[/php:1:38d1147db4]

    Gr33tinx, Ruffneck
     
  6. #6 wirthensohn, 06.06.2005
    wirthensohn

    wirthensohn Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    3.802
    Zustimmungen:
    2
    Statt kompliziert so...

    [php:1:bb74308e4e]
    if (empty($lang))
    {
    $lang='german';
    }

    switch($lang)
    {
    case 'german': include('include/language_ger.php'); $lang='german'; break;
    case 'english': include('include/language_eng.php'); $lang='english'; break;
    case 'norwegian': include('include/language_nor.php'); $lang='norwegian'; break;
    }
    [/php:1:bb74308e4e]

    ...probier es doch einfach mal so...

    [php:1:bb74308e4e]
    switch($lang)
    {
    case 'english': include('include/language_eng.php'); break;
    case 'norwegian': include('include/language_nor.php'); break;
    default: include('include/language_ger.php'); $lang='german'; break;
    }
    [/php:1:bb74308e4e]

    ...ist irgendwie viel kürzer und sieht eleganter aus ;)

    Wenn ich Dich nun richtig verstehe, soll die einmal ausgewählte Sprache auch nach der Auswahl eines Menüpunkts "eingestellt" bleiben?!

    Das geht aber so einfach nicht. Wenn Du einen Menüpunkt anklickst, wird die index.php neu geladen, die Variable $lang ist dann aber wieder leer und somit kriegst Du wieder deutsch. Du musst entweder mit Sessions oder Cookies arbeiten, um diese Info zu speichern und weiter zu geben, oder die Info halt mit jedem Link einzeln weiterreichen:

    [php:1:bb74308e4e]
    <div id="menulnk">
    '.$neuigkeiten.'

    '.$gal_grafik.'

    '.$gal_norw.'

    '.$gal_mazda.'

    '.$animation.'

    '.$textur.'

    '.$tutorial.'

    '.$aboutme.'

    '.$guestbook.'

    '.$links.'

    '.$imp.'
    </div>
    </div>
    [/php:1:bb74308e4e]

    Gruß,
    Christian
     
  7. #7 Ruffneck, 06.06.2005
    Ruffneck

    Ruffneck Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    824
    Zustimmungen:
    0
    Auto:
    Mazda 323 GT-Turbo DOHC 16V
    KFZ-Kennzeichen:
    Jaha du hast es richtig verstanden!!!! :lol:

    Also dein erstes Bsp. ist gut, hab das mal geändert aber das mit dem weiterleiten mit <? print $lang ?> das geht leider nicht. So nun mit Cookies ist nicht so mein Ding, was ist wenn der User keine akzeptiert? Bleibt ja nur noch Sessions aber das hab ich noch nicht gemacht.

    Gr33tinx, Ruffneck
     
  8. #8 wirthensohn, 06.06.2005
    wirthensohn

    wirthensohn Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    3.802
    Zustimmungen:
    2
    Inwiefern geht das nicht? Was passiert, oder auch nicht?

    Gruß,
    Christian
     
  9. #9 Tha Rob, 06.06.2005
    Tha Rob

    Tha Rob Mazda-Forum Profi

    Dabei seit:
    24.03.2004
    Beiträge:
    748
    Zustimmungen:
    0
    Auto:
    '91er Mazda 626 GD 2.0i, 290.000km
    KFZ-Kennzeichen:
    Zweitwagen:
    '02er Mitsu Galant 2.5 V6 Kombi Elegance, 135TKM
    Wenn Du keine Cookies schreiben willst, dann kannst Du den aktuellen Wert ja in eine temporäre Datei schreiben und aus dieser lesen.
     
  10. #10 Ruffneck, 07.06.2005
    Ruffneck

    Ruffneck Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    824
    Zustimmungen:
    0
    Auto:
    Mazda 323 GT-Turbo DOHC 16V
    KFZ-Kennzeichen:
    Hallo,

    @ThaRob: hab ich schon probiert, aber das Problem ist das $lang den Wert bei jedem neuladen der Site nicht übernimmt bzw. sich nicht merkt. Die Site wird ja nun immer neugeladen sobald man einen Link anklickt.

    @Wirthensohn: Na da passiert genauso das gleiche wie vorher und die Anweisung wird ignoriert :(

    So dann jab ich mal probiert die menülinks in den 3 case zu setzen. Da funzt die ganze sache aber die geschwindigkeit läßt zu wünschen übrig.
    und so wie's überall im web steht geht's aber komischer weise nicht :(

    Gr33tinx, Ruffneck
     
  11. #11 Ruffneck, 25.06.2005
    Ruffneck

    Ruffneck Mazda-Forum Profi

    Dabei seit:
    21.03.2004
    Beiträge:
    824
    Zustimmungen:
    0
    Auto:
    Mazda 323 GT-Turbo DOHC 16V
    KFZ-Kennzeichen:
    Hallo ich mal wieder. Hab das obrige Prob gelöst. War ein kleiner dummer Schreibfehler :)

    So aber nunmal wieder ein anderes was dasselbige Problem eigentlich fast ist.
    [php:1:f7200e35ba]<?php
    //gallerie.php
    error_reporting(E_ALL | E_NOTICE); //Fehlermeldungen einschalten
    $categorie=""; //Variable definieren
    if (isset($_GET['categorie'])) // überprüfen ob Variable existiert...
    {
    $categorie=$_GET['categorie']; //...und dann informationen via $_Get holen
    }

    /* HTML-Code ausgeben */
    echo '<div id="album">
    <p class="tableh1">'.$gal.' 3</p>
    <a href="index.php?categorie=terragen&lang='.$lang.'">
    [​IMG]
    </a>
    <a href="index.php?categorie=vue&lang='.$lang.'">
    [​IMG]
    </a>
    <a href="index.php?categorie=smax&lang='.$lang.'">
    [​IMG]
    </a>';

    // In den obrigen Links werden die Werte "terragen", "vue", "smax" nicht
    // in die Variable $categories gespeichert und somit funktioniert diese
    // switch-Anweisung nicht!
    switch($categorie)
    {
    case 'terragen': show_terragen(); break;
    case 'vue': show_vue(); break;
    case 'smax': show_smax(); break;
    default: echo'<h1>'.$alb.'</h1>'; break;
    }
    echo' </div>';

    function show_terragen()
    {
    echo '<div id="cat"><h1>Terragen-Album</h1></div>';
    }

    function show_vue()
    {
    echo '<div id="cat"><h1>Vue-Album</h1></div>';
    }

    function show_smax()
    {
    echo '<div id="cat"><h1>Smax-Album</h1></div>';
    }
    ?>[/php:1:f7200e35ba]

    Der Code ist eigentlich übersichtlich und ich habe das Wichtigste kommentiert.
    Nochmal das Problem. Wenn ich auf einen der 3 Links klicke: Terragen, Vue d'Esprit, 3DS Max dann passiert gar nix weil die Werte nicht an $categories übergeben werden.
    Aber füge ich hinter der isset-Anweisung und vor dem HTML-Code
    diese Anweisung ein:
    [php:1:f7200e35ba]if (empty($categories))
    {
    $categories='terragen';
    } [/php:1:f7200e35ba]

    Dann springt der Server komischerweise zur switch-Anweisung und leitet an die Terragenfunktion weiter. So funztes aber nicht über den Links. Aber ich habe das doch bei den anderen Sachen auch so gemacht. Irgendwie ist hier der Wurm drinnen.

    Gr33tinx, Ruffneck
     
Thema:

PHP - if, switch, break - Frage

Die Seite wird geladen...

PHP - if, switch, break - Frage - Ähnliche Themen

  1. Frage: Geruch nach Abschalten des A/C Kompressors / Klimaanlage normal?

    Frage: Geruch nach Abschalten des A/C Kompressors / Klimaanlage normal?: Hi, mal ne Frage zur Klimaanlage: Ich schalte meine Klimaanlage sehr selten ein, jedoch regelmässig ein- oder zwei Mal im Monat damit nix anbackt....
  2. Neuer mazda 3 bn paar fragen.

    Neuer mazda 3 bn paar fragen.: Hallo. Ich steh kurz vor dem kauf des neuen 3 bn. Und hätte paar fragen kann das sein das der 1.5 motor den gleichen kraftstoffverbrauch hat wie...
  3. Frage zum Navi

    Frage zum Navi: Hallo, ich sage hier mal ganz schüchtern als Mazda Neuling guten Morgen. Seit einem Monat und 1000km bin ich aus dem Lager eines anderen...
  4. Mazda2 (DJ) Zubehör Fragen

    Zubehör Fragen: Bei Ebay habe ich gesehen das Mazda anstatt der Stabantenne eine original Haifischflossenantene anbietet. 1. Weiss jemand was in der Stabantenne...
  5. Neuling im Mazdaforum mit 2 kleinen Fragen

    Neuling im Mazdaforum mit 2 kleinen Fragen: Hallo liebe Mazda-Fans! Nach 8 Jahren BMW, hab ich mich nun "getraut" und mir meinen ersten Mazda bestellt (Mazda 3 BN Sportsline, Leder und mit...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden