Conditions formulaire

Eléphant du PHP | 297 Messages

31 oct. 2006, 17:20

Bonjour,
Je reviens de nouveau avec mon cas de choix de transporteur sur une page panier...
Je propose donc un deuxieme choix de transporteur(lettre uniquement) au client si le poids total est inferieur a 250grs. Si le poids total est superieur a 250grs, le deuxieme transporteur n'apparait pas ! simple !
Par contre en plus du poids j'ai un deuxieme critere et c'est la que je bloque.
Il y'a des produits legers, mais volumineux, donc qui malgré leur faible poids ne seront pas compatibles avec ce deuxieme transporteur.
Je pense ajouter dans la base des produits une colonne lettre, en precisant pour chaque produits si il est compatible ou pas avec un envoi par lettre.
Dois je integrer ce nouveau champs dans ma liste panier afin de faire la verif ?
Mais comment coder ceci dans mon formulaire transport ???

merci de votre aide...

voici mon formulaire transport
<form action="panier.php" method="post" name="transport" id="transport">
                              <div align="center">
                                <table width="100%"  border="0" align="center" cellspacing="0">
                                  <tr>
                                    <td>                                      <span class="corps_text_moyen">
                                      <input name="transporteur" type="radio" value="tnt" checked>
                                    TNT</span></td>
                                    <td>                                     <?php 
if  ( $poids < $POIDS_COLIS[1]) {?>

<span class="corps_text_moyen">
<input type="radio" name="transporteur" value="correo">
CORREO </span><?php }?></td>
                                    <td class="corps_text_moyen">&nbsp;</td>
                                    <td colspan="2">&nbsp;</td>
                                  </tr>
                                  <tr>
                                    <td width="20%"><div align="center">
					<?php /* Dans cet exemple, je suppose que la liste des pays est stockée 
                          dans une variable de type tableau à 2 dimensions du nom de 
                          $LISTE_PAYS, mais tu peux très bien avoir choisi une autre solution... */ 

                            echo "<select name='pays'>"; 
                            for($i=0 ; $i<sizeof($LISTE_PAYS) ; $i++) 
                                { 
                            echo "<option value='".$LISTE_PAYS[$i]['valeur']."'"; 
                            if($_SESSION['pays'] == $LISTE_PAYS[$i]['valeur']) echo "selected"; 
                            echo ">".$LISTE_PAYS[$i]['nom']."</option>"; 
                                } 
                            echo "</select>";

					
					        $zone = $ZONE_PAYS[$pais];
					        $total2=$TARIF_COLIS[$zone][$tranchepoids]*0.75;
 		                    $total3=($TARIF_COLIS[$zone][$tranchepoids]*0.75) + $total;
                      
					        $_SESSION['zone']=$zone;//mAj de la zone de livraison
                            $_SESSION['total2']=$total2;//mAj du total2 dans la session
					        $_SESSION['total3']=$total3;//mAj du total3 dans la session
                   ?>           
                                    </div></td>
                                    <td width="20%"><div align="center">
                                        <input name="zonepays" type="submit" id="zonepays" value="CALCULER">
                                    </div></td>
                                    <td class="corps_text_moyen"><div align="center">Zone:<?php echo $zone ?></div></td>
                                    <td colspan="2"><div align="center" class="corps_text_grand">
                                      <div align="right">Cout du transport:
                                            
                   <?php echo $total2 ?> &euro;</div>
                                    </div>                                      <div align="center"></div></td>
                                  </tr>
                                  <tr bgcolor="#CC6633">
                                    <td colspan="5"><div align="center" class="corps_text_moyen_blanc"> PRIX TOTAL ARTICLE(S) + LIVRAISON </div></td>
                                  </tr>
                                  <tr>
                                    <td width="20%"><div align="center">  </div></td>
                                    <td colspan="4"><div align="right" class="corps_text_grand">Cout total: <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong><?php echo $total3 ?> &euro;</strong></font></div></td>
                                  </tr>
                                </table>
                              </div>
                            </form>
[/url]

Invité
Invité n'ayant pas de compte PHPfrance

31 oct. 2006, 18:23

Mais comment coder ceci dans mon formulaire transport ???
En modifiant tout simplement ton test sur le poids et en ajoutant un critère spécifiant le gabarit :

Code : Tout sélectionner

Si (poids < 250g ET gabarit va bien) Alors enveloppe
Quant à savoir si le gabarit va bien, tu peux soit trimbaler la valeur dans ton panier, soit interroger la base quand tu en as besoin :)

Eléphant du PHP | 297 Messages

31 oct. 2006, 18:35

:) merci...mais c'est la que je coince.
la condition 'si gabarit va bien', je ne sais pas la faire.
En admettant que dans ma table produits, j'ai un champs 'enveloppe' pour savoir si ce produit peut etre expedier par enveloppe, je ne sais pas comment rajouter cette condition à cet endroit
<?php 
if  ( $poids < $POIDS_COLIS[1]) {?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 nov. 2006, 12:24

Ben ça dépend un peu de ton fonctionnement... de manière générale je dirais qu'il faut aller chercher dans ta base (ou dans ton panier si tu y place l'information), pour le ou les éléments présent dans le panier, si l'un d'entre eux au moins ne rentre pas dans une enveloppe. Si tu en trouves au moins un, ta condition est fausse et donc tu ne propose pas ce choix :)

L'idée serait donc d'exécuté une requête sql du genre

Code : Tout sélectionner

SELECT COUNT(*) AS nb // compte le nombre d'élément FROM maTable WHERE enveloppe = 'NeRentrePasDansUneEnveloppe' // ou 'F', ou 0, ou ce que tu mets dans ton champ ;) AND idDeMonArticle IN (laListeDesIdArticleDeMonPanierSéparésParDesVirgules
Si le résultat est supérieur à zéro, c'est que ca ne rentre pas dans ton enveloppe :)

Ensuite tu peux modifier le if comme suit :
// mysql_query + mysql_fetch
if  ( $poids < $POIDS_COLIS[1] && $requete['nb'] == 0) {
  ...
}

// ou bien optimiser un peu et ne faire la requête que si le poids est bon (vu que sinon l'affaire est déjà reglée

if  ( $poids < $POIDS_COLIS[1] ) {
  // mysql_query + mysql_fetch
  if ( $requete['nb'] == 0) {
    ...
  }
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 297 Messages

01 nov. 2006, 15:33

salut Ryle,
le solution de chercher dans le panier me parait bien !
mais je ne sais pas executer une requete sur le panier :cry:
voici mon panier
if ($ajoutPanier=="AJOUTER")
{
	$ref=$_GET['ref'];
	$nb=1; //par défaut la quantité est = 1
	$prix=$_GET['prix_ttc'];
                $enveloppe=$_GET['env'];
	$liste[]=array($ref,$nb,$prix,$enveloppe);
	$_SESSION['liste']=$liste;
	//ajoute un article à la liste
}
j'ai donc ajouté une info enveloppe dans ma liste panier (et dans ma base une colonne 'env' avec F ou rien, mais je ne vois pas comment aller verifier dans le contenu panier si il y a un article qui indiquerait 'F' pour $enveloppe...
merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 nov. 2006, 11:03

Comment fais tu pour connaitre le poids de ton colis ? d'où viennent tes $poids et $POIDS_COLIS[1] ? Car c'est à ce moment là qu'il te suffit de vérifier si le format permet l'enveloppe ou pas :)

Sinon concernant ton panier, fait un print_r($_SESSION['liste']); tu verras que ton panier est un tableau à deux dimensions, ou plus simplement un tableau de tableaux.
Si par exemple tu interroges $_SESSION['liste'][1][3], cela te retournera le quatrième élément (l'index commence à zéro), du deuxième (idem pour l'index) tableau contenu dans ta variable $_SESSION['liste'] (en supposant qu'il soit renseigné)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 297 Messages

02 nov. 2006, 14:54

Salut Ryle
et merci,
j'y vois plus clair concernant le fonctionnement du panier en l'affichant !!
j'ai rajouté ma colonne 'lettre' dans ma base avec O ou N, j'ai fait en sorte que chaque produit qui passe dan sle panier embarque cette info.
Par contre j'ai pas pigé comment interroger toutes les lignes des articles qui se trouvent dans le panier. Faut il que je fasse une boucle ??