Se connecter avec
S'enregistrer | Connectez-vous
Votre question

[PHP] mettre des variable dans la base de donée.

Dernière réponse : dans Programmation
Partagez
19 Décembre 2008 19:35:41

bonjour.

je suis en train de crée un site e-commerce et j'ai un petit probléme.

quand on clique sur ajouter au panier cela envoi les variable produit et quantité vers la page update.php .

je voudrait que que la page update.php transfère les variable dans ma base de donnée.

dans la table "clients" et champ "panier". mais que cela soit le panier de l'utilisateur connecter .
(dans ma table clients se trouve les information sur les utilisateur enregistrer)
voici mon formulaire :

  1. echo '<form action="update.php" method="post">
  2. <label for="Qté">Qté :</label>
  3. <input type="text" name="quantiter" size="1" maxlength="10" value="' . $rows['cond'] . '"/>
  4. <input type="hidden" name="produit" value="'. $rows['code'] . '" />
  5. <input type="image" alt="ok" src="images/panier.jpg"/>
  6. </form>';



sur internet j'ai trouver des solution mais qui ne marche pas comme celle la:

  1. mysql_query("INSERT INTO clients ('panier') VALUES ('. $_POST['produit'] .''. $_POST['quantiter'] .'WHERE code = ' . $_SESSION['identifiant'] . ')");



je pense que pour que cela soit le panier de l'utilisateur connecter cette parti est bonne (enfin je pence car cela est la variable utiliser pour la connexion.

  1. WHERE code = ' . $_SESSION['identifiant'] . ')");


enfin voila j'attent l'avis de personnes plus expérimenter .


merci d'avance

Autres pages sur : php mettre variable base donee

19 Décembre 2008 20:09:51

Bien...

  1. mysql_query("INSERT INTO clients ('panier') VALUES ('. $_POST['produit'] .''. $_POST['quantiter'] .'WHERE code = ' . $_SESSION['identifiant'] . ')" );


De fait, il y a comme un probléme... Il n'est pas possible de faire un INSERT... WHERE... Si j'ai bien suivi, ce n'est pas un INSERT mais un UPDATE qu'il faudrait faire...

  1. mysql_query("UPDATE clients set panier='. $_POST['produit'] .''. $_POST['quantiter'] .' WHERE code = ' . $_SESSION['identifiant'] . '" );
19 Décembre 2008 20:33:55

la page s'appelle update mais le champ panier est vide donc il faut un INSERT non?

avec update cela ne marche pas non plus cela me marque un message d'erreur.

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Contenus similaires
20 Décembre 2008 01:17:29

Citation :
la page s'appelle update mais le champ panier est vide donc il faut un INSERT non?



Certes, mais la ligne contenant le champ code ne l'est pas... De fait, il n'y a pas création d'une nouvelle ligne, simplement une mise à jour, d'où l'utilisation d'UPDATE...

De toutes façons, il n'est pas possible de faire un INSERT... WHERE...

Aprés, il y a un probléme d'échappements de caractères dans le code


Bon... perso, je ferai ça...

  1. mysql_query("UPDATE clients set panier=". $_POST['produit'] . $_POST['quantiter'] ." WHERE code = " . $_SESSION['identifiant'] );


Cela vaut ce que ça vaut...
20 Décembre 2008 13:13:51

ok.

normalement sa devrais marcher la je n'est plus de message d'erreur mais cela ne me mais rien dans le champ panier de la base de donnée.

personne a une idée?
20 Décembre 2008 16:10:46

Est ce que $_POST['produit'] et $_POST['quantiter'] ont une valeur au sortir du formulaire ???
20 Décembre 2008 21:48:35

oui car si dans update.php je fait afficher les variable avec un echo cela m'affiche le code du produit et la quantité
22 Décembre 2008 23:36:23

j'ai trouver mon probléme j'avait oublier le

session_start();

mais j'ai encore un problème je ne peut métre que 1 seul objet dans le champ panier. chaque fois que j'ajoute un produit cela modifie l'ancien . comment puis-je faire?

merci d'avance
23 Décembre 2008 01:21:39

HOULA ! sécurité ! il ne faut jamais mettre directement des variables ainsi dans une base de donnée !

ajoute seulement une apostrophe dans ton message et tu obtiendras une requête incorrecte. (et au passage tu peux injecter ce que tu veux et faire crouler ta base en 2 secondes ...)

Il faut au moins passer un coup de mysql_escape_string() sur tes variables avant d'ajouter les données.
23 Décembre 2008 02:38:17

bonsoir.

sur le lien que vous avez donné il disent que mysql_escape_string() est obsolète.

a quoi me servira elle?

pour stocker plusieurs produit dans le panier il faut utiliser les array non?
23 Décembre 2008 02:47:52

Il y a mysql_real_escape_string c'est vrai. Mais à dire vrai tous les fonctions mysql_ sont obsolète par rapport à mysqli ... normalement il ne faudrait plus les utiliser.

Tu as lu la page ? elle sert à te protéger tes chaines de caractère.

Dans ton array tu n'as pas des chaines de caractère ?

  1. $quantite = mysql_real_escape_string($_POST['quantite']);


ou mieux si quantite doit absolument être un nombre :

  1. if(!is_numeric($_POST['quantite'])) {
  2. echo "Erreur"; exit;
  3. }

23 Décembre 2008 12:44:40

ah ok. je n'avait pas vue que cela fessait cela.

effectivement cela est très utile.

merci beaucoup
23 Décembre 2008 16:16:03

j'ai un souci j'essaye de faire passer les variable nomproduit produit et quantiter dans un array donc j'ai voulu faire comme sa.

  1. mysql_query("SELECT panier FROM clients");
  2.  
  3. if (isset($arraypanier['produit']))
  4.  
  5. {
  6.  
  7. array_push($arraypanier, array("nomproduits" => $_POST['nomproduit'],"produit" => $_POST['produit'], "quantiter" => $_POST['quantiter']));
  8.  
  9. }
  10. else
  11.  
  12. {
  13. $arraypanier = array ("nomproduit" => $_POST['nomproduit'],"produit" => $_POST['produit'], "quantiter" => $_POST['quantiter']);
  14.  
  15. }
  16. foreach($arraypanier as $cle => $panier)
  17. {
  18. echo '[' . $cle . '] vaut ' . $panier . '<br />';
  19. }
  20.  
  21.  
  22. mysql_query("UPDATE clients set panier = '". $panier . "' WHERE code = '". $_SESSION['identifiant'] ."'");
  23.  
  24.  
  25. ?>



mais j'ai un problème cela ne met que la quantité dans le champ panier de la BDD et quand je souhaite rajouter un autre produit cela me change l'ancien .

la je suis perdu j'ai vraiment besoin d 'aide merci d'avance
23 Décembre 2008 18:02:03

Tu ne passerais pas de manière systématique dans le if ?, genre $arraypanier['produit'] est initialisé plus haut ?

Quelques questions :

- quel est l'intérêt de ta requête dans le vide en ligne 1 ?
- tu ne sembles pas avoir une table panier ? pourquoi ? Quel est la structure de ta base ?


PS : ton code est toujours aussi vulnérable ...
23 Décembre 2008 18:15:46

oui je sais qu'il est vulnarable je compte faire sa en dernier.

avant la ligne 1 j'ai le code qui se connecte a la base de donnée.

j'ai une table clients avec dedan tout les information sur les client et un champ panier dans le quel sera stocker tous les produit commander.


pour si je passe systématiquement dans le if je ne sais pas
23 Décembre 2008 18:36:22

Pour savoir il y a une solution simple, faire un echo "toto"; dans le bloc ...

Dans le cas que tu donnes, ta requête est donc totalement inutile età supprimer. Faire un SELECT sans récupérer les donner c'est alourdir considérablement ton code pour rien. (une requête c'est un traitement important).

Sinon tu devrais suivre des cours de base de donnée :D  Ton modèle va fonctionner ... plus ou moins.

La vrai solution est de modéliser :

Exemple :

Table client :
- id : entier, clé primaire en auto_increment
- nom : varchar
- adresse : varchar
...

Table produit
- id : entier
- nom : varchar
...

Table commande :
- id (id du panier, ce champs est relativement inutil mais permet un gain de perf parfois)
- client_id
- produit_id
- quantite

La tu possède est vrai modèle normalisé, viable et plus maintenable.

$panier est bien un tableau à priori, il faudrait que tu ressortes les données avant de les stocker en base. Au mieux tu peux stocker le mot Array :D 

