comment ajouter une option >= dans un if

LoGtT
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 18:45

Bonjour,

comme la rubrique l'indique je suis un noob! mais l'avantage c'est qu'il me semble que mon problème est facile à résoudre ;)

Je propose des checks box avec les options suivantes :

combien tu as de bonbon(s) ?
1
2
3
4
5+

vue que je suis un noob super fort j'ai déjà mon if qui prend l'addition de résultat ( au cas ou philippe aurait 2 et 3 bonbons :s on sait jamais!)
ce qui me donne :

if (strlen($_REQUEST['bonbon'])>0)
{ $query .= "and bonbon in (".mysql_real_escape_string(join(",",$bonbon)).") "; }

CEPENDANT !!! ( oui on y vient :D ) question bête comment je peux faire pour dire que l'option 5+ doit correspondre à >=5 bonbons ???
car la actuellement si je coche 5+ ( et même si j'ai une réponse 6) rien ne s'affiche car y connait pas le zigoto "5+" ... :/

j'aurais bien rajouter un if pour dire :
if $_REQUEST['bonbon']=5+
{ $query >= "5 bonbon" }

(oui c'est moche :D tes yeux piques unh!)


Merci d'avance pour le coup de PouCe :)

ViPHP
xTG
ViPHP | 7331 Messages

09 févr. 2011, 18:57

Tu as pourtant vu juste dans ta réflexion. =D>
if (strlen($_REQUEST['bonbon'])>0 && $_REQUEST['bonbon'] != "5+")
  $query .= "and bonbon in (".mysql_real_escape_string(join(",",$bonbon)).") ";
else // cas du 5+
  $query .= "and bonbon >= 5";

ViPHP
AB
ViPHP | 5818 Messages

09 févr. 2011, 19:24

Au passage évite d'utiliser $_REQUEST. Utilises plutôt $_GET ou $_POST suivant ce que tu as déclaré dans la balise "action" de ton formulaire.

Logtt
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 23:01

ahah super merci pour votre être je fonce essayer ca :D

logtt
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 23:21

je suis en post. mais pourquoi c'est mieux de mettre post au lieu de request ? AB ?

sinon GTX on tient quelque chose mais y manque le petit grain de sel magique ... j'ai bien mis ton code :
if (strlen($_REQUEST['bonbon'])>0)
{ $query .= "and bonbon in (".mysql_real_escape_string(join(",",$bonbon)).") "; }
else // cas du 5+
{ $query .= "and bonbon >= 5"; }
(première utilisation de balise dans un forum hope that will work :s)

mais dilem! si je coche +5 il n'y a rien ! (sisi)
et quand je ne coche rien j'ai bien mon numero 6 ...
du coup ce code remplace mon option "-1" (= pas de réponse) et qui me sortait tous les résultats possibles ...

donc il faudrait pouvoir ajouter : la condition " si tu as recu +5" la tu mets le résultat.


de mon côté j'ai tenté de faire un "code triche" :
if (strlen($_REQUEST['bonbon'])>0)
{ $query .= "and bonbon in (".mysql_real_escape_string(join(",",$bonbon)).") "; }
elseif (strlen($_REQUEST['bonbon'])>1)
{ $query .= "and bonbon >= 5" ; }
l'objectif étant de lui dire si tu vois que tu as plus de deux caractère (du coup que ca soit +5 ou 16 ou 82 ca reviendrait au même :/) tu m'affiches tout les résultats +5
mais sans succès :(

Logtt
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 23:24

mince j'ai pas vue que tu avais mis un morceau de code au début :s
et j'peux pas supprimer mon gros paté :s

j'retourne test :s

logtt
Invité n'ayant pas de compte PHPfrance

09 févr. 2011, 23:32

bon boh non :/

quand meme pas avec :
if (strlen($_REQUEST['bonbon'])>0 && $_REQUEST['bonbon'] != "5+")
  $query .= "and bonbon in (".mysql_real_escape_string(join(",",$bonbon)).") ";
else // cas du 5+
  $query .= "and bonbon >= 5";

:/

ViPHP
xTG
ViPHP | 7331 Messages

10 févr. 2011, 00:16

Remplaces tes $_REQUEST par $_POST déjà, la variable $_REQUEST est dépréciée il me semble, car elle permet d'accéder à toutes les super-globales à la fois et ça fout le tintouin.

Ensuite fais donc un echo de la variable $_POST['bonbon'] en ayant sélectionné l'option 5+ et tu pourras corriger le code en conséquence.

ViPHP
AB
ViPHP | 5818 Messages

10 févr. 2011, 18:43

Pour poursuivre un peu l'explication de xTG si tu clique sur ce lien tu constate que $_REQUEST retourne les variables $_GET, $_POST et $_COOKIE.
Donc dans cette configuration, même si tu as déclaré la méthode $_POST dans ton formulaire (ce qui est recommandé) on pourra faire fonctionner ton code en rentrant comme adresse dans le navigateur : "http://www.tonsite.com/tapage.php?bonbon=4" puisque cela va générer une variable $_GET['bonbon']=4 qui sera interprétée par $_REQUEST. Bref c'est une faille dans ton code d'une part, et d'autre part cela t'interdit d'utiliser dans ton code une variable $_GET['bonbon'] ou $_COOKIE['bonbon'] (pour les même raisons car il y aura confusion de la part de $_REQUEST).

Donc il est plus que recommandé de récupérer le même type de variable que l'on a envoyée :wink:
Par exemple :

$bonbon = isset($_GET['bonbon']) ? $_GET['bonbon'] : 'valeur par défaut';

et ensuite tu travaille avec $bonbon

LogTt
Invité n'ayant pas de compte PHPfrance

10 févr. 2011, 19:41

ok merci :) j'vais corriger déjà cette faille :)
sinon j'ai fait un var dump ( j'présume que ca rend la meme chose que le echo) et le résultat est :

["piece"]=> array(1) { [0]=> string(2) "5+" }

du coup ca m'avance pas beaucoup plus :/ ta proposition me plaisait bien tu as une idée du pourquoi elle ne marche pas ?

ViPHP
AB
ViPHP | 5818 Messages

10 févr. 2011, 21:24

C'est pas prudent d'utiliser strlen car tu auras des problèmes si tu utilise l'utf8, et je vois pas pourquoi tu t'embête avec ça.
Pourquoi ne pas faire plus simple en renvoyant le nombre 5 dans le choix 5+ parce que là tu arrives à compliquer quelque chose de simple à l'origine. Ainsi tu pourrais faire :
<?php
// pour voir le contenu du post
echo '<pre>';
print_r($_POST);
echo '</pre>';

$bonbon = isset($_POST['bonbon'])? intval($_POST['bonbon']) : null;

if (isset($bonbon))
	{
		//...
		
		if ($bonbon >= 5) 
			{
			//ton code;
			}
			else  
			{
			//ton code;
			}
	}

?>

Et puis tu as apparemment un problème de choix des input car par principe les checkbox sont fait pour des choix multiples (on peut cocher plusieurs checkbox) or dans ton exemple tel que tu l'énonce il faudrait faire un choix unique donc ce sont les boutons radio qui sont prévus pour ça (ou un select simple).
Modifié en dernier par AB le 10 févr. 2011, 22:39, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

10 févr. 2011, 21:36

ok merci :) j'vais corriger déjà cette faille :)
sinon j'ai fait un var dump ( j'présume que ca rend la meme chose que le echo) et le résultat est :

