Voici mon code:
<?php $id = $_GET["id"]; if (is_int($id) === FALSE) { header('HTTP/1.1 404 Not Found'); exit('404, page not found'); } ?>
7 Réponses :
dans une pincée, vous pouvez lancer dans un entier, puis vérifier! = 0. p> is_int code> vérifie que le type Type de données em> est un entier, mais tout dans
$ _ get code> sera une chaîne . em > Par conséquent, il retournera toujours
faux code>.
$id = isset($_GET['id']) ? (int) $_GET['id'] : null;
if (!$id) { // === 0 || === null
header('HTTP/1.1 404 Not Found');
exit('404, page not found');
}
A manqué de upvotes pour la journée, mais cette réponse dit en fait la raison pour laquelle utiliser IS_Numeric. Tout paramètre de requête HTTP envoyé par courrier ou obtenir sera toujours une chaîne.
+1 - cependant à mentionner, is_numeric code> n'a pas le même effet, tel que par exemple. laisse également passer des valeurs heex à part les autres (voir php.net)
@Helmut, oui, is_numeric () code> n'est pas correct pour la vérification des identifiants entier. En pratique, toutes les entrées de l'utilisateur doivent être transmises via
filtre_var () code> ou une autre routine explicite de la même manière.
Entrée de l'utilisateur en $ _GET TRAMA (ainsi que les autres superglobaux) prennent la forme de chaînes. p>
is_int code>
vérifie le type type em> (ie String code>) de la valeur, non si elle contient des valeurs d'entier. Pour vérification que l'entrée est une chaîne entière, je suggérerais quelque chose comme
ctype_digit code>
ou Un entier filtre ( filtre_validate_int code> -C'est-ce que l'avantage de modifier réellement la valeur en entiers ). Bien sûr, vous pouvez également le tyroser avec
(int) code>. P>
de la documentation PHP pour IS_INT: P>
Remarque: Pour tester si une variable est un nombre ou une chaîne numérique (telle que Entrée de formulaire, qui est toujours une chaîne), Vous devez utiliser IS_Numeric () . P> blockQuote>
Toute entrée utilisateur est entrée en tant que chaîne, car PHP n'a aucun moyen de dire quel type de données vous attendez que les données soient.
le jeter à un entier ou utilisez une regex si vous voulez vous assurer que c'est un entier. p>
essayez d'utiliser is_numérique code> au lieu de
is_int code>.
is_numérique code> vérifie si elle est donnée quelque chose qui peut être un nombre (
$ _ obtenir code> renvoie les chaînes que je pense).
is_int code> vérifie pour voir si la variable est de type
int code> p>
ou, vous pouvez simplement utiliser une correspondance de regex pour vérifier si la chaîne est un entier.
if(preg_match('/^\d+$/',$_GET['id'])) { // is an integer }
Et
$ _ obtenez code> contient en fait ... Quoi?