[1479 vues] 2021-12-21 Emmanuel Orchanian
NOTE : cet article a été affiché dans sa langue originale.
Aucun rapport avec la télévision 😉
Types
En informatique, on distingue deux types
- Les textes
"bonjour comment ça va ?"
- Les nombres
0 1 2 3...
Quelque informations en vrac
- Les textes sont appelés "chaînes de caractère" en français, et "string" en anglais parce ce que ça se traduit par... chaîne en français, tout simplement.
- On distingue les textes parce qu'ils sont mis entre des guillemets
"bonjour"
Les chaînes numériques
Ce sont les nombres sous forme de texte, par exemple "44805"
À quoi ça sert ?
Pour stocker des nombres avec lesquels on ne fera jamais de calculs
Par exemple le code d'un immeuble, une plaque d'immatriculation.
Pour stocker des nombres trop longs
En informatique, l'infini n'existe pas, par exemple sur ce serveur, le nombre le plus long pris en compte par PHP est 2147483648 (environ 2 milliards) (Mince maintenant tout le monde sait que je suis sous PHP !)
Les numéros de sécurité social sont des nombres très longs par exemple
Pour préserver les zéro à gauche
- 007 de James Bond se transformerai en un simple 7 si on le met en nombre
- Les codes postaux, par exemple 07 pour les Ardéchois.
Note à ce propos : les codes postaux peuvent contenir les lettre A et B, il ne faut donc pas les considérer comme des nombres
Les données de formulaire
Qu'on le veuille ou non, toutes les données des formulaires sont sous forme de textes, même les nombres... Donc même les <input type="number">
vous donnerons des textes en vérité.
Les chaînes hybrides
J'appelle personnellement ainsi les texte qui commencent par un nombre et qui continuent avec des mots
Supposons que nous avons la catégorie 17 est celle des rouges à lèvres pour e-commerce de cosmétiques.
- Si j'écris dans mon URL
https://maboutique/categorie/rouge-a-levres
, c'est bien, mais en base de données, les catégories (et quasiment tout ce qui existe) est identifié avec des nombres. Doncrouge-a-levres
n'a aucun sens pour l'ordinateur, lui ce qu'il veut c'est un numéro, le 17 dans notre cas. - Si j'écris
17
, l'ordinateur aime ça, mais l'être humain lui se demande Mais qu'est ce que c'est la catégorie 17 ?
Comment concilier les deux ?
En écrivant une chaîne hybride sous la forme "17-rouge-a-levres"
- L'être humain comprend en lisant l'URL qu'on est dans la catégorie des rouges à lèvres
- On peux récupérer le 17 au début ligne pour l'ordinateur (voir la partie suivante)
Récupérer un nombre en début de texte
Par exemple dans le texte "3 pommes", je veux récupérer le nombre 3
PHP
On peux faire un casting en écrivant le type qu'on veut entre parenthèses avant le reste
$nombre = (int) "3 pommes"
On peux aussi utiliser la fonction dédiée pour ça, intval
$nombre = intval("3 pommes") ;
c'est ce que je fais personnellement.
- Le PHP lit la chaîne de la gauche vers la droite, il enlève les espaces et les zéro de gauche, puis s'il tombe sur un charactère différent d'un chiffre arabe, il arrête.
- si le nombre ne commence pas par un nombre, alors PHP considère cela comme zéro.
- n'écrivez pas des chaînes bizarres comme
" 20 pommes" , "00020 pommes" "0x20 pommes" "0b pommes"
contentez-vous d'un simple trait nombre suivi d'un trait d'union et de la suite en kebab et tout ira bien"20-pommes"
JavaScript
On peux utiliser la fonction parseInt
let nombre = parseInt("3 pommes") |0
ASTUCE : si le JavaScript remplacera "0-pommes"
par 0
et "pomme"
par NaN
qui signifie "Not a number" (ce n'est pas un nombre).
Si on veux que le JavaScript ai le même comportement que le PHP et qu'il remplace le NaN (not a number) par un zéro, on peux rajouter |0
par la suite :
let nombre = parseInt("pommes")|0
Utile pour rallier confort et sécurité
Dans la réception des données de formulaire, tout est sous forme de texte qu'il faut ensuite nettoyer à l'eau de javel pour ne pas risquer de se faire hacker les base de données par des données maveillante ou maladroites.
On est alors habitué à envoyer un nombre et à la récupération utiliser un simple intval qui transforme le texte numérique en nombre, "55"
se tranformerai en 55
, et les tentatives de hacking "';-- onclick> etc."
se transformeraient en 0
, puisque en base de données les identifiants commencent par 1, il est alors facile de détourner les choses.
Je conseille ainsi lors de l'envoi de ne pas envoyer des nombres mais des chaînes hybrides écrit en kebab-case 17-rouge-a-levre
au lieu d'un simple 17
, car c'est ainsi plus confortable à comprendre et à débugguer, et à la réception ça ne soulève point de danger puisqu'on récupèrerai un nombre de tout façon.
Merci d'avoir lu !
Si en général vous avez une question, une curiosité, n'hésitez pas me contacter.