Perdu dans les conditions if,elseif,else ...

  • Auteur de la discussion Auteur de la discussion tryan
  • Date de début Date de début
WRInaute passionné
Bonjour

Bon, j'essaye de comprendre les conditions (mieux vaut tard que jamais) mais je bute sur un truc qui doit etre tout con :
Code:
<form action="#" method="post">
  <p>
age:<input name="$age" type="text" />
<input value="Valider" type="submit" />
 </p>
</form>
<br />
<?php

$age = $_POST['$age']; //On recupere la valeur du formulaire transmit par $_POST pour la 

donner à $age

if($age >= 18 ) //Si $age est supérieure ou égal à 18 ans
{
echo 'Vous avez plus de  18 ans, vous pouvez continuer.'; //on donne droit à l'accès
}
elseif($age == 0 && $age<18) //Autrement Si $age est égal à 0 et inférieure à 18
{
echo ' Il faut etre majeur pour continuer!'; //on interdit l'accès
}
else //Autrement
{
echo 'Il faut mettre un chiffre !'; // On répond autre chose
}
?>
Théoriquement, si rien est inscrit dans le formulaire ou si ce n'est pas un chiffre la réponse retourné devrait etre celle du "else" mais la il me renvoit celle du "elseif" et je ne pige pas pourquoi ... Ou est mon erreur svp ?
Merci
 
WRInaute discret
A mon avis ça résulte de l'interprétation de la variable $age, si elle n'est pas définit, le test sera interprété comme $age == ( 0 = faux ) donc la condition sera vérifiée..

Essaie de mettre
Code:
elseif($age === 0 && $age<18)
Avec 3 égals tu force PHP à considérer le 0 seulement comme un chiffre et non pas aussi comme un faux
 
WRInaute passionné
Hargggggg ... dans le tableau des conditions du site que j'utilise, ce symbole (===) n'existe pas :? .
D'un autre coté, je suis parvenue une fois à afficher les bonnes fonctions sans (===) mais comme un gland, il à fallut que je complique le truc (pour comprendre) et j'ai finis par m'y perdre :lol: ...
Merci pour l'info CashAttitude, je vais tester sa de suite :)

Petit edit:
=== ne fonctionne pas. Les chiffres compris entre 0 et 17 me renvoit sur le "else". J'ai donc éssayé avec "!=", ce qui fonctionne mieux mais ignore également le chiffre 0 ..donc 0 me renvoit sur "else" au lieu du "elseif" ... que c'est compliqué .....
 
WRInaute discret
Code:
elseif( ($age <= 18) && ($age >=0) )

test ça :wink:
(moi je mettrai en plus un javascript pour vérifier que le champ n'est pas vide)
 
WRInaute accro
Euh
Code:
elseif($age == 0 && $age<18)
Si age est égal à 0 ET age inférieur à 18

un peu bizarre, non ? si $age est égal à zéro, il sera forcément inférieur à 18, non ?
 
WRInaute discret
nickargall a dit:
Euh
Code:
elseif($age == 0 && $age<18)
Si age est égal à 0 ET age inférieur à 18

un peu bizarre, non ? si $age est égal à zéro, il sera forcément inférieur à 18, non ?

Oui par contre 17 ne marchera pas car ce n'est pas égal à 0 ;)
C'est bien ça que tu veux :

Code:
elseif( ($age <= 18) && ($age >=0) )
 
WRInaute passionné
SparH, sa ne fonctionne pas. Si le champs est vide,sa me renvoit le "elseif".

nickargall:
Code:
elseif($age == 0 && $age<18)
Le code dit bien si age=0 et si age inferieure à 18 alors (donc si age comprit entre 0 et 18 ) on renvoit l'accès refusé .. non ?
Bon d'un autre coté, j'essaye de comprendre tout sa, alors il faut etre un peut indulgent :lol: .

CashAttitude:
Code:
elseif( ($age <= 18) && ($age >=0) )
Le code ne fonctionne pas non plus car si le champs est vide, il me renvoit le elseif au lieu de else.

Ce que je cherche à comprendre et à faire:

Si "if" est egal ou sup. à 18 -> c'est ok on envoit le echo de if
Si "elseif" est comprit entre 0 et 17 inclus -> c'est pas ok on envoi le echo de elseif
Si le champs est vide ou ne commence pas par un chiffre ->on lit le "else"
 
WRInaute accro
Le code dit bien si age=0 et si age inferieure à 18 alors (donc si age comprit entre 0 et 18 ) on renvoit l'accès refusé .. non ?
Bon d'un autre coté, j'essaye de comprendre tout sa, alors il faut etre un peut indulgent

Je dis juste que si l'age =0, il est forcément inférieur à 18 ..

Sinon, ma proposition, à chaud,
Code:
if($age >= 18 ) //Si $age est supérieure ou égal à 18 ans
{
//on donne droit à l'accès
echo 'Vous avez plus de  18 ans, vous pouvez continuer.'; 

}
elseif( $age<18) 
//Autrement Si $age est inférieure à 18
{
//on interdit l'accès
echo ' Il faut etre majeur pour continuer!'; 
}
else if($age=="" || (!isset($age))  )
//Autrement Si age est vide ou n'est pas défini
{
// On répond autre chose
echo 'Il faut mettre un chiffre !'; 
}
 
WRInaute discret
Code:
if( isset($age) and is_int($age) and $age>0) {

   if($age>=18) echo 'Vous avez plus de  18 ans, vous pouvez continuer.'
   else              echo ' Il faut etre majeur pour continuer!';

}
else {
    echo 'Il faut mettre un chiffre !';
}
 
WRInaute accro
+1 CAsh, sauf que ca doit aussi marcher si $age est égal ou supérieur à 18, tu peux éditer et ajouter un = :)
 
