sessions: mise à jour de plusieurs ligne d'une même table

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 : sessions: mise à jour de plusieurs ligne d'une même table

Re: sessions: mise à jour de plusieurs ligne d'une même table

par desesphp » 19 nov. 2009, 19:07

Chers amis,
C'est je suis naze et j'y comprends rien, le retour... :boire4:
J'ai tenté de suivre les bons conseils d'animithra et ai tourné en boucle sur le web toute la journée pour capter (mais qu'est-ce que c'est le while et comment que ça marche et patati et patata), mais j'en suis au même point...
Alors dans mon While j'ai tenté:
while(isset($_POST['panier'])) 
et même:
while ($boutique_panier = $_SESSION["panier"]
  {$updateSQL = sprintf("UPDATE boutique__panier SET client=%s, article=%s, quantite=%s WHERE id=%s",
                       GetSQLValueString($_POST['client'], "text"),
                       GetSQLValueString($_POST['article'], "int"),
                       GetSQLValueString($_POST['quantite'], "int"),
	                   GetSQLValueString($_POST['id'], "int"),
$ boutique__panier++;}
Mais j'ai toujours une erreur sur ma dernière ligne... Ca ne fonctionne pas... Je n'arrive pas à savoir si ça vient de la valeur que je mets dans mon while ou d'une erreur toute bête de parenthèse? point virgule?
Je craque... |*()
Pitié, qu'est-ce que j'ai fait de mal???? :-k
Merci pour vos réponses...

Re: sessions: mise à jour de plusieurs ligne d'une même table

par desesphp » 19 nov. 2009, 09:47

Bonjour,
Merci beaucoup animithra... Voilà qui est plus clair... :agenouille:
Je vais tenté l'option while comme tu me l'as décrite... et reviendrai vous donner de mes nouvelles...
A plus tard donc...
=;

Re: sessions: mise à jour de plusieurs ligne d'une même table

par animithra » 18 nov. 2009, 23:18

Arf, mes excuses.

Petit cours while/for pour commencer.

Lorsque tu as un tableau (les sessions ou les array() classiques) tu as le choix entre les boucles while et for.

While n'a besoin que d'une condition d'exécution (bon faut faire attention si elle est toujours vraie tu pars en boucle infinie XD), la condition de passage à la ligne d'analyse suivante étant située dans le traitement.

En plus clair :

Code : Tout sélectionner

while(ma condition){ mon traitement } exemple en PHP : $i = 0; //tant que ma variable est inférieure à 10 while($i<10){ //j'affiche la valeur de ma variable print($i); //je passe à la valeur suivante (attention si tu l'oublies, tu pars en boucle infinie ^^) $i++; }
Avec ce type de boucle tu peux utiliser un while(isset($_POST['ma_variable'])) et tant qu'il trouve la variable appelée, il bosse.

Pour les boucles for, il faut définir dans la déclaration de la boucle la variable testée, sa valeur d'origine, la condition d'arrêt et le mode de passage à la valeur suivante.

En plus clair :

Code : Tout sélectionner

for(mavariable=valeur_départ;condition d'arret;mode_de_passage){ traitement } exemple en PHP (le même que pour le while) : //je veux commencer avec $i = 0, augmenter tant que c'est inférieur à 10 et afficher la valeur à chaque boucle for($i=0;$i<10;$i++){ print($i); }
Dans les deux cas le résultat est équivalent mais pour le for, il faut que tu saches combien de fois tu vas boucler, ce qui dans le cas présent... risque d'être délicat pour toi.

Si tu débutes vraiment de 0 en php, je te conseille phpdebutant.org

Si tu as besoin de conseils, je suis à ta dispo même si je ne suis pas (et de loin !) la meilleure dev de PHP-France.

Bon courage à toi et persévère !

Re: sessions: mise à jour de plusieurs ligne d'une même table

par desesphp » 18 nov. 2009, 22:59

Hein??? De quoi??? Je ne comprends rien... :shock: :?: :?:
I'm a debutant (en bon anglais dans le texte)...
Alors while d'accord, mais while quoi?
Bon, j'ai déjà compris que if était pour une simple mise à jour... Pour for, je ne connaîs pas du tout...
Je cherche, je cherche... :^o
Enfin, si vous avez plus de précisions... :mrgreen:
Merci merci :D

Re: sessions: mise à jour de plusieurs ligne d'une même table

par animithra » 18 nov. 2009, 22:50

Beaucoup plus clair l'ami !

Alors en effet, avec ton if tu fais bien une update mais une seule !

La solution de la boucle me paraît bien, soit en bouclant par un while sur l'existence des variables $_POST (s'arrêtera s'il n'y a plus d'autres données transmises) soit par un for.

Dans les deux cas, je pense qu'il faudrait que les données (transmises en $_POST) soient dans un tableau en bouclant sur le tableau selon son indice (pour être sûr que tu ais tous les résultats).

Comme tes articles proviennent d'un même panier, tu dois pouvoir enregistrer un tableau de tableau façon article[propriete][rang] et itérer dessus.

Je suppose qu'il y a plus simple mais à cette heure-ci.... bon courage XD

Bonne progra ;)

Re: sessions: mise à jour de plusieurs ligne d'une même table

par desesphp » 18 nov. 2009, 22:24

Re-bonjour :D
Merci animithra pour ta réponse... En fait, je me suis sans doute mal exprimé... #-o
En effet, j'utilise le mail du client comme une propriété du panier... Pour en effet créer plus tard une table "commande" dans laquelle je n'aurai pas besoin de recopier toutes les données clients... En fait, tu as parfaitement compris ma démarche et l'a bien mieux exprimé que moi...
Ma table panier se décompose ainsi:
id / client / article / quantité.
L'id est généré automatiquement à chaque fois qu'un client insère un article dans son panier... D'où différentes lignes qui sont créées dans ma table panier pour un même client. Grâce à la session, les données du panier se transfèrent correctement de page en page... Mais quand le client s'identifie, je n'arrive tout simplement pas à rattacher son mail à son panier. En effet, ma table panier est mise à jour, mais seulement pour une seule id de ce que mon client y a ajouté...
Voici le code de l'update:
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$updateSQL = sprintf("UPDATE boutique_panier SET client=%s, article=%s, quantite=%s WHERE id=%s",
GetSQLValueString($_POST['client'], "text"),
GetSQLValueString($_POST['article'], "int"),
GetSQLValueString($_POST['quantite'], "int"),
GetSQLValueString($_POST['id'], "int"));
Il manque sans doute un WHERE... Mais lequel? Qu'est-ce que j'y mets pour que mon code PHP trouve toutes les lignes du panier de mon client?
OU alors, faut-il faire une boucle et comment je fais? Une instruction qui cherche toutes les lignes (tous les id) du panier de mon client actuel...
J'espère avoir été plus clair...
Toutes les propositions, même les plus folles, sont les bienvenues...
=;

Re: sessions: mise à jour de plusieurs ligne d'une même table

par animithra » 18 nov. 2009, 21:23

Bonjour :)

Juste une petite remarque sur ta démarche, plus que sur le contenu.

D'après ce que j'ai compris, et si c'est le cas le début de ta démarche est excellent, tu as un client, tu as créé un panier et tu as rattaché au panier divers articles comprenant tous diverses propriétés.

Question :

Le panier étant à un seul et même client, ne te paraîtrait-il pas judicieux de faire de l'email une propriété du panier et non de l'article ?
Parce qu'un client avec 1 panier et 15 articles, ça reste le même client, inutile donc de réenregistrer 15 fois l'email...

[EDIT] autre point :
si tu crées ton client lors de la validation du panier, il est aussi plus simple de considérer le client en tant que tel (avec les propriétés nom, adresse, email et tout ce que tu veux) et de le rattacher au panier par un identifiant unique (l'email peut effectivement te servir).
L'avantage, c'est que si tu transforme ton panier en commande (lors du paiement par exemple), tu n'auras pas à recopier toutes les données clients qui seront isolées.
Ça suit la même logique que la normalisation des bases de données.
Si tu ne connais pas, je te conseille de jeter un œil, il s'agit de quelques règles pour éviter la redondance de données dans les bases de données mais ça fonctionne pour tout type d'enregistrement, sessions comprises.
Et rappelle toi : toujours aller au plus simple, s'il peut y avoir une même donnée dans un même type d'objet (ou un même enregistrement) en plusieurs exemplaires, c'est qu'il y a une simplification à trouver :)

sessions: mise à jour de plusieurs ligne d'une même table

par desesphp » 18 nov. 2009, 19:11

Bonjour,
Débutant en php, je tente de créer un panier virtuel en utilisant les sessions (session start...). Le client peut naviguer sur le site et remplir son panier au fur et à mesure. A chaque fois qu'il ajoute un article, une ligne se crée dans ma table panier: id (générée automatiquement) / article (avec le nom du produit) / quantite (avec la quantite qu'il peut modifier)/ client (que je désire compléter plus tard) :mrgreen:

Quand il veut valider ses achats, le client doit se connecter afin que je puisse récupérer ses coordonnées.
Tout ça fonctionne. Sauf quand je veux compléter ma table panier avec les coordonnées de mon client (admettons son mail). Je tente de mettre à jour le panier: je récupère le mail de mon client, mais seulement pour la première ligne de ses achats... C'est ballot s'il commande différents articles, car seul le premier qu'il a mis dans son panier est complété!! :oops:

Auriez-vous une idée lumineuse et géniale :shock: de la façon dont je peux procéder pour que php vérifie tout le contenu de la table panier et complète toutes les lignes dévolues à mon client avec son adresse mail?
Merci d'avance pour votre aide
:D