Pleins de questions, bugs et problèmes...

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 : Pleins de questions, bugs et problèmes...

par sgrunt » 30 avr. 2008, 12:11

Très bien autant pour moi :wink:

Merci

Bonne journée

par Truc » 30 avr. 2008, 10:51

Modération :
sgrunt, si tu as une autre question ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.
Déjà le sujet de base n'était pas très clean (titre hasardeux).
Il vaut mieux avoir plein de sujet avec un souci qu'un gros sujet avec plein de soucis. Sujet qui serait inutile à la communauté puisque personne n'y comprendrait ou n'y retrouverait quoi que ce soit.

En plus, tu pourras mettre [Résolu] dès que ton problème évoqué ici sera réglé.

Merci de prendre le temps de lire les règlements.

par Cyrano » 30 avr. 2008, 05:32

Non, si la question de base de ce sujet est résolu, ferme celui-ci et quand tu auras une nouvelle question, tu ouvriras un nouveau sujet.

par sgrunt » 29 avr. 2008, 22:36

Bin vu que j'ai fais ce topic pour pleins de problèmes différents, c'est pas fini :S

Enfin pour l'instant je n'ai pas encore eu trop de nouveaux problèmes mais peut-être dans les prochains jours c'est pour ca que je n'ai pas fermé le topic.

Enfin je veux bien mettre résolu maintenant si c'est mieux pour vous mais je risque de re-créer un sujet :S

Je mettrais résolu quand je n'aurais plus de questions, de toute manière.

Merci encore

par orgerix » 29 avr. 2008, 19:56

Non ne t'inquiète pas, tu n'as pas "monopolisé" ma journée. Ca me fait plaisir d'aider ceux qui ont du mal.

Vu que tu as eu toutes tes réponses, n'oubli pas de mettre résolu à ton sujet :wink:

par sgrunt » 29 avr. 2008, 18:23

Wow :afraid:

Ca fonctionne !

Apres des jours et des jours :mrgreen:

Je ne saurais jamais comment te remercier là
Merci infiniment

Je vais mettre tout ca au propre et j'en ai enfin fini avec ce panier!
Ca va mieux quand on comprend!

J'ai du te monopoliser ta journée, désolé

Merci merci merci!

A bientot

par orgerix » 29 avr. 2008, 17:43

Il faut placer

$aInsert[]="('".$id."','".$num_cde."',".$qtite.")";

Dans le foreach

ce qui donne
$num_cde=mysql_insert_id(); 


foreach( $_SESSION['panier'] as $value ) { 

  $id=$value['id_prod']; 
  $qtite=$value['qteProduit'] ;
  $aInsert[]="('".$id."','".$num_cde."',".$qtite.")";  
}  

En gros, pour chaque élement du tableau $_SESSION['panier'], on crée un élement dans $aInsert, qui correspondra à une insertion dans la table.

De plus, il n'y a pas besoin d'utiliser els variable $qtite et $id (j les avais mise pour te montrer comment acceder à tes données)

Donc ceci serait mieux
$num_cde=mysql_insert_id(); 


foreach( $_SESSION['panier'] as $value ) { 
  $aInsert[]="('".$value['id_prod']."','".$num_cde."',".$value['qteProduit'].")";  
}  

par sgrunt » 29 avr. 2008, 17:06

Euh,
J'ai fais quelque chose grâce à toi qui donne un début de résultat mais il reste juste un léger soucis..

Voici le code (j'ai pas fini de commenté, désolé)
<?php
					
$date=date("Y-m-d");

$requete1="INSERT INTO commande (numero_cde,statut,datecdecl,num_cli_cde) VALUES ('','En attente','$date','$numero')"; //ajout de la commande dans la table commande
mysql_query($requete1) or die ("Requête1 impossible".mysql_error());//exécution de la requête

				
				
foreach( $_SESSION['panier'] as $value ) {

  $id=$value['id_prod'];
  $qtite=$value['qteProduit']
} 
  
$num_cde=mysql_insert_id();

$aInsert[]="('".$id."','".$num_cde."',".$qtite.")"; 
   

$sInsert = implode(',',$aInsert);
		
$requete2 = "INSERT INTO ligne_commande (num_prod, num_cde, qte_cde) VALUES". $sInsert; //ajout des articles et quantité dans la table ligne_commande
mysql_query($requete2) or die ("Requête2 impossible".mysql_error());//exécution de la requête

?> 
Il enregistre bien dans les deux tables avec le même numéro de commande, le numéro client c'est bon aussi mais le problème c'est qu'il enregistre qu'un seul article: le dernier de la liste du panier.
Il l'enregistre bien a part ca avec la quantité et tout.
Donc comment faire pour enregistrer tout les articles?

Et sinon est ce que mon code est correct? je me suis aidé de vos réponses.

Merci beaucoup vous m'aidez beaucoup !

par orgerix » 29 avr. 2008, 16:11

Après, dans le foreach, il faut ensuite faire le traitement qui corespond à ce que tu veux faire. Je t'ai juste indiqué comment accéder aux valeur que tu veux.Il faudrait rajouter une linge du style
$aInsert[]="('".$id."','".$id_commande."',".$qtite.")";
Après, il suffit d'utiliser implode() et concaténer avec le reste de la requete.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par sgrunt » 29 avr. 2008, 15:59

Bin
J'aimerais qu'on essai avec la première méthode et si je m'en sors pas on verra avec ta méthode.

J'ai fais un

Code : Tout sélectionner

echo "<pre>".var_dump($_SESSION['panier'])."</pre>";
Ce qui m'a rendu ca:

Code : Tout sélectionner

array(4) { ["id_prod"]=> array(2) { [0]=> string(4) "je01" [1]=> string(4) "ch03" } ["libelleProduit"]=> array(2) { [0]=> string(22) "jean coupe droite bleu" [1]=> string(17) "chaussures noires" } ["qteProduit"]=> array(2) { [0]=> int(1) [1]=> int(1) } ["prixProduit"]=> array(2) { [0]=> float(109) [1]=> float(80) } }
Dans ton premier foreach, ce qui se met dans les variable c'est que ce qui concerne le dernier article du panier..Par exemple pour $id il y a ch03 dedans :S

Je ne sais pas comment m'en servir
:cry:

Je désespère avec ce panier.. :(

par orgerix » 29 avr. 2008, 15:04

En gros,

Avec ta méthode, pour obtenir toutes les informations des commandes et mettre en forme la requete, tu devra faire quelque chose dans ce style.
foreach( $_SESSION['panier']['id_prod'] as $key=>$value ) {

  $id=$value;
  $libelle=$_SESSION['panier']['libelleProduit'][$key];
  $qtite=$_SESSION['panier']['qteProduit'][$key];
  $prix=$_SESSION['panier']['prixProduit'][$key];
  //Suite de la construction de la requete
}
Bref, tu va devoir jouer sur le deuxième index, et rappeler le tableau original. Bref, c'est quelque chose que je n'aime pas du tout.

Tandis qu'avec ma méthode, il suffit de faire
foreach( $_SESSION['panier'] as $value ) {

  $id=$value['id_prod'];
  $libelle=$value['libelleProduit'];
  $qtite=$value['qteProduit']
  $prix=$value['prixProduit'];
  //Suite de la construction de la requete
}
Ce que je trouve plus agréable. Cela dis, il est vrai que si ca t'oblige à refaire tout ton panier, ce n'est effectivement pas interessant.

par sgrunt » 29 avr. 2008, 14:47

foreach permet de parcourir un tableau.

quand tu fait cette ligne
foreach( $_SESSION['panier'] as $value ) 

Tu aura une boucle sur chaque element de ton tableau. Tu pourra accéder à ton élement par la variable $value (par contre, si tu la modifie, ca ne sera pas enregistré dans le tableau).

Or dans ton cas, ton tableau est composé de 4 tableaux. Il est donc normal que tu obtienne array lorsque tu demande d'afficher.
Jusque là j'ai compris, merci.
Par contre, en faisant ainsi, tu sépare les informations de chaque ligne de commande. Par exemple, pour une commande, le deuxième index est le même mais pas le premier, ce qui complexifie la chose pour exploiter les informations. Ne serait ce pas judicieux d'inverser les index ?

faire quelque chose comme ca
$_SESSION['panier']=array(); 
  
$_SESSION['panier']['ta_commande']=array(['id_prod']=>ton_id
                                         ['libelleProduit']=>ton_libelle
                                         ['qteProduit'] => ta_quantité
                                         ['prixProduit']=> ton_prix);
Il faudra que je fasse des modification dans tout le panier?
J'ai pas bien saisi à quoi ca va servir? désolé :(
Dans tout les tutos ils utilisent la même méthode que Cyrano pour les variable de session du panier :S

Merci!

par orgerix » 29 avr. 2008, 11:45

foreach permet de parcourir un tableau.

quand tu fait cette ligne
foreach( $_SESSION['panier'] as $value ) 

Tu aura une boucle sur chaque element de ton tableau. Tu pourra accéder à ton élement par la variable $value (par contre, si tu la modifie, ca ne sera pas enregistré dans le tableau).

Or dans ton cas, ton tableau est composé de 4 tableaux. Il est donc normal que tu obtienne array lorsque tu demande d'afficher.

Par contre, en faisant ainsi, tu sépare les informations de chaque ligne de commande. Par exemple, pour une commande, le deuxième index est le même mais pas le premier, ce qui complexifie la chose pour exploiter les informations. Ne serait ce pas judicieux d'inverser les index ?

faire quelque chose comme ca
$_SESSION['panier']=array(); 
  
$_SESSION['panier']['ta_commande']=array(['id_prod']=>ton_id
                                         ['libelleProduit']=>ton_libelle
                                         ['qteProduit'] => ta_quantité
                                         ['prixProduit']=> ton_prix);

par sgrunt » 29 avr. 2008, 11:16

Bonjour,

En fait mon problème c'est que je ne sais pas utiliser foreach() (à défaut d'avoir compris à quoi ca sert)

Comme dans ton tuto mon panier est stocké dans ma variable session comme ceci:
  $_SESSION['panier']=array();
  $_SESSION['panier']['id_prod'] = array();
  $_SESSION['panier']['libelleProduit'] = array();
  $_SESSION['panier']['qteProduit'] = array();      
  $_SESSION['panier']['prixProduit'] = array();
Et donc je pensais qu'il fallait faire un:
foreach( $_SESSION['panier'] as $value ) // on parcourt $_SESSION['panier'], la valeur de l'item courant est copiée dans $value
  echo $value . '<br />'; // on affiche le contenu de $value
Et dans value il y a: ArrayArrayArrayArray

Par contre si je change $_SESSION['panier'] par une variable plus précise, ca fonctionne par exemple avec $_SESSION['panier']['id_prod'] il me met tout mes code produit en ligne.

Et si jamais j'arrive à le faire marcher, dans mon panier j'ai une colonne libellé et foreach va le mettre dans sa variable donc j'aurais: id_prod libelleProduit qteProduit prixProduit

Alors qu'en fait je n'ai besoin que du code et de la quantité?

Et je ne vois pas trop comment dans $sInsert il peut y avoir le code de la commande puisque si j'ai bien compris, il reprends le tableau créé dans la boucle?

Et enfin faut il utiliser implode de cette facon:
 $sInsert = implode(',', $value);
? (en tenant compte de mon foreach plus haut)

Parce qu'il me retourne un :

Code : Tout sélectionner

Warning: implode() [function.implode]: Bad arguments
Merci de tout ce que tu fais..
Décidément je dois avoir un sérieux problème au cerveau avec tout ce que tu fais pour essayer de m'expliquer..

Merci encore
Cdlt
Jerem

par Cyrano » 28 avr. 2008, 16:12

-2- Créer la requête d'insertion des articles pour la commande:

Code : Tout sélectionner

INSERT INTO commande (nump, numcdecl, qte) VALUES
À ce stade, tu vas stocker dans un tableau chaque ligne SQL correspondant à un article, chaque ligne sera :

Code : Tout sélectionner

(xyz, abc, 1)

- xyz est l'identifiant du produit que tu devrais avoir dans ton panier;
- abc est l'identifiant de la commande récupéré lors de la précédente requête;
- 1 est la quantité de l'article que tu dois trouver dans ton panier aussi.
Pourquoi mettre ca dans la table commande? c'est pas plustot dans la table ligne_commande (ou commande_has_article sur ton schéma) ??
Oui, tu as parfaitement raison. Et ce que j'ai décrit aboutit à une requête unique en insertion multiple, donc une requête de la forme :

Code : Tout sélectionner

INSERT INTO ligne_commande (col_x, col_y, ..., col_z) VALUES ('val_x ligne 1', 'valy ligne 1', ..., 'valz ligne 1), ('val_x ligne 2', 'valy ligne 2', ..., 'valz ligne 2), ..., ('val_x ligne n', 'valy ligne n', ..., 'valz ligne n);
Donc en fait, dans la boucle, tu vas construire un tableau qui va contenir chacune des lignes de données à insérer "('val_x ligne n', 'valy ligne n', ..., 'valz ligne n)" : si ton tableau se nomme par exemple $aInsert, tu feras un :
$sInsert = implode(',', $aInsert);
Et enfin, tu fais :
$sql = "INSERT INTO commande (nump, numcdecl, qte) VALUES". $sInsert;
Là, la requête est prête a être exécutée. Ajoute un echo($sql); pour l'afficher et l'inspecter avant exécution par précaution, mais ça devrait bien aller.