PHP Switch met case 0
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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";
}
}
?>
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)
1
2
3
4
5
6
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>
<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!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 27/09/2017 21:41:03 door - Ariën -
"" 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.
Moet ik dit topic nog sluiten?
Nee hoor, deze zinkt vanzelf wel omlaag.
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. ;)
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
@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.