1.8k Aufrufe
in Skripte(PHP,ASP,Perl...) von
Hallo,

per URL möchte ich gerne Zahlen in mein Script integrieren. Auch ist ein Filter enthalten, damit nur bestimmte Werte zugelassen werden (in diesem Fall 1,2 und3)

Der Aufruf erfolgt so:

datei.php?s=1

Das ist der Code:


$size='1';
if (!empty($_GET['s'])) {
$size=$_GET['s'];
}
$gueltigesize=array('1','2','3');
if (!in_array($size, $gueltigesize)) {
$size='error';
}


Egal ob die Variable leer bleibt oder 1,2,3,4,5,6, ... engetragen wird: Die Variable $size gibt immer eine 1 aus...

Gibt es einen Denkfehler in der Logik?

4 Antworten

0 Punkte
von
meinst du vielleicht isset statt empty?
0 Punkte
von
isset prüft ja nur, ob eine Variable gesetzt ist. Ich möchte herausfinden, ob etwas in ihr enthalten ist...denn gesetzt ist sie ja.

Ruft man das Script ohne Parameter auf (datei.php?) soll automatisch ein Default-Wert eingetragen werden.

Hm...ich bilde mir ein, dass dieses Script irgendwann funktioniert hat. Nur habe ich es damals für die Sprachwahl genutzt und anstelle von 1,2,3 wurde eben "de" oder "en" eingesetzt.
0 Punkte
von yannick_b Einsteiger_in (53 Punkte)
Hmm, sieht eigentlich gut aus, habe es auch selbst ausprobiert und bei mir gibt es mit dem exakten Skript von dir kein Problem...
Gebe ich keinen Parameter an, wird 1 ausgegeben, bei s=2 oder s=3 eben 2 bzw. 3 und bei allem anderen "error".
Funktioniert also eigentlich so wie es soll... ;)
0 Punkte
von son_quatsch Experte (5.3k Punkte)
[list=1]
[*]Es gibt keine IF-Schleifen.
[*]Wenn du nur Zahlen verwendest, dann nimm auch solche und keine Strings.
[*]in_array() ist bedeutend langsamer als z.B. isset(), aber...
[*]...wir haben ja eh nur Zahlen, daher geht es noch rechenfreundlicher:[/list]
$iSize= isset( $_GET['s'] )? (int) $_GET: 1;
if( $iSize< 1|| $iSize> 3 ) die( 'error' );

...oder optisch evt. leicht verständlicher:
if( isset( $_GET['s'] ) ) { // Parameter wurde übergeben
$iSize= (int) $_GET; // Integer erzwingen
} else { // Kein Parameter
$iSize= 1;
}

if( $iSize< 1 // Zahlenvergleich
|| $iSize> 3
) {
die( 'error' );
}

Deine Antwort

Dein angezeigter Name (optional):
Datenschutz: Deine Email-Adresse benutzen wir ausschließlich, um dir Benachrichtigungen zu schicken. Es gilt unsere Datenschutzerklärung.
Anti-Spam-Captcha:
Bitte logge dich ein oder melde dich neu an, um das Anti-Spam-Captcha zu vermeiden.
...