Nextwab.com - Serveur VPS et Hébergement Web
Panel Client Panel Client Hébergement Web Hébergement Web Communauté et outils Communauté & Outils Communauté et outils Support Technique Hébergeur Internet FR
Hébergeur Internet DE Hébergeur Internet EN Hébergeur Internet ES Hébergeur Internet FR Hébergeur Internet GR Hébergeur Internet IT Hébergeur Internet NL Hébergeur Internet PL Hébergeur Internet PT Hébergeur Internet SV
Translations work is in progress and may be not fully available everywhere. Please considering that refering language is FR Close
3.80€ ttc/Mois
Hébergement Web Un hébergement web pas cher performant et de haute qualité sur des serveurs virtualisés.
Hébergeur Internet Hébergement Web Sur des serveurs privées virtuels Offres sans engagement Serveurs supervisés 24h/24
VPS pas cher 3.80€ ttc/Mois
Serveur VPS Toute la puissance d'un serveur VPS pas cher et sur mesure
Hébergeur Internet Serveur VPS Livraison Instantanée VPS sans engagement Sur mesure & extensible à tout moment
59.90€ ttc/Mois
Serveurs dédiés Vos projets les plus importants sur une infrastructure solide et évolutive
Serveurs dédiés Serveur Dédié Montage ISO vRack Ready Support 7J/7 Prioritaire
Domaines Internet 7.99€ ttc/an
Domaines Internet Vos adresses Web avec plus de 220 Extensions disponibles et pré-configurés
Domaines Internet domaines Whois Protect + 220 Extensions disponibles Livrés configurés
Hébergeur Internet L'hébergeur internet de qualité ! Basé sur une infrastructure solide et une qualité de service accrue, Nextwab est parti du fait qu'un service acheté est un service à rendre.
Ainsi, chaque commande est honorée avec succès et bénéfice de la garantie satisfait ou remboursé étendue sur 30 Jours !
Offres d'hébergement web Les offres d'hébergement Web Nos offres d'hébergement web ont été simplifiées ! Le système s'inspire des sessions VPS, qui veut que chaque client ne paie que lorsque son hébergement web est actif. Ainsi, le nombre de domaine à héberger n'est pas limité et sans engagement !

Héberger mon site web
Serveur VPS Votre serveur VPS Jusqu'à 8 vCores, 12Go de RAM, 300Gb d'espace disque et 8 IPv4, à partir de 4€ par mois.
A ce prix là, la protection DDoS est également incluse !

Créer mon Serveur VPS
Hébergeur internet ssd Hébergement Web jusqu'à 14x plus rapide ! Des serveurs Web, MySQL et de fichiers dotés de disques SSD pour une réactivité décuplée.
Les disques SSD sont jusqu'à 14 Fois plus rapide qu'un disque dur HDD, et cela grâce à l'absence de pièce mécanique en rotation !
Garantie qualité satisfait ou remboursé Satisfait ou Remboursé En plus de pouvoir profiter des offres sans engagement, chaque client Nextwab bénéfice d'un délais de rétractation étendu jusqu'à 30 Jours sans conditions, valable sur l'ensemble des serveurs VPS et offres d'hébergement web !
Infogérance VPS et serveur dédié Supervision de votre machine 24H/24 Parmi l'une des offres les plus utilisés de Nextwab : la supervision de votre serveur dédié ou votre serveur VPS et la réparation 24H/24.
Un service d'infogérance capable de détecter un défaut machine dans la minute afin d'intervenir le plus efficacement possible

Infogérance
Envoyer SMS avec un site Web PHP L'envoi des SMS à partir de son site Web Communiquez vos confirmations d'inscription, codes de sécurité, évènements & alertes par SMS avec le nom d'expéditeur de votre choix.
Un gage de qualité et une augmentation de la notoriété de vos projets Web !

Envoyer des SMS à partir de son site Web
Hébergeur internet avec systeme de parrainage 5% sur les achats de vos filleuls Profitez de votre réseau de connaissances , audience et visiteurs et bénéficiez des avantages liées à leurs achats.
5% des achats sont reversés directement sur votre solde Nextwab !

