1.5k Aufrufe
Gefragt 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
Beantwortet von
meinst du vielleicht isset statt empty?
0 Punkte
Beantwortet 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
Beantwortet 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
Beantwortet 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' );
}
...