WRInaute accro
On peut mettre un switch avec une condition 'inférieure" ou supérieure ? Je cherchais ça sur l'web (bon pas longtemps je l'avoue)
 
WRInaute passionné
Bah tu met un valeur par défaut à 0 et c'est réglé...

Code:
<form action="#" method="post">
  <p>
age:<input name="$age" type="text" value="0"/>
<input value="Valider" type="submit" />
 </p>
</form>
<br />
<?php

$age = $_POST['$age']; //On recupere la valeur du formulaire transmit par $_POST pour la

donner à $age

if($age >= 18 ) //Si $age est supérieure ou égal à 18 ans
{
echo 'Vous avez plus de  18 ans, vous pouvez continuer.'; //on donne droit à l'accès
}
elseif($age != 0 && $age<18) //Autrement Si $age est différent de 0 et inférieure à 18
{
echo ' Il faut etre majeur pour continuer!'; //on interdit l'accès
}
else //Autrement
{
echo 'Il faut mettre un age !'; // On répond autre chose
}
?>
 
WRInaute discret
moi j'aurais fait ca :

<form action="#" method="post">
<p>
age:<input name="age" type="text" value=""/>
<input value="Valider" type="submit" />
</p>
</form>
<br />

<?php

if(isset($_POST['age'])){$age=$_POST['age'];}else{$age="";}
if(is_numeric($age)==false){$age="";}


if($age >= 18 ) //Si $age est supérieure ou égal à 18 ans
{
echo 'Vous avez plus de 18 ans, vous pouvez continuer.'; //on donne droit à l'accès
}
elseif($age >= 0 && $age<18) //Autrement Si $age est différent de 0 et inférieure à 18
{
echo ' Il faut etre majeur pour continuer!'; //on interdit l'accès
}
elseif($age =="") //Autrement
{
echo 'Il faut mettre un age !'; // On répond autre chose
}
?>
 
WRInaute accro
moi j'aurais mis les bbcode "code" et "/code" autour de ton code dans le message pour pas qu'il soit pollué par un smiley ;)
 
WRInaute passionné
Navré de vous enkikiner avec sa mais j'aime bien comprendre :) .

nickargall, j'ai testé ton code et le probleme est le meme.Si le champs est vide, l'instruction "elseif" est renvoyé au lieu du "else if".

CashAttitude, j'avoue n'avoir rien comprit à ton dernier code.. je l'ai donc testé brut et je me suis retrouvé avec des erreurs que je ne comprend pas.
J'en suis qu'au tout début d'appentissage des conditions donc "isset" "is_int meme "switch()" est pour moi, du chinois pour le moment .

Koxin-L, it's good sauf que "0" n'ai pas reconnut comme un chiffre (je sais, on s'en fou) mais ce n'ai pas logique .

En tout cas, merci de vous etes attardé sur ce poste :D
 
WRInaute discret
Code:
<?php
if( isset($age) and is_int($age) and $age>0) {

   if($age>=18)		echo 'Vous avez plus de  18 ans, vous pouvez continuer.';
   else				echo ' Il faut etre majeur pour continuer!';

}
else {
    echo 'Il faut mettre un chiffre !';
}

?>

Ca marche sans pb.. :) (j'avais oublié les ; ) Apres, les différents fonctions, tu trouve leur explication ici sur php.net comme par ex :
http://fr2.php.net/manual/fr/function.isset.php
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut