Modification des quantités ds un panier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Modification des quantités ds un panier

par alcofribas » 26 sept. 2005, 11:54

Bon, après vérification, il y a bien un "Modifier", sans problème de casse.

Le test de bébogage me retourne la quantité envoyée depuis la page produit, soit $_POST("quantite"), et cette même quantité lorsque je tente la modification.

Voici le code de la fonction :
function verif_qt_art($refprod)
{ 
    /* On initialise la variable de retour */ 
    $nombre = false;
    /* Comptage du panier */ 
    $nb_art = count($_SESSION['caddie']['produit']['reference']);
   
    for($i = 0; $i < $nb_art; $i++)
    {
        if($_SESSION['caddie']['produit']['reference'][$i] == $refprod)
        {
        $nombre = $_SESSION['caddie']['produit']['quantite'][$i];
        }
    }
    return $nombre;
}

par sadeq » 26 sept. 2005, 11:04

Vérifie plutôt si l'exécution entre dans le test
if (isset($_POST["Modifier"])
avant de juger. Effectue pour cela un débogage en mettant une echo à l'intérieur du traitement de modification.
Si l'exécuteur n'entre pas dans le vrai du if, tu dois vérifier si il y a bien un bouton nommé "Modifier" dans le formulaire en respectant la casse.

Si tout est ok et que rien ne se passe, l'erreur peut se situer au niveau du test
// verif_qt_art = vérification des quantités d'un produit appelée depuis verif_qt.php // 
if(verif_qt_art($refprod) != false && $qt != verif_qt_art($refprod)) 
{..
 
Car à ce niveau il y'a 2 choses qui vont pas logiquement d'autant plus que je ne peux me prononcer sur le fonctionnement de la dite fonction vu qu'on voit pas son code.
De 1 : elle parrait retourner un true ou false et en même temps elle est comparée à la quantité, ceci est absurde
Et de 2: la fonction est appelée par deux fois dans la condition du if ce qui est déconseillé (double exécution = perte de temps)

Ce qui serait logique est de lui passer l'article et la quantité à vérifier et qu'elle retourne true ou false. Et dans ce cas un test de cette forme serait plutôt juste :
// verif_qt_art = vérification des quantités d'un produit appelée depuis verif_qt.php // 
if(verif_qt_art($refprod, $qt) != false) 
{ 

par alcofribas » 26 sept. 2005, 10:13

Non, même en retournant cette variable ça ne fonctionne pas.
Est-il possible que le code confonde les 2 $qt = $_POST("quantite"): celui venant du formulaire de la page produit et celui du formulaire du panier lui-même?

par sadeq » 26 sept. 2005, 09:53

Le problème est que ta fonction :
function modif_qte($refprod, $qt) 
{ 
.....
ne retourne pas de résultat. t'as oublié un
return $modifie;
à la fin de la fonction

Remarque: ça sert à rien d'envoyer ton message par deux fois. Une seule fois suffit. Si t'as pas de réponse tout de suite soit patient.

Modification des quantités ds un panier

par alcofribas » 23 sept. 2005, 10:20

(Pardon, je reposte le message: autre sujet un peu différent)

Merci encore pour ton tuto Cyrano , ça m'a permis de résoudre bien des problèmes

Mais je bloque sur la fonction de modification des quantités dans le panier. Je pense qu'il y a un problème avec la fonction de vérification des produits présents, qui permet d'éviter les embrouilles avec la navigation par flèches et les rechargements impromtus...: je demande l'affichage de la qt dans une zone input et lorsque j'envoie le formulaire, la quantité redevient la quantité initiale... Ben oui.

J'y ai passé toute la journée hier, sans succès. A court d'aspirine, je vous envoie mon script pour que vous me le critiquiez: tout fonctionne sauf la partie if(isset($_POST("Modifier"))... Suit la méthode d'affichage, peut-être fautive aussi?
if(!isset($_SESSION['caddie'])) 
{ 
$_SESSION['caddie'] = array( 
"session"=> session_id(), 
"aujourdhui" => date("d-m-Y"), 
"produit" => array( 
"reference" => array(), 
"quantite" => array(), 
"prixunitaire" => array(), 
"prixactuel" => array(), 
"totalproduit" => array(), 
"acompteproduit" => array(), 
"soldeproduit" => array(), 
), 
"facture"=> array ( 
"total" => array( 
"total" => array(), 
"acompte" => array(), 
"solde" => array(), 
), 
"clients" => array( 
"nom" => array(), 
"prenom" => array(), 
"adresse" => array(), 
"codepostal" => array(), 
"batiment" => array(), 
"etage" => array(), 
"ville" => array(), 
"pays" => array(), 
"telephone" => array(), 
"email" => array(), 
) 
) 
); 
} 

require_once ('ref.php'); 
require_once ('refprod.php'); 

require_once ('deja.php'); 
// vérification de la présence du produit dans le panier//

if (isset($_POST["Commander"])){ 

if(!verif_panier($refprod)) 

{ 

array_push($_SESSION['caddie']['produit']['reference'], $refprod); 


$qt = $_POST["quantite"]; 

array_push($_SESSION ['caddie']['produit']['quantite'], $qt); 

require_once ('ac_px.php'); 

array_push($_SESSION['caddie']['produit']['prixunitaire'], $pu); 
array_push($_SESSION['caddie']['produit']['prixactuel'], $pa); 

require_once('montantprod.php'); 

$total_prod = total_prod(); 

array_push($_SESSION['caddie']['produit']['totalproduit'], $total_prod); 


require_once('acompteprod.php'); 

$acompte_prod = acompte_prod(); 

array_push($_SESSION['caddie']['produit']['acompteproduit'], $acompte_prod); 


require_once('soldeprod.php'); 

$solde_prod = solde_prod(); 

array_push($_SESSION['caddie']['produit']['soldeproduit'], $solde_prod); 

} 

} 


if (isset($_POST["Modifier"])) { 
require_once('verif_qt.php'); 

$refprod = $_SESSION['caddie']['produit']['reference']; 
$qt = $_POST["quantite"]; 

function modif_qte($refprod, $qt) 
{ 
$modifie = false; 
// verif_qt_art = vérification des quantités d'un produit appelée depuis verif_qt.php // 
if(verif_qt_art($refprod) != false && $qt != verif_qt_art($refprod)) 
{ 

/* Comptage des articles du panier */ 
$nb_articles = count($_SESSION['caddie']['produit']['reference']); 
/* Transfert du panier dans le panier temporaire */ 
for($i = 0; $i < $nb_articles; $i++) 
{ 

if($refprod == $_SESSION['caddie']['produit']['reference']) 
{ 
$_SESSION['caddie']['produit']['reference'] = $qt; 
$modifie = true; 
} 
} 
} 

} 

if (modif_qte($refprod, $qt) == true) 
{ 
array_push($_SESSION ['caddie']['produit']['quantite'], $_POST["quantite"]); 
} 
} 

require_once('coordclient.php'); 

require_once('Effacerpanier.php'); 

require_once('Effacerproduit2.php'); 
Et maintenant une partie de l'affichage du panier (ds le code html):
function recup_panier() 
{ 

$articles = 0; 

$articles = count($_SESSION['caddie']['produit']['reference']); 

for ($i = 0; $articles > $i; $i++) { 

$panier = '<form method="post" action="Panier.php"> 
<td align="center" colspan="6" style="text-align: left; vertical-align: middle; height: 40px;"> 

<span style="color: rgb(255, 255, 255); font-weight: bold;font-family: Optima;"> 

<b>'.$_SESSION['caddie']['produit']['reference'][$i].'</b> 
</span> 
</td>'; 
$panier .= '<td align="center" colspan="6" style="text-align: left; vertical-align: middle; height: 40px;"> 

<span style="color: rgb(255, 255, 255); font-weight: bold;font-family: Optima;"> 

<input value="'.$_SESSION['caddie']['produit']['quantite'][$i].'"maxlength="3" size="3" name="quantite"> 
.... 
} 

return $panier 

}


Alors???