["piece"]=> array(1) { [0]=> string(2) "5+" }

du coup ca m'avance pas beaucoup plus :/ ta proposition me plaisait bien tu as une idée du pourquoi elle ne marche pas ?
L'accès actuel à la valeur est donc incorrect.
Pour avoir le 5+ il faut faire : $_POST['bonbon']['piece'][0]
Assez bizarre comme variable... Il serait bon de revoir le formulaire et d'y inclure les conseils de AB. ;)

Eléphanteau du PHP | 10 Messages

11 févr. 2011, 09:23

Tu as essayé avec un switch ?
$bonbon = $_POST['bonbon'];

switch($bonbon){
case 1 :
case 2 :
case 3 :
case 4 :
//code à effectuer quand on selectionne 1, 2, 3 ou 4;
break;

default :
//code à effectuer quand on selectionne 5+
break;

}

Non ?

ViPHP
AB
ViPHP | 5818 Messages

11 févr. 2011, 21:21

Tu as essayé avec un switch ?
$bonbon = $_POST['bonbon'];

switch($bonbon){
case 1 :
case 2 :
case 3 :
case 4 :
//code à effectuer quand on selectionne 1, 2, 3 ou 4;
break;

default :
//code à effectuer quand on selectionne 5+
break;

}

Non ?
C'est correct, mais ce n'est pas la meilleure utilisation de switch car dans ce cas le parseur va comparer la valeur de $bonbon avec les quatre 4 cases (revient à faire quatre "if").
Si on peut remplacer par une seule condition c'est mieux.
Par exemple si Logtt tient à renvoyer 5+ comme valeur dans son formulaire, on pourrait faire simplement :
<?php
// pour voir le contenu du post
echo '<pre>';
print_r($_POST);
echo '</pre>';

$bonbon = isset($_POST['bonbon'])? $_POST['bonbon'] : null;

if (isset($bonbon))
	{
		//...
		
		if (is_numeric($bonbon)) 
			{
			echo 'yes';
			}
			else  
			{
			echo 'no';
			}
	}
?>
Ici la condition pour tester la valeur de $bonbon se résume au seul test de is_numeric. On pourrait être plus rigoureux en faisant :
if (is_numeric($bonbon) && $bonbon < 5 && $bonbon > 0)
Au total trois conditions mais qui n'augmenteront pas si on augmente le nombre de choix alors que dans ton exemple tu devras compléter ton switch avec autant de lignes. :wink:

Logtt
Invité n'ayant pas de compte PHPfrance

22 févr. 2011, 12:03

hello!

j'reviens de "vacance" :D, bon j'avoue que d'avoir quitté mon ami php pendant une semaine je suis noyé là :D. Merci pour vos conseils je vais essayer de bien comprendre ce que AB à expliqué pour le mettre en place :).