Grâce à cela, nos hébergés ayant un grand cercle de filleuls ne paient plus leur hébergement
Certificat HTTPS Gratuit Votre site en HTTPS, gratuitement ! A activer a partir de votre interface client : Les certicats SSL de Let's Encrypt !
Ils fournissent à vos sites web la connexion HTTPS qui met en confiance vos clients , visiteurs et augmente ainsi votre taux de conversion

Forum : [PHP - HTML] Les nombres entiers dans les inputs... (Et la logique PHP) à 02h06 le 27/04/17 (FR)

[PHP - HTML] Les nombres entiers dans les inputs... (Et la logique PHP) Accueil > Forum > Divers > [PHP - HTML] Les nombres entiers dans les inputs... (Et la logique PHP)
Forum Conversation

Cormouls Vincent
Inscrit depuis le 15/08/2014

Personne de confiance
Personne de confiance
02h06 - 27/04/17 Modéré FR
Bonjour,

Comme tu l'as sûrement remarqué -ou pas-, selon l'utilisation que tu as des inputs type texte en HTML, tu as peut-être été confonté au problème suivant : 

Si, dans un input de type texte, tu entres un nombre entier -ou décimal-, la valeur récupérée via un formulaire ou via Ajax sera une chaine de caractères... Logique (parce que c'est un input texte) ! Mais comment faire si, en utilisant un seul input de type texte, tu veux, en fonction de la forme de la valeur : si la valeur est du texte ou un nombre, faire agir ton script différement ?

Tout d'abord, il faut noter que la fonction PHP is_int() (ou is_float()) ne fonctionne pas, car la valeur retournée est forcément du texte...
De plus, PHP étant un language très tolérant au niveau des types de données, un is_int("10") ne "passe pas" et est considéré comme une chaîne de caractères, logique...

Donc, comment faire ?

C'est simple, on va utiliser la fonction intval() ou floatval() qui prend en paramètre une chaîne de caractères et qui va retourner -si il peut- la valeur numérique de la chaine. 

Voici différents cas d'applications de intval() : 
intval(10) => 10
intval("10") => 10
intval("Texte") => 0
intval("1un") => 1
intval("un1") => 0

En voyant ces exemples, on déduis donc que dans le cas d'une chaîne, un 0 est retourné, dans le cas d'une chaine commençant par un nombre mais contenant ensuite du texte, le nombre du début est retourné, dans le cas d'une chaine commençant par du texte et finissant par un nombre, un 0 est retourné.

C'est bien, mais du coup, c'est toujours un nombre entier qui est retourné, même si c'est du texte, donc c'est innexploitable...

Si ! Car (dans le cas général), une chaine de caractères "retourne" 0 et un nombre "retourne" lui-même, alors on a juste à tester la valeur retournée, si elle est égale à 0, c'est qu'on a du texte sinon, c'est un nombre !

Si tu as un esprit logique, tu as tout de suite compris que cette méthode est faillible car si on entre le nombre 0, il est interprété comme du texte !

Alors... Comment faire ?

C'est simple ! En regardant les exemples si dessus, on peux trouver LA technique !

Pour se faire, on a juste à ajouter un nombre APRES notre chaîne de caractères renvoyée par l'input ! 
Je demande pas de faire ça directement dans l'input, mais on concatène le retour directement dans notre script.

Tu la vois venir la soluce là ?

Sauf que PHP, c'est cool, c'est pas indulgent niveau type de données, mais vas-y pour concaténer une chaîne avec un nombre...
Je plaisante, c'est facile et logique, pour concaténer 2 chaînes, on fais un "chaine1"."chaine2" alors avec une chaîne et un nombre, on fais quoi ? 
"chaine".str(5) biensûr...!
Attends, on me dis dans l'oreillette que je m'embête pour rien... Et oui, on s'en fiche de passer notre 5 en type nombre... C'est pourquoi, un simple "chaine"."5" fonctionne aussi car c'est notre fonction intval() qui fais le taf après.

Bref, comme je suis gentil, je te donne des exemples (dans le cas d'un formulaire envoyé en POST) :
Quand "chaine" est passé dans l'input : intval($_POST['input'].str(4)) => 0
Quand 4 est passé dans l'input : intval($_POST['input'].str(4)) => 44

Pas très très explicite comme exemple -on est d'accord-, c'est pour ça que je vais traduire les variables des deux exemples maintenant : 
intval("chaine".str(4)) => 0
intval("4".str(4)) => 44 (Note : le 4 passé dans l'input est toujours sous forme de chaîne, il n'y a pas de raisons qu'il soit sous forme de nombre, si t'attendais à un nombre, recommence dès le début...)

Voilà, on a donc enfin notre solution ! Voilà un exemple complet :
if(intval($_POST['input']."7") == 0){
   echo "On a du texte !";
   //Et tu fais ce que tu veux avec
} else {
   echo "On a un nombre";
   /Et tu fais ce que tu veux avec
}
?>

C'est bon, on a fini... Et là, tu te dis peut-être :
Rolala ! C'est vraiment compliqué de faire ça !

Oui, c'est sûr, maintenant que tu est arrivé au bout, que je t'ai donné une solution propre et à peu près logique, je t'en donne une autre, qui fonctionne (peut être même pas) mais (et) qui n'est pas du tout logique (enfin, si, elle est logique pour PHP) : 

Comme PHP n'est pas difficile avec les types de variables (je l'ai dis plus haut), on peux "additionner" une chaîne avec un nombre ! Et en plus, si la chaîne contient en réalité un nombre, il fais l'opération sans problèmes -le malin-... Mais on a quand même un minimum de logique de sa part, si il ne peux pas faire l'opération (si on a du texte quoi), il ne la fait pas MAIS il garde seulement le nombre ! (j'ai dis "logique" ? Désolé...)

Exemples :
"3" + 3 = 6
"3" + "3" = 6
"trois" + 3 = 3
"trois" + "trois" = 0

Alors, tu me connais maintenant, avec l'exemple, tu la vois venir la deuxième soluce hein ?

Récapitulons. On peux additionner une chaîne avec un nombre, si la chaîne contient un nombre, il fait l'addition mais si la chaîne contient du texte, il garde seulement le nombre... 

Voilà la deuxième solution :
if($_POST['input'] + 1 == 1){
   echo "On a du texte !";
   //Et tu fais ce que tu veux avec
} else {
   echo "On a un nombre";
   /Et tu fais ce que tu veux avec
}
?>

Et là, tu te dis sûrement que, celle-ci n'est pas infaillible... Car, si un "0" est entré dans l'input, on obtient 1 donc la condition est vraie, donc il dit que c'est du texte...  
Maintenant, trouve une solution pour que le 0 mis dans l'input ne pose pas problème... Addition, soustration, multiplication déjà tu peux oublier... Il reste quoi ? 
La division... Oui mais pas trop, je m'explique : 0/1 = 0, 0/x = 0, voilà c'est tout...

On fait comment du coup ?
Simplement, on prend l'inverse du nombre (et pas son opposé), appelons maintenant la logique de PHP :
Si on calcule l'opposé d'un nombre, on obtient bien son opposé (merci PHP), si on calcule l'opposé d'une chaîne, on obtient "false" ! Là tu me diras : 
Parfait, à partir de là, si j'ai "false", la condition ne passe pas, donc ce n'est pas un nombre...

Mais, attends, comment on l'a vu en dessus, PHP se comporte bizarrement si on a un nombre en début ou en fin de chaîne avec du texte... 
On a donc : 
1/"4" = 0.25
1/4 = 0.25
1/"quatre" = false
1/"4quatre" = 0.25 ! Merci PHP
1/"quatre4" = false

Donc voilà, déjà que cette deuxième soluce n'est pas très propre et logique, il faut bricoler parce que Monsieur PHP fais des choses bizarres avec les chaînes, tu peux l'oublier et utiliser la première... T'es quand même courageux d'avoir lu jusqu'à la fin pour une deuxième soluce qui ne marche pas. 

Tu peux me répondre et partager ta propre solution à ce problème ! 

Maintenant que j'ai fini, je l'avoue, il faut vraiment avoir l'utilité d'utiliser un input texte pour avoir un script qui doit agit différement si on a mis du texte ou un nombre dedans... 

Bonne continuation dans vos périples de programmation en PHP !

#C_Vincent



Réponse Réponse
Répondre au sujet
Participez à la discussion !
Se connecter S'inscrire
Page Page

1