Tu veux structurer tes données comment dans le champs panier de ta table client ?

Malgré tout je te conseil tout de même de revenir en arrière et de réellement concevoir la structure de ta base (celle que j'ai donné en exemple est pas et assez générale), connaitre avant de coder les requêtes que tu vas devoir mettre en œuvre etc ... Là tu vas dans le mur.

23 Décembre 2008 19:25:06

d'accord je vais restructurer ma base de donnée mais comment puis-je faire pour que quand j'ajoute un produit et qu'il y en a déjà un cela le rajoute au lieu de remplacer l'ancien?

cela prend pas le if mais else en permanence.

enfaite il faudrait que sa soit structuré comme sa:

code du produit
nom du produit
quantité du produit
LIGNE VIDE
code du produit
nom du produit
quantité du produit
etc

car aprés cela devra s'envoyer par email.
auriez vous msn?

car j'ai un peut du mal et je doit terminer se site avant vendredi
23 Décembre 2008 20:13:50

La table produit, dans mon exemple contient l'ensemble des produits de ta boutique, ils ne sont pas forcement commandé. Il n'y a donc pas de remplacement.

En revanche pour incrementer quantité il y a un truc magique :

INSERT ...() ON DUPLICATE UPDATE quantite blable.
23 Décembre 2008 20:28:11

j'ai une table produit pour les personnes non enregistrer.
une pour se enregistrer
une table clients contenant leur information

je vais crée la table commande mais cela ne change pas mon problème principal

mon problème n'est pas la quantité ni la table avec les produit. c dans les champ de la base de donnée en général quand il y a déjà quelque chose dedans et que je veux rajouter quelque chose a la suite mais garder l'ancien cela efface tout et me met la nouvel valeur de la variable.

$_POST['produit'] $_POST['quantiter']

j'envoie donc $_POST['produit'] vers produit_id

$_POST['quantiter'] vers quantiter.

mais quand il y aura déjà un produit dedant cela seras pareil cela va remplacé l'ancien quand j'en rajouterai un nouveau.

si on pourrait parler sur msn cela m'arrangerai .
23 Décembre 2008 20:36:16

Bah non exemple.

On a client1 qui veut acheter produit1 et 3 produit2, et un client2 qui veut juste produit3 dans ce cas dans la table commande on aura :

id | client_id | produit_id | quantite
1 | 1 | 1 | 1
2 | 1 | 2 | 3
3 | 2 | 3 | 1

et le coup du on duplicate. Si client 1 veut finalement encore commander produit2

tu fait INSERT INTO commande (client_id, produit_id) VALUES (1,2) ON DUPLACATE UPDATE commande SET quantite=quantite+1;

A la rigueur si tu as 4 fois le même produit, tu passes 4 fois cette requête. Avec un tel fonctionnement tu n'as quasiement pas à te soucier de combien le client à commander de produit, c'est automatique. Il faut par contre initialiser à 1 par défaut le champ "quantite" lors de la création de ta table. On voit bien l'importance de la conception de sa base ici.

Magie :D 


Exemple de requête que tu pourrais utilisé :

Quels sont les produit commandé par client1, leur nom ainsi que le nom de client1 ?

  1. SELECT client_nom, produit_nom, quantite
  2. FROM client, produit,commande
  3. WHERE client.client_id = commande.client_id -- jointure
  4. AND produit.produit_id = commande.produit_id -- jointure
  5. AND client.client_id = 1;



PS : Faire 4 fois la requête n'est sans doute pas la meilleur solution niveau performance mais niveau simplicité certainement.
23 Décembre 2008 21:02:55

merci beaucoup la dessuite cela est plus clair.

j'ai déjà dans la table des produit un quantité minimum donc il n'y aurat pas de produit avec une quantiter de 0 . donc cela devrais étre bon non?

en tout cas merci beaucoup avec votre petit schéma tout me parait plus simple.
23 Décembre 2008 21:12:18

Non, si tu arrives à une quantité 0 alors il faut supprimer le tuple

DELETE FROM commande WHERE quantite=0;

Mais normalement cette requete ne doit jamais arrivé car tu dois avoir

DELETE FROM commande WHERE quantite=0 AND commande_id=xx;
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter