PHP - chaîne de caractère contien

Fermé
M_Tufux - 3 nov. 2015 à 10:10
 M_Tufux - 3 nov. 2015 à 16:05
Bonjour,

J'aurais besoin d'aide pour la syntaxe de ces conditions en php

if($_POST["id"] contient "." /* ou est décimal, je ne sais pas lequel est le meilleur à utiliser dans ce cas - On admet que la chaîne contient 5 chiffre et que ça a déjà été testé*/){
//mon code
}
elseif( premier caractère de $_POST["id"] <= 0 /* Faut-il tester si ce premier caractère est un int avant de regarder s'il est <= 0? */){
//mon code
}

Si quelqu'un pouvait me venir en aide, ce serait avec plaisir :)

1 réponse

[Dal]
Messages postés
5841
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2022
991
Modifié par [Dal] le 3/11/2015 à 11:33
Salut M_Tufux,

Si tu veux tester si une chaîne contient un nombre décimal, tu peux utiliser is_float.

strlen permet de déterminer la longueur d'une chaîne.

Personnellement, ne sais pas dire si un "caractère" est "négatif" (je sais dire si un "caractère" est un zéro). Si tu veux juste tester si une chaîne contient un nombre tu le vérifies avec is_numeric et tu peux vérifier si ce nombre est négatif ou nul avec
<= 0
.


Dal
0
Salut,

Merci pour ta réponse.
Voici mes lignes pour savoir de quoi on parle:

Je précise que 5 chiffres sont entrés dans une balise input

Pour commencer, la condition qui ne devrait être vraie que si le 1er chiffre est positif. La chaîne contient 5 toujours chiffres fixes.
if(substr($_POST["id"],1) <= 0 && is_numeric($_POST["id"]))

Comme cette condition était toujours false, je l'ai mise en commentaire et je l'ai remplacée par
if(substr($_POST["id"],2) < 1)

En théorie ça ne devrait rien changer à part si le post id n'est pas numérique.

Pour la partie décimale
if(is_numeric($_POST["id"]) && is_float($_POST["id"]))
Ce test est toujours faux. J'ai donc essayé de mettre la partie is_numeric en commentaire. Le test est resté faux. J'ai encore fait un autre test en mettant is_float en commentaire et celui-ci est correct, MAIS: Si le nombre entré est décimal (on est d'accord qu'un nb décimal est 2.5, pas 2,5?), un petit texte en dessous de la balise doit s'afficher, OR (pas ou), j'avais laissé un mouchard alert en js et il s'est manifesté; par contre, le texte rouge en dessous de la balise ne s'affiche jamais, avec ou sans le mouchard js.

Ouais bref, j'espère que tu comprends plus ou moins ou je veux en venir. C'est un immense bordel tout ça.
0
[Dal]
Messages postés
5841
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2022
991
Modifié par [Dal] le 3/11/2015 à 12:54
substr("toto",1)
ne retourne pas le premier caractère de "toto", mais retourne "oto". Si tu veux le premier caractère, tu dois faire
substr("toto",0, 1)
... vois la documentation de substr().

Pour is_float(), comme tu passes une chaîne, tu devrais faire
is_float($_POST["id"] + 0)
ou une autre astuce suggérée dans les commentaires de la doc https://www.php.net/manual/fr/function.is-float.php pour évaluer le contenu de la chaîne numériquement avant de le passer à la fonction.

Sinon, je te confirme que l'on ne comprend rien à tes explications.

Pour t'expliquer, je te suggère de donner un exemple concis de données de départ et d'expliquer en français les cas que tu veux tester sur ces données et le but recherché.

Dal
0
Salut,

Merci pour ton aide et pour tes lignes de commandes. En fait je me suis complètement compliqué la tâche alors ce que n'était pas nécessaire. Pour résumer, je suis passé de 30 lignes dégueulasses à une dizaine de lignes.
Donc tout est fonctionnel
0