Panier - comment ne pas passer variables ds l'url + CB ?

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 : Panier - comment ne pas passer variables ds l'url + CB ?

par coxine » 28 mars 2006, 11:54

oui merci !
J'ai lu attentivement ton tuto, c'est la raison pour laquelle j'en avais déduit que cela vient du "array".

Pourquoi aurais-je ce message d'erreur ?
Il ne prend pas en compte le texte de l'intitulé.
if (!isset($_SESSION['liste'])) $liste[]=array("VIDE",1,0,0,0);// init de la liste si vide
else $liste=$_SESSION['liste']; //recup de la liste de session
Est-ce que j'ai bien paramétré le tableau ? sachant que j'ai 4 colonnes ?
Ou bien, il faut que je cherche pourquoi une variable de type : string ne veut pas s'insérer dans la table.
Alors que si je change l'intitulé pour la date, alors là, pas de pbs...cela s'insère correctement.
:?

Edit par moi-même :
Oui c'est bien ça, en remplaçant l'offset [4] par la variable date_debut...ça fonctionne. Un petit tuyau pour transporter une variable de type "string" dans un tableau ? Avec un define settype ?
Alors : 13:56
J'ai initialisé le tableau de cette façon :
if (!isset($_SESSION['liste'])) $liste[]=array("VIDE",1,0,0,0,"VIDE");
en mettant "VIDE" à la place de '0', car c'est une chaine de caractères. L'enregistrement s'effectue bien. Si Cyrano tu passes par là, tu peux me confirmer que je fais BONNE route ?
Merci de ton aide !! :wink:

par Cyrano » 28 mars 2006, 11:25

Bon, effectivement, le problème vient de la manipulation des tableaux : as-tu lu en détail mon tuto sur les paniers ? Les réponses s'y trouvent généralement largement commentées et en commence précisément par construire le panier en tableau même si j'annonce que je n'aborderai pas les détails des fonctions spécifiques aux tableaux, tu trouveras les liens vers les fonctions facilement dans la doc.

par coxine » 28 mars 2006, 11:06

tu as raison Cyrano, je vais mieux expliquer la problématique : :lol: :oops:
- J'ai une page catalogue.php avec la liste des produits et un lien cliquable : ajouter au panier. Je transfère par l'url ($_GET), les caractéristiques du produit.

Dans ma page panier.php :
Je commence par la condition : si on a ajouté un article (donc cliqué sur le lien) alors on met les variables en session dans un tableau.
if ($ajoutPanier=="AJOUTER")
{
	$ID_session=$_GET['ID_session'];
	$nb=1; //par défaut la quantité est = 1
	$prix=$_GET['prix'];
	$liste[]=array($ID_session,$nb,$prix,$prix);
	$_SESSION['liste']=$liste;
	//ajoute un article à la liste
}
Plus bas, pour afficher les articles sélectionnés :
<?php
		   	$total=0.00;
		   	for ($i=0;$i<count($liste);$i++)
			{
			$query_Panier="SELECT * FROM sessions where ID_session = '".$liste[$i][0]."'";
			//echo $query_Panier;
			$rsPanier = mysql_query($query_Panier, $connexion) or die(mysql_error());
    		$row_Panier = mysql_fetch_assoc($Panier);		
			?>
Tout fonctionne.
Dans le panier, si l'on clique sur "commander", on est dirigé vers un écran d'authentification, puis sur la page liste de mes commandes.
Le petit souci que j'ai est d'afficher le "détail" qui est lié à la référence sur la page "commande.php".
Je n'affiche pour le moment que la référence, la quantité, et le prix. Normal mon tableau ne contient que ces trois variables.
Dans mon exemple, la référence s'appelle : ID_session.

J'ai 4 tables organisées de la façon suivante :
- les cours.....avec ID_cours, description, prix, etc...
- les sessions : ID_session, ID_cours, date, total participants
- les listes : ID, commandeID, ID_session, qauntite, prixCours. Cette table est enrichie à chaque fois que l'on clique sur commander.
- les commandes : ID, date_cde, clientID, etat (attente/vadidee) et total. Cette table est également enrichie à chaque clic sur commander et est destinée à l'administrateur du site pour qu'il gère les commandes et en modifie l'état.
Voici le tableau que je reprends sur la page commande.php
for ($i=0;$i<count($liste);$i++)
	{
	$ID_session=$liste[$i][0]; //récup de la ref du cours dans le panier
	$quantite=$liste[$i][1]; // récup de la quantité du cours dans le panier
	$prixCours=$liste[$i][3]; // récup du prix total de ces cours (nb*prix unitaire) dans le panier
	// INSERTION DES PARAMETRES DES ARTICLES DE LA COMMANDE
	$insertListe = "INSERT INTO listes (commandeID, ID_session, quantite, prixCours) VALUES ('$commandeID', '$ID_session', '$quantite', '$prixCours')";
// puis je fais des requêtes pour afficher la liste des commandes par client, et le contenu de la commande
if (isset($_GET['commandeID'])) {
//etc
Comme je ne maîtrise pas les tableaux....j'ai un peu de mal à l'initaliser dans ma page panier.
Mon tableau mémorise les infos :
[0] = référence
[1] = quantite
[2] = prix unitaire
[3] = prix total
J'ai essayé de rajouter l'intitule du cours :
$ID_session=$_GET['ID_session'];
	$nb=1; //par défaut la quantité est = 1
	$intitule=$_GET['intitule'];
	$prix=$_GET['prix'];
	$liste[]=array($ID_session,$nb,$prix,$prix,$intitule);
	$_SESSION['liste']=$liste;
	//ajoute un article à la liste
Puis dans la page commande :
//init de la liste: 
if (!isset($_SESSION['liste'])) $liste[]=array("VIDE",1,0,0,0);// init de la liste si vide, j'ai rajouté un '0'
else $liste=$_SESSION['liste']; //recup de la liste de session
.../...
for ($i=0;$i<count($liste);$i++)
	{
	$ID_session=$liste[$i][0]; //récup de la ref de l'article dans le panier
	$quantite=$liste[$i][1]; // récup de la quantité de cet article dans le panier
	$prixCours=$liste[$i][3]; // récup du prix total de ces articles (nb*prix unitaire) dans le panier
	$intitule=$liste[$i][4];//récup de l'intitule
	// INSERTION DES PARAMETRES DES ARTICLES DE LA COMMANDE
	$insertListe = "INSERT INTO listes (commandeID, ID_session, quantite, prixCours, intitule) VALUES ('$commandeID', '$ID_session', '$quantite', '$prixCours', '$intitule')";
J'ai deux problèmes :
1. l'enregistrement de l'intitulé ne se fait pas...
2. ce message avant l'affichage de la commande : Erreur de syntaxe près de 'Atelier du mercredi')' à la ligne 1
Est-ce que ça vient du fait que le type de valeur de la variable est une chaine et non un entier ?

Le premier souci dont j'ai parlé, était de récupérer les détails de la référence, une fois l'enregistrement fait. Comme ces derniers n'étaient pas dans le tableau du panier, ils changeaient à chaque fois que j'ajoutais un article dans la liste...et étaient tous identiques.
1. référence 1 -> blabla
2. référence 2 -> blabla et non 'bipbip'
Difficile d'être claire quand on débute :oops:

par Cyrano » 28 mars 2006, 09:33

:shock: J'ai pas compris grand chose.. :-k

Ce qui se conçoit bien s'énonce clairement et les mots pour le dire nous viennent aisément : en clair, essaye de délabyrinther un peu ce que tu veux exprimer en illustrant tes propos par des exemples simples : pas facile ? Dis-toi bien que si tu arrives à bien poser ta question, ça signifie que tu as compris la nature de la difficulté et que par conséquent elle est aux 3/4 résolue ;)

par coxine » 28 mars 2006, 09:07

Bonjour et merci de vos réponses !!!
Alors, je verrais pour les moyens de paiement, effectivement ce qui existe sur le marché !

Pour le panier, pour l'instant j'envoie la référence effectivement, la quantité, mais le prix aussi (unitaire) car on peut modifier le total en demandant par exemple 4 articles au lieu de 1.

La méthode AJAX, :lol: j'en ai entendu parler, il me faudra trouver des exemples pour voir comment l'implémenter.

Pour l'instant, j'en suis effectivement à mon "tableau"...ouch, un peu hardos, mais je vais y arriver ;-)
Le souci est que ma base est organisée de la façon suivante :
table 'produits' avec l'intitulé, descriptif, détails, prix....
table 'listes' (listes de commandes) avec
- ID
- commandeID
- référence
- quantité
- prix
pour que l'on puisse retrouver la liste de ses articles commandés.
table 'commandes'
- ID
- date_commande
- clientID
- Etat
- Total
Mais je suis entrain de me demander si c'est une bonne organisation...
Car comme je ne récupère que la référence, après il faut faire des requetes dans la base pour afficher le détail de l'article commandé. Ca va la première fois...mais comme je ne mets ces variables en session....la seconde fois que je réserve un produit différent du premier, les intitulés, descriptifs etc....(sauf le prix et la référence) changent et sont identiques pour toutes les lignes du panier !!! :shock:
Fo peut-être que je rajoute des enregistrements dans la table listes...
:oops:

par Ryle » 25 mars 2006, 19:09

(Tiens ça faisait longtemps ;))

A quoi correspondent tes variables horaires, date début, etc. que tu envois dans ton lien ? Pour moi les deux seules variables qu'il te faut passer en session sont l'identifiant de l'article, éventuellement la quantité, et selon, les informations saisies par l'utilisateur relatifs à cet article.

En gros, rien de ce que tu ne passes dans ton panier ne doit être "sensible" (comme ça ils peuvent modifier autant qu'ils veulent, cela ne correspondra qu'à leur saisie) et lors du résumé de la commande tu vas chercher en base les infos associées aux identifiants contenu dans le panier :)
La seule solution pour ne pas passer de variable dans l'url est de les envoyer en POST. Mais si tes données ne sont pas sensibles, qu'importe qu'elles apparaissent dans l'url le temps de les mémoriser en session et de revenir sur le catalogue :)

Après il reste la solution javascript ajax pour envoyer des données à un script php sans changer de page (sachant que ca peut se faire en post ou en get, mais qu'effectivement dans ce cas là, l'utilisateur ne verra pas l'url s'il n'édite pas le code source :))

Personnellement en session je ferais un tableau panier qui serait construit comme ça :
Array panier ( 
  idArticle1 => Array ( 
    'qte' => 1, 
    'preference' => xxx, 
    ...
  ),
  idArticle2 => Array (  
    'qte' => 3, 
    'preference' => xxx, 
    ...
  )
)
Et sur la page de récap, tu boucles sur ce tableau pour aller chercher en base le nom des produits, les prix, ... et présenter une jolie facture dont tu es sure qu'elle n'aura pas été bidouillée ;)

par DarkBlue » 25 mars 2006, 16:54

Hello ,

pour les panier sje ne suis pas encore assez calé mais une chose est sure :

http://jmolline.free.fr/tutos/tuto_panier.html

Ce tuto est l un des meilleurs que j ai trouvé , il peut surement t aider !

Pour le paiement en CB , ça depend de tes moyens , un module CB normal avec abonnement coute cjher donc il vaut mieu faire du chiffre !
PErsonelement j utilise Kadishop : http://www.kadishop.com/paiement-en-ligne

LE systeme est simple : Tu fais ton panier tu enregistre toutes tes donnes dans ta base , tu envoie simplement au module , le montant total a payer et un numero de commande (pour pouvoir identifier ta commande sur leurs serveurs) et le tour est joué !

[Edit moi meme] Il n y a pas d abonement tu paie seulement a chaques fois que tu te sert de leurs service soit 4% de ta transaction + 20 cts

Panier - comment ne pas passer variables ds l'url + CB ?

par coxine » 25 mars 2006, 15:22

Bonjour à tous.
Dans la suite de mon apprentissage :wink: , je souhaite développer un panier.
Depuis la page que j'appelle catalogue, j'affiche tous les produits dispos.
Le lien ajouter au panier est le suivant :
<a href="panier.php?ID_session=<?php echo $row_session['ID_session'];?>&date_debut=<?php echo $row_session['date_debut'];?>&horaires=<?php echo $row_session['horaires'];?>&...etc...&ajoutPanier=AJOUTER">r&eacute;server</a> 
C'est imbuvable hein :roll: de plus, je n'ai pas envie que la personne puisse modifier les variables dans l'url.
Dans la page panier, je récupère les variables.
if ($ajoutPanier=="AJOUTER")
{
	$ID_session=$_GET['ID_session'];
	$nb=1;
etc.....}
Comment pourrais-je faire ça de façon plus propre ? Une fonction JS ??
Merci de votre aide !

J'ai une seconde question :
Donc, catalogue -> ajout panier -> valider la commande = OK.
J'y suis arrivée sur la base de tutos et autres.
J'ai donc dans ma base, une table listes (les listes de commandes par personne) et une table "commandes" (=nombre de commandes passées et en attente de paiement).
Comment intégrer un moyen de paiement ? Lequel utilisez-vous ? Paypal, module CB bancaire ?