Hoe controle of get variable int is

  • Onderwerp starter Onderwerp starter baws
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

baws

Terugkerende gebruiker
Lid geworden
9 apr 2010
Berichten
1.258
Hallo,

Ik heb een website met cijfers als er op een cijfer geklikt wordt, wordt er uit de database bijbehorende gegevens gehaald.
dit doe ik met een get variabel zodat de link gedeeld kan worden

zo kan het zijn ?id=2

hoe kan ik nu controleren of id een int is ik wil het liefst iets als

if $_GET['id'] is not an int
{
$fout = "Helaas er is iets fout gegaan";
}

if ($fout == null)
{
show content;
}

else
{
Show $fout;
}


Dus wat ik wil is een int controle met foutopvang, kan iemand mij verder helpen?
 
PHP:
if(!ctype_digit($_GET['id'])) {
 
PHP:
if(!ctype_digit($_GET['id'])) {

Let hierbij op dat de input-parameter wel echt een string moet zijn.

ctype_digit (1) levert false op. Dit kan je dan weer aftesten met is_int ().
Je kan er ook een regex op loslaten, maar dat lijkt me wat overkill.

Wil je echt weten of het een integer is, of een (valide) getal? Je kan namelijk ook if ((int)$_GET["id"] > 0) doen. Alle niet-integer waardes worden dan omgezet naar 0.
 
Alles wat uit GET komt zijn strings, net zoals alles wat uit de database komt altijd een string is in PHP.

De best-practise manier is:

if (ctype_digit((string) $_GET['id']))

Dit cast dus botweg de var naar string, dat kan namelijk altijd, en vervolgens wordt gekeken of er alleen getallen in staan.

een regexp zou kunnen maar is tijdverspilling. is_int() zou ik persoonlijk niet aan beginnen, PHP is zo verschrikkelijk los met z'n datatypes dat je er al nauwelijks vanuit kunt gaan dat een int ook echt een int blijft.



Alle niet-integer waardes worden dan omgezet naar 0.

Integendeel, als de string begint met een getal dan wordt alles wat voldoet aan de omschrijving van een int gewoon overgenomen, dis "123.567hallo daar" wordt 123. Heel erg gevaarlijk en daarom moet je dus ook nooit zomaar casten naar ewn int.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan