Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/06/2008, 15h45   #1
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Par défaut Sessions, besoin d'aide pour une adaptation :)

Bonjour,
J'avance à grand pas dans mon développement et me suis cassé les dents sur les sessions php.

Je dois en effet réaliser un panier pour mon application, j'ai pu trouver ce super tutoriel : http://jcrozier.developpez.com/articles/web/panier/ sur la réalisation d'un panier virtuel.

J'ai toutes fois un peu de mal a adapter le code présenté pour une utilisation avec formulaire.

En effet, lorsqu'on ajoute des produits dans le panier dans ce tutoriel, les variables sont passées dans l'url alors que moi j'utilise un formulaire et donc du POST.

Mes variables ne sont alors pas prises en compte par le script présenté ici. Toutes fois, elles sont bien présentes dans la page si je fais le test suivant :

Code :
1
2
3
 
	echo 'Référence Produit : ';
	echo $_POST['refproduit'];
Est ce que quelqu'un pourrait m'expliquer comment passer mes variables dans le script s'il vous plait ?


Par avance,
Merci

Marc
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 16h10   #2
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 27

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 349
Points : 349
avec les sessions, tu fais qque chose comme ça :
Code :
1
2
3
 
if (!isset($_SESSION['refproduit'])) $_SESSION['refproduit'] = $_POST['refproduit'];
if (isset($_SESSION['refproduit']) && isset($_POST['refproduit'])) $_SESSION['refproduit'] = $_POST['refproduit'];
et tu modifies la page après pour utiliser tes sessions au lieu des variables de l'url
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 16h42   #3
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Merci pour ta réponse,
En fait, c'est pour remplacer ca ?
Code :
1
2
 
if (isset($_GET['action']))
par exemple ?

Merci encore.
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 16h48   #4
Membre éclairé
 
Avatar de sacricri
 
Jean-Philippe Morvan
Inscription : juin 2008
Messages : 324
Détails du profil
Informations personnelles :
Nom : Jean-Philippe Morvan
Âge : 27

Informations forums :
Inscription : juin 2008
Messages : 324
Points : 349
Points : 349
bah si ton url est du style : "panier.php?refproduit=123582"
le fait d'utiliser la session te permettra de ne plus avoir refproduit=123582 dans l'url mais d'avoir $_SESSION['refproduit']=123582 au lieu de $_GET['refproduit']=123582

ça t'évite de tout passer en paramètre
sacricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 16h52   #5
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Citation:
Envoyé par sacricri Voir le message
bah si ton url est du style : "panier.php?refproduit=123582"
le fait d'utiliser la session te permettra de ne plus avoir refproduit=123582 dans l'url mais d'avoir $_SESSION['refproduit']=123582 au lieu de $_GET['refproduit']=123582

ça t'évite de tout passer en paramètre
Oui d'accord, mais je comprends absolument rien en fait.
Le code est assez compliqué je trouve
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2008, 16h59   #6
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Citation:
Envoyé par plex Voir le message
Oui d'accord, mais je comprends absolument rien en fait.
Le code est assez compliqué je trouve
Si tu reprend le tutoriel depuis le début, à partir de quel moment tu ne comprend plus ?

Qu'est ce qui te gène, le passage des paramètres en mode POST ou GET, la conservation de variables dans des sessions ?

Y a-t-il des exemples précis de code que tu ne comprend pas ?
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 09h13   #7
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Merci Eusebe pour ta réponse.
En fait, dans panier.php,

On a ceci :

Code :
1
2
 
if (isset($_GET['action']))
Donc déja, il faut surement que je définisse action par un $_POST non ?
Le plus dur pour moi c'est que c'est un tout et que tout doit être bon sinon ca ne fonctionne pas et qu'il est assez difficile de décoder les erreurs étant novice.

Ensuite,

Code :
1
2
 
if(in_array( $_GET['action'],array('ajout', 'suppression', 'refresh')))
Donc la on regarde si dans GET de action il y a une des valeurs ajout, suppression c'est ca ?
donc il faut aussi remplacer par un POST non ?

Puis viennent les varibles $l et autres
Code :
1
2
 
$l = preg_replace('#\v#', '', $_GET['l']);
Donc
Code :
1
2
 
