Panier et gestion de la quantité (base de données)
gatounec
Messages postés3Date d'inscriptionmercredi 12 mai 2004StatutMembreDernière intervention21 octobre 2004
-
24 août 2004 à 15:28
adilol
Messages postés14Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention13 décembre 2009
-
20 avril 2008 à 05:06
Bonjour,
Je crée actuellement un panier virtuel mais contrairement à la majorité des codes que j'ai pu trouvé, il utilise la base de données avec une table temporaire.
But :
gérer la disponibilité des articles. Chaque fois qu'un article est ajouté au panier, une ligne vient s'ajouter dans une table LigneAchat (idpanier,idarticle,qte,....) Cela pour une durée de 5mn. Au delà le panier est supprimé et cela libère les articles.
Actuellement cela fonctionne très bien. Je calcule la disponibilité des articles en fonction des articles vendus et des articles momentanément en cours d'achat.
Par contre j'ai 2 questions :
- comment faire pour supprimer les paniers temporaire dont le délai est dépassé ? J'ai fait un trigger sur ma bdd à chaque ajout au panier mais je pense pas que cela soit assez efficace.
- Comment pensez que cela soit géré ?
gatounec
Messages postés3Date d'inscriptionmercredi 12 mai 2004StatutMembreDernière intervention21 octobre 2004 24 août 2004 à 22:57
Merci pour ta réponse
en fait j'ai mis en place cette solution mais j'aurais aimé savoir s'il y avait une méthode plus " professionnelle ".
Actuellement je fais le système avec l'expiration et je fais une vérif à chaque modification d'un panier. Cette vérif consiste a supprimer le panier temporaire du gars logué puis supprime tous les autres panier temporaires dépassé.
Mais bon je me demande si ce n'est pas trop lourd où si y a pas plus efficace (trigger, procédure stockée ou encore gestion via code php)
kofu
Messages postés25Date d'inscriptionvendredi 2 janvier 2004StatutMembreDernière intervention15 mars 2005 19 oct. 2004 à 16:04
Salut !
Il n'y a pas de manière plus professionnelle qu'une autre à mon avis
Si tu as un accès total à ton serveur :
Installe y un browser
Crée un script php qui génère une page blanche, qui se recharge toutes les X secondes (à l'aide d'un javascript)
A chaque chargement de la page, tu peux ajouter autant d'instruction de maintenance que tu veux.
C'est peut être du bricolage, mais ça fonctionne à merveille, et c'est très simple à modifier (maintenance ou jour, maintenance toujours! )
Sinon, tu peux faire une procédure stockée qui s'éxecute au lancement de ta SGBD, avec une boucle dans laquelle tu fais un timer
Le problème, c'est qu'il faut que tu maîtrise le PL/SQL ...
En espérant t'avoir été utile ....
Vous n’avez pas trouvé la réponse que vous recherchez ?
charles303
Messages postés2Date d'inscriptiondimanche 11 décembre 2005StatutMembreDernière intervention13 août 2007 1 août 2007 à 06:32
Bonjour,
je suis en train de crée un caddie pour mon site avec bases de données en
fait il se trouve que je n'arrive pas a le mettre en place , il me met toujours
le même message d'erreur <!--[if gte vml 1]><v:shapetype id= "_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:11.25pt;
height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\admin\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="http://www.phpcs.com/imgs2/smile_blush.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
"Parse error : syntax error, unexpected T_STRING, expecting
T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in"
Je n'ai pas fait d'autres pv parce que je pence que c'est en relation
-------------------------
Voici mon code:
<?php require_once('Connections/maugisconect.php'); ?>
<?php
mysql_select_db($database_maugisconect, $maugisconect);$query_rs_pani "SELECT * FROM t_panier, t_vari WHERE panier_rub vari_id ORDER BY prix ASC";
$rs_pani = mysql_query($query_rs_pani, $maugisconect) or die(mysql_error());
$row_rs_pani = mysql_fetch_assoc($rs_pani);
$totalRows_rs_pani = mysql_num_rows($rs_pani);
class Panier {
private $panier = array();
// constructeur
function __construct(){ // constructeur
@session_start();
if (!isset($_SESSION['cart'])) $_SESSION['cart']=array();
$this->panier =& $_SESSION['cart'];
}
// ajouter un article $refproduit
public function addItem($refproduit="",$nb=1){
@$this->panier[$refproduit]['quantity'] += $nb;
if ($nb <= 0) unset ($this->panier[$refproduit]);
}
// supprimer un article $refproduit
public function removeItem($refproduit="",$nb=1){
@$this->panier[$refproduit]['quantity'] -= $nb;
if ($nb <= 0) unset ($this->panier[$refproduit]);
}
// choisir la quantité d'article $refproduit
public function setQuantity($refproduit="",$toSet=""){
@$this->panier[$refproduit]['quantity'] = $toSet ;
if ($toSet <= 0) unset ($this->panier[$refproduit]);
}
// afficher la quantité de produits dans le panier
// paramètre : $refproduit : permet d'afficher la quantité pour le produit de cette référence
// si le paramètre est vide, on affiche la quantité totale de produit
public function showQuantity($refproduit=""){
if ($refproduit) {
return $this->panier[$refproduit]['quantity'];
}else{
$total = 0;
foreach($this->panier as $ref => $data) {
$total += $data['quantity'];
}
}
return $total;
}
// afficher la liste des articles (et accessoirement, leur quantité)
public function showCart(){
$list = array();
$i = 0;
foreach($this->panier as $ref => $data) {
$list['ref'][$i] = $ref;
$list['qte'][$i] = $data['quantity'];
$i++;
}
return $list;
}
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 13 août 2007 à 12:37
Le meilleur sous serveur appache pour générer des taches de maintenance automatiques, est d'utiliser les taches CRON.
http://fr.wikipedia.org/wiki/Crontab Ces taches permettent par exemple d'executer un code tous les x temps. Et c'est mieux que d'utiliser un navigateur sur serveur distant.
++
----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
coockiesch
Messages postés2268Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention13 septembre 20134 13 août 2007 à 19:06
Salut!
Ca dépend... "Bien mieux" dépend de ce que tu fait: pas besoin d'utiliser un cron si certains éléments qui devraient être supprimés ne sont visibles que par des visiteurs: il ne gênent pas si personne ne les voit... Et tant que personne ne vient, ca n'augmente pas, donc vive le navigateur, ^^
@++
R@f
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
adilol
Messages postés14Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention13 décembre 2009 20 avril 2008 à 05:06
bonjour tout le monde,
SVP,aidez moi,j ai un probleme a resoudre dans 24h c tellement urgent.
voici le probleme:
je dois creer un trigger qui fait afficher un message d erreur ou changer etat de la commande si date_livraison est moins de 3 jours de la date_commande.
je vous transmis ce que j ai pu faire et aussi l enoncé du probleme et la table commande.
merci
et aussi je dois creer un trigger qui fait automatiquement la mise a jour de la qte en stock.
merci beaucoup
voici mon email: adilmy@hotmail.com
Pour une commande standard (achat d'un bouquet standard), la cyberboutique
garantit la disponibilité en inventaire des items composant le
bouquet seulement si la commande a été passée au moins 3 jours avant la
date de livraison. Pour les commandes standards effectuées moins de 3
jours avant la date de livraison, c'est le client qui assume le risque. Il est
donc très important d'informer ces clients d'une éventuelle pénurie. L'état
de la commande sera alors « VINV »
-------------------------------------------
table commande.
CREATE TABLE Commande (
no_Commande INTEGER NOT NULL CONSTRAINT pk_Commande PRIMARY KEY,
courriel VARCHAR (40) NOT NULL,
date_Commande DATE NOT NULL,
date_livraison DATE NOT NULL,
adresse_Livraison VARCHAR(80) NOT NULL,
message_Arrangement_Floral VARCHAR(80) NOT NULL,
etat_commande VARCHAR(80) NOT NULL,
code_etat CHAR(10) NOT NULL,
typeCommande VARCHAR(80) NOT NULL,
CONSTRAINT fk_Commande_Client FOREIGN KEY (courriel) REFERENCES Client (courriel),
CONSTRAINT chk_typeCommande CHECK (typeCommande IN('commandeStandard','commandePersonalisee'))
);
BEFORE INSERT
ON COMMANDE
FOR EACH ROW
BEGIN
IF (:new.date_commande = :new.date_livraison - 3 )
THEN raise_application_error(-20001,'état de commande est VINV,le client assume le risque de penurie');
END IF;
END;