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 :

Erreur de récupération des données


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Erreur de récupération des données
    Bonjour.

    Voilà mon problème, je ne comprends vraiment pas : j'ai essayé de créer un panier en php utilisant les sessions. J'ai donc un fichier de catalogues, offres.php, où je peux acheter des produits. Ceux-ci sont alors ajoutés à mon panier "panier.php" grâce aux fonctions de celui-ci contenues dans le fichier "fonctions_paniers.php". Normalement ! Mais problème :
    1) Les produits ne s'ajoutent pas (j'ai une ligne ajoutée dans le tableau, mais vide) ;
    2) Quand on arrive à en ajouter un, il disparaît du panier lorsqu'on revient sur la page !

    J'ai remarqué après un var_dump de ma variable $liste que celle-ci contient bien toutes mes données, je dois donc faire une erreur dans leur récupération pour les afficher ! Pouvez-vous m'aider ? D'avance merci ! Voici ma récupération de la variable et l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <form method="post" action="panier.php" align="center">
     
    <table border="1" bgcolor="cccccc"><tr>
    <th>Serveur</th>
    <th>Disponibilité</th>
    <th>Quantité de kamas</th>
    <th>Prix unitaire</th>
    <th>Quantité</th>
    <th>Supprimer</th>
    </tr>
     
    <?php
    try {
    $bdd = new PDO('mysql:host=' . $sql_host . ';dbname=' . $sql_db, $sql_user, $sql_password);
    }
    catch (Exception $e) { 
    echo "Erreur lors de la connexion à la base de données !"; 
    }
    $id = $_GET['id'];
    $qt = $_GET['qt'];
    $action = $_GET['action'];
    If ($action == (ajout)) {
    ajouter_article($id, $qt);
    }
    Elseif ($action == (suppression)) {
    supprimer_article($id);
    }
    Elseif ($action == ("")) {
    echo "";
    }
    Else {
    echo "Cette action est impossible.";
    }
    $liste = get_allproduits($bdd, $produits_panier);
    ?>
     
    <tr>
    <td><?php echo stripslashes($liste[$id]['nom']); ?></td>
    <td>
    <?php if (($liste[$id]['Disponibilité']) == 1)
        {
            echo "<center><img src=\"style/logos/yes.png\"></center>";
        }
        else
        {
            echo "<center><img src=\"style/logos/no.jpg\"></center>";
        }
    	?>
    </td>
    <td><?php echo $liste[$id]['Quantité']; ?>K</td>
    <td><?php echo $liste[$id]['prix']; ?>€</td>
    <td><input type="text" size="4" name="q[]" value="<?php echo $qt ?>"></td>
    <td><center><a href="panier.php?action=suppression&amp;id=<?php echo $id ?>"><img src="style/logos/delete.png"></a></center></td>
    </tr>
     
    </table>
    <p align="Right" ><input type="submit" value="Recalculer"/>
    <input type="hidden" name="action" value="refresh"/></p>
    </form>

  2. #2
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    je te donne un petit indice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form method="post" action="panier.php" align="center">
     
    ...
     
    <?php
    ...
    $id = $_GET['id'];
    $qt = $_GET['qt'];
    $action = $_GET['action'];
    ...
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par patrickbaras Voir le message
    je te donne un petit indice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form method="post" action="panier.php" align="center">
     
    ...
     
    <?php
    ...
    $id = $_GET['id'];
    $qt = $_GET['qt'];
    $action = $_GET['action'];
    ...
    Ben oui mais je vais pas mettre form method=get si ?

    Je vois pas le rapport entre les deux en plus, je fais un $_GET pour récupérer mes informations de l'url et ENSUITE je post le formulaire non ?..

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Points : 111
    Points
    111
    Par défaut
    POST et GET sont des méthodes d'envoi de formulaire. Ca n'a rien à voir avec le fait de récupérer ou d'envoyer les informations. Je te conseille de faire un peu de lecture sur le sujet.

    Ensuite pour t'aider à y voir plus clair, je te propose de faire un petit print_r($_GET) et un print_r($_POST) en début juste après le "<?php". Tu verras ainsi où sont tes données .

    Si tu utilises la méthode post, informations ne transitent pas via l'url. C'est d'ailleurs l’intérêt de la méthode post. Ça évite les mauvaises surprises de modification des données dans l'url par un utilisateur mal intentionné. Mais comme on dit la confiance n'exclue pas le contrôle.

    Maintenant, il y a une autre solution si tu ne veux pas te prendre la tête c'est d'utiliser $_REQUEST où tu as à la fois le contenu de tes variables passées en post et en get. C'est moins "propres".

    Pour voir aussi l'intégralité de ce que tu envoies au serveur tu peux aussi faire un echo de la fonction phpinfo(32). 32 est une constante qui réduit les informations affichées.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci de votre aide pour commencer ! Eh bien comme je l'ai déjà dit ça a l'air de bien fonctionner !

    Lorsque ma session est vide et que je n'ai rien ajouté à mon panier, $_GET contient un array() soit un tableau vide c'est ce que je cherche. Quand je rajoute un article, ça me fait bien ce qu'il faut également : Array ( [action] => ajout [qt] => 1 [id] => 25 ) mais dès que je quitte la page ça disparaît et revient à array()...

    Quant au $_POST il est toujours vide, array() puisque je ne m'en sers pas.

    Donc j'arrive à avoir dans $_GET mon action, l'ajout, sachant que l'id produit est 25 et sa quantité 1.

    Ensuite dans mon fichier j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ($action == (ajout)) {
    ajouter_article($id, $qt);
    }
    Sachant que j'appelle la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ajouter_article($id, $qt){  // Fonction d'ajout d'article
    if(isset($_SESSION['panier'][$id])) 
        $_SESSION['panier']['id'] += qt;
    else
        $_SESSION['panier'][$id] = $qt;  // On ajoute au panier dans la session le produit d'id $id et dont la quantité vaut 1 (l'id est la clé et la quantité la valeur)
    }
    Et je récupère tous les produits de mon panier en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste = get_allproduits($bdd, $produits_panier);
    Grâce à cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function get_allproduits($bdd, $produits_panier){ // Récupération des informations des produits dans la bdd
        $liste = array();
        foreach($_SESSION['panier'] as $id => $qt){
          $produit = get_produit($id, $bdd);
          $produit['qt'] = $qt;
          $liste[] = $produit;
        }
        return $liste;
    }
    Qui appelle elle-même celle-ci (get_produit) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function get_produit($id, $bdd){  // Récupération des informations d'un produit dans la bdd
    $requete = $bdd->prepare('SELECT * FROM produits WHERE id=:id'); // PDO : On prépare la requête - récupération des informations du produit d'id $id (:id)
    $requete->execute(array('id' => $id)) or exit(print_r($requete->errorInfo())); // PDO : On exécute la requête
    return $requete->fetch(); // On retourne le résultat
    }
    Jusqu'ici tout fonctionne parfaitement je pense puisque comme je l'ai déjà dit un var_dump de ma $liste me retourne bien toutes les informations de tous les produits ajoutés.

    Je ne comprends donc pas, je dois avoir un problème dans mon affichage, mais où ? Le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <form method="post" action="panier.php" align="center">
     
    <table border="1" bgcolor="cccccc"><tr>
    <th>Serveur</th>
    <th>Disponibilité</th>
    <th>Quantité de kamas</th>
    <th>Prix unitaire</th>
    <th>Quantité</th>
    <th>Supprimer</th>
    </tr>
     
    <?php
    print_r($_POST);
    try {
    $bdd = new PDO('mysql:host=' . $sql_host . ';dbname=' . $sql_db, $sql_user, $sql_password);
    }
    catch (Exception $e) { 
    echo "Erreur lors de la connexion à la base de données !"; 
    }
    $id = $_GET['id'];
    $qt = $_GET['qt'];
    $action = $_GET['action'];
    If ($action == (ajout)) {
    ajouter_article($id, $qt);
    }
    Elseif ($action == (suppression)) {
    supprimer_article($id);
    }
    Elseif ($action == ("")) {
    echo "";
    }
    Else {
    echo "Cette action est impossible.";
    }
    $liste = get_allproduits($bdd, $produits_panier);
    ?>
     
    <tr>
    <td><?php echo stripslashes($liste['nom']); ?></td>
    <td>
    <?php if ($liste['Disponibilité'] == 1)
        {
            echo "<center><img src=\"style/logos/yes.png\"></center>";
        }
        else
        {
            echo "<center><img src=\"style/logos/no.jpg\"></center>";
        }
    	?>
    </td>
    <td><?php echo stripslashes($liste['Quantité']); ?>K</td>
    <td><?php echo stripslashes($liste['prix']); ?>€</td>
    <td><input type="text" size="4" name="q[]" value="<?php echo $qt ?>"></td>
    <td><center><a href="panier.php?action=suppression&amp;id=<?php echo $id ?>"><img src="style/logos/delete.png"></a></center></td>
    </tr>
     
    </table>
    <p align="Right" ><input type="submit" value="Recalculer"/>
    <input type="hidden" name="action" value="refresh"/></p>
    </form>

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Points : 111
    Points
    111
    Par défaut
    j'avoue que comme ça je ne vois pas trop. Un session_start ?

    A défaut essayes un print_r($_SESSION) après avoir mis le contenu de ton panier dedans pour être certain que tes valeurs sont ajoutées à ta session.

    Sinon là comme ça j'ai pas trop d'autres idées. Les fragments de code ont l'air bon.

    Par rapport à ce que tu dis, le seul truc qui me "chagrine" c'est que tu passes par un formulaire en méthode post et que $_post est vide. Ça signifie donc que tu n'envoies pas ton formulaire au serveur via son "submit".

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par antrax2013 Voir le message
    j'avoue que comme ça je ne vois pas trop. Un session_start ?

    A défaut essayes un print_r($_SESSION) après avoir mis le contenu de ton panier dedans pour être certain que tes valeurs sont ajoutées à ta session.

    Sinon là comme ça j'ai pas trop d'autres idées. Les fragments de code ont l'air bon.

    Par rapport à ce que tu dis, le seul truc qui me "chagrine" c'est que tu passes par un formulaire en méthode post et que $_post est vide. Ça signifie donc que tu n'envoies pas ton formulaire au serveur via son "submit".
    J'ai un session_start dès le début de mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php session_start();
    include_once("config.php");
    include_once("fonctions_paniers.php");?>
    Et quant au print ça m'affiche ceci :
    Array ( [25] => 1 [id] => 0 [27] => 1 [1] => 1 [29] => 1 )

    Donc bien les produits tel que [id] => quantité...

    je ne comprends pas ! :/

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Points : 111
    Points
    111
    Par défaut
    J'ai un doute, des plus chevronnés que moi confirmeront (ou pas). Je dis ça un peu au pif. Mais la non activation de la session sur une page n'élimine t'elle pas ce qu'il y a en session ?

    En gros as tu un session_start() sur les autres pages sur lesquelles tu navigues une fois tes valeurs mises en session ?

    Ce que j'essayerais c'est de faire un print_r($_SESSION) dans toutes les pages sur lesquelles je peux aller une fois le panier rempli et voir si y'en a pas une qui vide les infos.

    Maintenant c'est peut être une mauvaise piste ...

  9. #9
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    Ta fonction qui renvoi la liste renvoi dans $liste un tableau contenant des tableaux de produit.

    $liste[] = $produit;

    Ensuite dans ton affichage tu appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $liste['nom']
    $liste['Disponibilité']
    $liste['Quantité']
    $liste['prix']
    Alors que $liste ne contient aucun indice nom,disponibilité, quantité, ou prix.
    Il faut boucler chaque item de $liste et traité chaque tableau contenu dans $liste qui contiendra bien, lui les indices que tu appelle.

    Pour l'instant tu traite $liste comme s'il n'était qu'un seul produit

    Un var_dump de $liste te donnera le bon schema de ton tableau liste.

    Fait aussi attention à te souvenir des indices utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $produit['qt'] = $qt;
    $liste[] = $produit;
    Quant tu appelles ensuite un indice ['Quantité'] je doute qu'il contienne quoi que ce soit.


    Pour résumer, oublie tout ce qui se passe avant l'affichage, fait un var_dump de $liste et traite le comme s'il venait d'un autre développeur sans que tu sache comment il se fabrique.

Discussions similaires

  1. Erreur de récupération des données
    Par rayenovski2012 dans le forum Android
    Réponses: 1
    Dernier message: 22/02/2013, 22h34
  2. [Dojo] Erreur lors de la récupération des données JSON
    Par benoxy dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 21/05/2010, 18h12
  3. Réponses: 7
    Dernier message: 15/11/2006, 10h14
  4. [MySQL] Erreur à la récupération des données
    Par Philinfo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/11/2006, 17h40

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