IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Sessions, besoin d'aide pour une adaptation :)


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    avec les sessions, tu fais qque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse,
    En fait, c'est pour remplacer ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_GET['action']))
    par exemple ?

    Merci encore.

  4. #4
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    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

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    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 ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci Eusebe pour ta réponse.
    En fait, dans panier.php,

    On a ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $l = preg_replace('#\v#', '', $_GET['l']);
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $l = $_POST['refproduit'];
    Apres cette partie de code, je ne saisi pas trop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    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

  10. #10
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,
    Citation Envoyé par plex Voir le message
    En fait, dans panier.php,

    On a ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $l = preg_replace('#\v#', '', $_GET['l']);
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    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 ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    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

  14. #14
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    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

  15. #15
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    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(...);

Discussions similaires

  1. Besoin d'aide pour une sous requete
    Par Celia1303 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 14h09
  2. Besoin d'aide pour une requete
    Par jnc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 11h54
  3. Création requete besoin d'aide pour une date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2004, 22h03
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo