Problème avec un IF

4 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour à tous,

Je ne sais pas si c'est parce que j'ai la tête dans le guidon mais je ne comprends pas ce qui se passe.

Dans le panier, vous pouvez ajouter des bouteilles ou des magnums car vous ne pouvez commander par ex que 6, 12 ou 18 bouteilles et 1, 3 ou 9 magnums.

Ma quantité total de bouteilles est stockées dans la variable $total_type_75cl

Ma quantité total de magnums est stockées dans la variable $total_type_magnum

Lorsque j'affiche le caddie, je demande si ces deux variables sont pleines et je contrôle si elles correspondent aux critères d'envoi soit 6, 12 et 18 bouteilles et 1, 3 ou 9 magnums. et c'est là où les problèmes commencent...

voici le code dans le panier :

/* PANIER PLEIN */

if (!empty($_SESSION['caddie']->total_type_75cl) || !empty($_SESSION['caddie']->total_type_magnum)) { 


	$controle_type_75cl = $_SESSION['caddie']->total_type_75cl;

	$controle_type_magnum = $_SESSION['caddie']->total_type_magnum;

	/*1. Traitement des erreurs */

	$message_erreur = valide_type_bouteille($controle_type_75cl, $controle_type_magnum, $erreurs);

}


if (empty($message_erreur)) {


	echo '<p>caddie_ok</p>'; //test

	echo '<br />';//test

	echo var_dump($message_erreur).' <br />';//test


	include ("gabarit/caddie_ok.php");

}

if (!empty($message_erreur)) {


	echo '<p>caddie_no</p>'; //test

	echo '<br />';//test

	echo var_dump($message_erreur);//test


	include ("gabarit/caddie_no.php");


}
Voici la fonction qui fonctionne mais n'est pas complète :
function valide_type_bouteille($controle_type_75cl, $controle_type_magnum, &$erreurs) {

$erreurs = array();

$msg = array();


if ($controle_type_75cl <> 6) {

$erreurs['controle_type_75cl'] = true;

$msg['controle_type_75cl'] = "» votre panier doit contenir 6, 12, 18, 24, 36, 48, 60, 72, 84 ou 96 bouteilles de 75 cl.";

} 


if ($controle_type_magnum <> 1) { 

$erreurs['controle_type_magnum'] = true;

$msg['controle_type_magnum'] = "» votre panier doit contenir 1, 3, 6, 12, 18 ou 24 magnums.";

} 

return $msg;

}
Comme vous pouvez le voir cela ne contrôle que sur 1 seul critère. J'ai donc voulu créer une boucle et c'est là où j'ai besoin d'aide car elle ne fonctionne pas !
function valide_type_bouteille($controle_type_75cl, $controle_type_magnum, &$erreurs) {

$erreurs = array();

$msg = array();

$bouteille = array('6','12','18','24','36','48','60','72','84','96');

$magnum = array('1','3','6','12','24');


foreach ($bouteille as $valeur) {

		if ($controle_type_75cl != $valeur) { 

			$erreurs['controle_type_75cl'] = true;

			$msg['controle_type_75cl'] = "» votre panier doit contenir 6, 12, 18, 24, 36, 48, 60, 72, 84 ou 96 bouteilles de 75 cl.";	

		}

}	


foreach ($magnum as $valeur) {

		if ($controle_type_magnum != $valeur) { 

			$erreurs['controle_type_magnum'] = true;

			$msg['controle_type_magnum'] = "» votre panier doit contenir 1, 3, 6, 12, 18 ou 24 magnums.";	

		}

}

return $msg;

}

Avec les foreach, le panier est toujours faux.

A l'avance merci pour votre aide

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Personne n'a une idée pour m'aider. Je bloque toujours sur ce problème de logique...

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Répose rapide à priori :

function valide_type_bouteille($controle_type_75cl, $controle_type_magnum, &$erreurs) {

$erreurs = array();

$msg = array();

if ($controle_type_75cl <> 6) {

$erreurs['controle_type_75cl'] = true;

$msg['controle_type_75cl'] = "» votre panier doit contenir 6, 12, 18, 24, 36, 48, 60, 72, 84 ou 96 bouteilles de 75 cl.";

}

elseif ($controle_type_magnum <> 1) {

$erreurs['controle_type_magnum'] = true;

$msg['controle_type_magnum'] = "» votre panier doit contenir 1, 3, 6, 12, 18 ou 24 magnums.";

}

return $msg;

}

Bonjour Éric,

En fait, c'est plus complexe que cela car vous avez le droit de commander 6 bouteilles et 1 magnum par ex. ou encore 12 bouteilles et 3 magnums.

En revanche, vous ne pouvez pas commander 3 bouteilles et 1 magnums. La quantité de magnum est bonne mais pas la quantité de bouteilles.

En mettant des marqueurs de test dans le code voici le résultat du foreach lorsque mon panier contient 6 bouteilles et 0 magnum :

$controle_type_75cl = 6

$controle_type_magnum = 0

valeur $bouteille = 0 - $erreur = 1

valeur $bouteille = 12 - $erreur = 1

valeur $bouteille = 18 - $erreur = 1

valeur $bouteille = 24 - $erreur = 1

valeur $bouteille = 36 - $erreur = 1

valeur $bouteille = 48 - $erreur = 1

valeur $bouteille = 60 - $erreur = 1

valeur $bouteille = 72 - $erreur = 1

valeur $bouteille = 84 - $erreur = 1

valeur $bouteille = 96 - $erreur = 1

valeur $magnum = 1 - $erreur = 1

valeur $magnum = 3 - $erreur = 1

valeur $magnum = 6 - $erreur = 1

valeur $magnum = 12 - $erreur = 1

valeur $magnum = 24 - $erreur = 1


caddie_no

Vous remarquez que entre valeur $bouteille = 0 - $erreur = 1 et valeur $bouteille = 12 - $erreur = 1

Il n'y a pas valeur : $bouteille = 6 - $erreur = 1

Je suis totalement perdu. L'écriture de mon foreach en soi est bon mais la logique est mauvaise.

Merci de votre aide

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping