PHP Switch met case 0

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Asdg gasdgasdgasdg

asdg gasdgasdgasdg

27/09/2017 17:20:39
Quote Anchor link
Voor school moet ik een switch in php maken, als je het getal 1 invult moet hij de combinatie van shift + 1 echo'en, dus bij 1 is dat !
Als ik bij onderstaande code geen getal invul dan wordt alsnog de output van 0 weergeven en niet die van default.

Hoe zou ik dit kunnen oplossen?

Php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        <?php
        if ( isset( $_POST['Submit'] ) && isset( $_POST['getal'] ) ) {
            $getal = $_POST['getal'];
            switch ($getal) {
                case
1 : echo "!"; break;
                case
2 : echo "@"; break;
                case
3 : echo "#"; break;
                case
4 : echo "$"; break;
                case
5 : echo "%"; break;
                case
6 : echo "^"; break;
                case
7 : echo "&"; break;
                case
8 : echo "*"; break;
                case
9 : echo "("; break;
                case
0 : echo ")"; break;
                
                default :
echo "Er is geen getal ingevuld";
            }
        }

    ?>


Html:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
    <form name='form' method='POST' action='<?php echo $_SERVER['PHP_SELF']; ?>'>
        <label> Voer een getal in tussen 0 en 9
            <input type='text' name='getal' size='10' />
        </label>
        <input type='submit' name='Submit' value='Verzenden' />
    </form>

- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 27/09/2017 21:41:03 door - Ariën -
 
PHP hulp

PHP hulp

30/11/2024 01:00:07
 
Ben van Velzen

Ben van Velzen

27/09/2017 17:24:15
Quote Anchor link
"" evalueert naar 0 wanneer dit gecast wordt. Als je dit wil voorkomen zul je je cases met strings moeten schrijven en niet met getallen. Omdat dit een schoolopdracht is is dat meteen ook de enige hint die ik geef.
 
Asdg gasdgasdgasdg

asdg gasdgasdgasdg

27/09/2017 17:26:31
Quote Anchor link
Bedankt Ben van Velzen, ik had hier nog niet bij stilgestaan.

Moet ik dit topic nog sluiten?
 
- Ariën  -
Beheerder

- Ariën -

27/09/2017 17:27:38
Quote Anchor link
Nee hoor, deze zinkt vanzelf wel omlaag.
 
Marthijn Buijs

Marthijn Buijs

27/09/2017 19:08:16
Quote Anchor link
Beste Merijn, oftewel klasgenoot!
Erg toevallig dat ik je hier ook tegenkom, haha.

Je zou ook een <select>-tag in je HTML kunnen gebruiken. Waar je vervolgens 10x een <option>-tag inzet met 0 t/m 9.
Verder, prima PHP code. ;)
 
Thomas van den Heuvel

Thomas van den Heuvel

27/09/2017 19:13:53
Quote Anchor link
Wat je ook zou kunnen doen is een strengere controle op de invoer. Of wat hierboven voorgesteld wordt: als je enkel kunt kiezen middels een select kun je ook geen fouten maken. Maar wat @Ben zegt klopt. In het algemeen is het zo dat informatie in $_GET, $_POST, $_COOKIE etc. bestaat uit strings (variabelen van het type string).

PHP zelf is redelijk onverschillig / soepel over het type van een variabele en voert zelf onder water vertalingen uit. Vandaar dat je soms afwijkende resultaten krijgt. Zo zijn bepaalde waarden equivalent in bepaalde situaties, zoals (blijkbaar) het cijfer 0 en de lege string ("") in bovenstaand geval (in een switch-statement). Dit staat ook verder toegelicht in de documentatie van switch() (zogenaamde loose comparison).

Vaak kun je de oorzaak van dit soort zaken direct vinden of afleiden uit beschrijvingen of user comments van de documentatie-site php.net.
Gewijzigd op 27/09/2017 19:15:17 door Thomas van den Heuvel
 
Ben van Velzen

Ben van Velzen

27/09/2017 21:18:20
Quote Anchor link
@PHP MB Eventueel zou je dat kunnen doen, maar je moet er in je code alsnog op controleren, omdat je nooit kan uitgaan van het feit dat iemand niet aan je formulier heeft zitten prutsen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.