Steffen: Problem mit switch();

Hi,

ich übergebe mit nem formular (option) ein Wert

im head:
<script type="text/javascript">
<!--
function CheckAuswahl() {
 return true;
}
//-->
</script>

im body:
<form name="Testform" onSubmit="return CheckAuswahl()" action="">
<select name="npc" size="1">
 <option>Aasgeier</option>
 <option>Doppelkoepfiger Riesenskorpion</option>
 <option>Giftgrabl</option>
<input type="submit" value="Auswählen!">
</form>

Nun mache ich:

switch($npc){

case Aasgeier: echo "10";
 break;
case Doppelkoepfiger+Riesenskorpion: echo "100";
 break;
case Giftgrabl: echo "2";
 break;
}

das Problem ist, die Werte die ich übergeb haben ein Leerzeichen. In der Adressleiste sind die Leerzeichen durch ein + ersetzt worden.

Giftgrabl bekomm nun leider nicht echo "2" sondern auch echo "100"

wie kann ich das Problem lösen?

  1. Hi,

    case Aasgeier: echo "10";
    case Doppelkoepfiger+Riesenskorpion: echo "100";
    case Giftgrabl: echo "2";

    Hast Du die PHP-Konstanten Aasgeier, Doppelkoepfiger, Giftgrabl und Riesenskorpion irgendwo definiert?
    Mit welchen Werten? Was ist die Summe von Riesenskorpion und Doppelkoepfiger?

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Moin,

    das Problem ist, die Werte die ich übergeb haben ein Leerzeichen. In der Adressleiste sind die Leerzeichen durch ein + ersetzt worden.

    Das Problem ist dass du deine PHP-Stringliterale nicht in Anführungszeichen einschliesst wie es sich gehört. Danach lösen sich die restlichen Probleme von selbst.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
  3. Hallo!

    Zum Problem wurde ja schon was gesagt, daher ein paar Anmerkungen:

    <script type="text/javascript">
    <!--
    function CheckAuswahl() {
    return true;
    }
    //-->
    </script>

    Dir ist bewusst dass bei abgeschaltetem Javascript kein Check erfolgt?
    Man kann das durchaus einsetzen, sollte sich aber nicht alleine auf clientseitige Prüfungen verlassen.

    im body:
    <form name="Testform" onSubmit="return CheckAuswahl()" action="">

    Du solltest bei "action" ein Script angeben. Wenn es dasselbe Script ist kannst Du <?php echo $_SERVER['PHP_SELF'] ?> verwenden.

    Außerdem solltest Du "methode" (POST|GET) definieren.

    <select name="npc" size="1">
    <option>Aasgeier</option>
    <option>Doppelkoepfiger Riesenskorpion</option>

    Ich würde evtl. per "value" einfachere Werte definieren, z.b.
    <option value="doppelk">Doppelkoepfiger Riesenskorpion</option>

    echo $_REQUEST['npc']; //ergibt in dem Fall dann: 'doppelk'

    <option>Giftgrabl</option>
    <input type="submit" value="Auswählen!">
    </form>

    Nun mache ich:

    switch($npc){

    Diese Möglichkeit ist offiziell "deprecated" (veraltet). Du solltest entsprechend der im Formular verwendeten Methode $_GET['npc'] oder $_POST['npc'] verwenden. Siehe:
    http://de3.php.net/manual/de/security.registerglobals.php
    http://de3.php.net/manual/de/reserved.variables.php#reserved.variables.post

    case Aasgeier: echo "10";
    break;
    case Doppelkoepfiger+Riesenskorpion: echo "100";
    break;
    case Giftgrabl: echo "2";
    break;
    }

    Man sollte undefinierte Eingaben abfangen, bei switch kannst Du das einfach mit Hilfe von "default" machen, das heißt eine Fehlerbehandlung für alle Eingaben, die durch kein "case" abgearbeitet werden (Fallback). Siehe auch Beispiele unter http://de3.php.net/switch.

    Grüße
    Andreas

    --
    SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/