$l = $_POST['refproduit'];
Apres cette partie de code, je ne saisi pas trop
Code :
1
2
3
4
5
6
7
 
 
 $QteArticle = array();
 
 $i=0;
 foreach ($_POST['QteArticle'] as $contenu){
  $QteArticle[$i++] = intval($contenu);
La, je ne vais pas dire de bétises, je comprends que c'est une boucle pour l'affichage des différents articles non ?


ensuite dans fonction panier,
j'ai pu modifier les quelques valeurs par mes valeurs à moi

par exemple libelleproduit = refproduit


Merci encore pour votre aide,
Plexou
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 09h39   #8
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : Services de proximité

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
Effectivement dans ton cas de figure remplace $_GET par $_POST vu que tu utilise POST avec ton formulaire.
Donc quand on teste isset($_GET['champ']) et bien pour toi ca devient isset($_POST['champ']).
Ensuite si tu ne voie pas à quoi ca correspond voial une demo plus grande.

$_GET['action'] = l'url vas être panier.php?action=achat.
Comme tu le voie le champ dans ce cas de figure est action, et ca valeur est achat.
Donc pour récupérer la valeur on lui demande $_GET qui est un tableau et vu qu'on cherche l'action que l'utilisateur a donner et bien dans le tableau $_GET on recupére le champs action.
Exemple:
Code :
1
2
3
4
5
6
 
//Si l'url est panier.php?action=achat&produit=1478&client=8745e
//Pour avoir les différentes infos nous avons.
$_GET['action'] // qui vaut achat
$_GET['produit'] // qui vaut 1478
$_GET['client'] // qui vaut 8745e
Passons à présent à $_POST[], il fonctionne en quelque sorte de la même maniere sauf que on ne met pas les variables dans l'url.
$_POST[] est un tableau de ton formulaire, et les champs sont en faite les attribut name de ton formulaire.

Exemple
Code :
1
2
3
4
5
6
7
8
9
 
//bon je le fait en speed je fait pas un vrai form
<form action=panier.php>
<input name="produit">
<input name="client">
</form>
//Et bien pour recupérer tes valeurs tu utilise
$_POST['produit'] // vaut la valeur saisie pour produit.
$_POST['client'] // vaut la valeur saisie pour client.
Biensur tu peux recuperer les valeurs d'un champs hidden, d'un select ou textarea, le semble souci est de bien prendre et les attributs name.

J'espère t'avori éclairé.
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 10h20   #9
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Merci bcp SirDarken pour ces explications et précisions.
Je comprends bien le fonctionnement des 2 méthodes, c'est que je ne sais pas trop par ou commencer pour les changements,

Je vais m'y mettre maintenent que tout est plus clair et je vous tiens au courant

Merci encore
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 10h43   #10
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Bonjour,
Citation:
Envoyé par plex Voir le message
En fait, dans panier.php,

On a ceci :

Code :
1
2
 
if (isset($_GET['action']))
Donc déja, il faut surement que je définisse action par un $_POST non ?
Le plus dur pour moi c'est que c'est un tout et que tout doit être bon sinon ca ne fonctionne pas et qu'il est assez difficile de décoder les erreurs étant novice.
Quand tu passes des paramètres à une page en mode GET (dans l'adresse), ces paramètres sont stockés dans le tableau associatif $_GET. Ce tableau contient en clé les nom des paramètres et en valeur les valeurs des paramètres.

Si au lieu de les passer en mode GET tu les passes en mode POST, les paramètres ne sont plus listés dans le tableau $_GET, mais dans $_POST, comme tu l'avais bien deviné .

Dans le code
Code :
1
2
 
if (isset($_GET['action']))
on vérifie si le tableau associatif $_GET contient une clé 'action', donc ça équivaut à vérifier si on a reçu un paramètre action en mode GET. Si tu les passes en mode POST, il faut bien faire la même chose, mais avec le tableau $_POST.

Citation:
Envoyé par plex Voir le message
Ensuite,

Code :
1
2
 
if(in_array( $_GET['action'],array('ajout', 'suppression', 'refresh')))
Donc la on regarde si dans GET de action il y a une des valeurs ajout, suppression c'est ca ?
donc il faut aussi remplacer par un POST non ?
Oui, c'est bien ça. Ou plus littéralement, on regarde si la valeur $_GET['action'] est dans le tableau array('ajout', 'suppression', 'refresh'). On vérifie donc que le paramètre action a une de ces trois valeurs. Toujours pareil, si tes paramètres sont passés en mode POST, il faut bien remplacer $_GET par $_POST (ces deux tableaux associatifs sont par ailleurs strictement identiques, la seule différence est le mode de passage des paramètres à la page).

Citation:
Envoyé par plex Voir le message
Puis viennent les varibles $l et autres
Code :
1
2
 
$l = preg_replace('#\v#', '', $_GET['l']);
Donc
Code :
1
2
 
$l = $_POST['refproduit'];
Ici il met dans la variable $l la valeur du paramètre 'l', après y avoir remplacé tous les \v (ce sont les tabulations verticales il me semble (?)). Par contre, je ne sais pas pourquoi ce remplacement est effectué... Mais pour le paramètre 'l', c'est le libellé du produit. Si dans tes paramètres tu as replacé 'l' par 'refproduit' et que tu les as passé en mode POST, alors ta modif est bonne (et tu pourrais même changer le nom de la variable pour la rendre plus explicite )

Citation:
Envoyé par plex Voir le message
Apres cette partie de code, je ne saisi pas trop
Code :
1
2
3
4
5
6
7
 
 
 $QteArticle = array();
 
 $i=0;
 foreach ($_POST['QteArticle'] as $contenu){
  $QteArticle[$i++] = intval($contenu);
La, je ne vais pas dire de bétises, je comprends que c'est une boucle pour l'affichage des différents articles non ?
Non, ça n'affiche rien du tout.
Le paramètre POST QteArticle est un tableau, qui contient la quantité de chaque article. $_POST['QteArticle'][0] contient (sous forme de texte) la quantité du premier artcile, $_POST['QteArticle'][1] celle du deuxième article, etc...

Pour récupérer ce paramètre, on commence dans le tuto par créer un tableau vide $QteArticle. Ensuite, pour chaque valeur du paramètre QteArticle (c'est à dire les quantités de chaque article du premier au dernier), on stocke la valeur transformée en nombre (dans le passage de paramètre, c'était du texte) dans le tableau $QteArticle, au même indice. Au final, $QteArticle contient les mêmes données que $_POST['QteArticle'], mais converties en int.

Citation:
Envoyé par plex Voir le message
ensuite dans fonction panier,
j'ai pu modifier les quelques valeurs par mes valeurs à moi

par exemple libelleproduit = refproduit


Merci encore pour votre aide,
Plexou
De rien

Pour t'aider au début à débugguer ton programme, tu peux afficher la valeur des différentes variables en utilisant print_r. Par exemple, pour voir ce que contiennent $_GET et $_POST, tu peux faire print_r($_GET); ou print_r($_POST);.

Bon courage !
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 10h49   #11
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Coucou,
merci encore pour ton aide,
je suis en train de modifier mon code l

Par contre j'ai un soucis la

Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\application\require\actions\panier.php on line 41

A cette ligne j'ai :
Code :
1
2
3
 
session_start();
include_once("fonctions-panier.php");
Que ce passe t il ?
Ps je travail sur easyphp peut etre que c'est lui qui ne prends pas la session en compte ?

Merci encore
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 12h11   #12
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
C'est simplement que ta session avait déjà commencé. Dans ce cas, l'appel à la fonction session_start() est ignoré (ce qui n'a pas d'impact).

Est-ce que tu as mis la fonction session_start à plusieurs endroits ?
Est-ce qu'elle est par exemple dans le fichier fonctions-panier.php ?
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2008, 15h15   #13
Invité régulier
 
Inscription : novembre 2004
Messages : 75
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 75
Points : 8
Points : 8
Merci bcp pour ta réponse Eusebe
J'ai effectivement mis session start mais dans creation commande.php qui envoi les données dans mon panier.

Est ce une erreur de ma part ?
Dois je laisser / supprimer ?

Merci encore
plex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2008, 17h58   #14
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Citation:
Envoyé par plex Voir le message
Merci bcp pour ta réponse Eusebe
J'ai effectivement mis session start mais dans creation commande.php qui envoi les données dans mon panier.

Est ce une erreur de ma part ?
Dois je laisser / supprimer ?
Difficile à dire sans connaître ton code...
La seule chose que je puisse te dire, c'est que tu as ce message parce que tu utilises la fonction session_start alors qu'une session est déjà commencée.

Donc soit tu as deux fois session_start dans ta page (en prenant en compte les fichiers inclus), soit tu as activé le démarrage automatique des sessions...

Bon courage
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2008, 21h32   #15
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : Services de proximité

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
Au pire mais c'est pas trés pro pourquoi pas mettre @session_start(); ?
Je me retrouver dans l'obkigation de faire cela pour un header(...);
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h44.


 
 
 
 
Partenaires

Hébergement Web