Fermture Pop-Up
Chargement des informations
Connexion

 Connexion à mon compte


Connexion à Nextwab Se connecter
Inscription

 Ouverture d'un compte L'ouverture d'un compte Nextwab est rapide et gratuite.
Vous avez accès instantanément à l'ensemble des services Nextwab.
A tout moment, vous pouvez souscrire à un Pack d'hébergement Web ou à un et/ou plusieurs serveurs VPS.

Inscription à Nextwab Ouvrir un compte
0.70€/Mois
Hébergement Web Mutualisé Un hébergement internet performant et de haute qualité sur des supports SSD. Hébergeur Internet Voir les offres Espace disque SSD Sans engagement Support 7J/7
VPS pas cher 4.00€/Mois
Serveurs VPS Cloud Toute la puissance d'un serveur VPS sur mesure et pas cher Hébergeur Internet Voir les offres Livraison instantanée Sans engagement Sur Mesure & Extensible
59.90€/Mois
Serveurs Dédiés Vos projets les plus importants sur une infrastructure solide et évolutive Serveurs dédiés pas cher Voir les offres Montage ISO vRack Ready Support 7J/7 Prioritaire
Domaines pas cher 8€/Mois
Domaines Internet Vos adresses Web avec plus de 220 Extensions disponibles et pré-configurés Domaines Internet Voir les offres Whois Protect + 220 Extensions disponibles Livrés configurés
 Forum Hébergement Web
 Support Technique Nextwab
Support Technique Adresses Utiles Héberger un site Héberger un domaine Configuration FTP Configuration MySQL Créer un fichier php.ini Créer une boite mail
Nextwab met à votre disposition une série de documents explicatifs concernant ses services.
Vous pouvez toute fois contacter le support technique 7J/7 par tickets, sur Facebook, Twitter , SMS ou encore sur les conversations instantanées


Ouvrir la doc.
 Récemment sur Nextwab
 hébergeur d'image
Galerie d'images publiques Les dernières images
 Chat en ligne
 Supervision
Hébergeur internet 1er Hébergeur Internet de qualité en Europe 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 Les 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 !

Voir les offres
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 !

Voir les serveurs 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 les serveurs VPS et les 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
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){
   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