Passage d'objet par POST/GET [Résolu]

cs_TOURSENE 11 Messages postés vendredi 26 mai 2006Date d'inscription 3 avril 2009 Dernière intervention - 26 sept. 2006 à 09:50 - Dernière réponse : cs_TOURSENE 11 Messages postés vendredi 26 mai 2006Date d'inscription 3 avril 2009 Dernière intervention
- 26 sept. 2006 à 13:16
Salut à tous !

Je travaille actuellement sur un projet en e-commerce. Je suis en plein dans le développement du site. Je rencontre une difficulté. Je sais qu'il est plus courant d'utiliser des variables de session pour passer des objets, mais j'ai voulu testé une autre façon de faire. Peut-on passer un objet par les méthodes GET/POST ? Dans mon cas il s'agit d'un tableau d'objets sérialisé. L'idée était séduisante au départ, puis je me suis rendu compte que ça posait un problème : je n'arrive pas à récupérer mes valeurs par la méthode post, alors que je ne change même pas de page.

Voilà mon code : à cette page sont envoyés 2 tableaux $reference et $quantite qui sont créé par la même technique qu'ici (les inputs de type "hidden"). J'ai simplifié le code au maximum pour ne laisser que la partie vraiment utile.

include('Articles.class.php');
extract($_POST,EXTR_OVERWRITE);

if(!isset($_POST['commander']))
{
        echo'
            <form method= "POST" action="'.$PHP_SELF.'">;
            for($i=0;$i<sizeof($reference);$i++)
            {
                $article = new Articles($reference[$i],$quantite[$i]);         // on instance un nouvel article à chaque tour de boucle
                echo'';
             }
             echo'
            </form>';

            for($i=0;$i<sizeof($panier);$i++)       // boucle qui permet de vérifier le contenu de $panier
                                                                 // affiche bien des objets de type "Articles" sérialisés
                echo $panier[$i].'
';
           }
}
else
{
      print_r($panier).'
';             // affiche les types d'objets contenus dans $panier après soumission du formulaire
                                                      // affiche à l'écran ---> Array ( [0] => O:8: [1] => O:8: ) O:8:
      echo'
';                              // Ici $panier contient bien 2 objets sérialisés.
                                                     //si je déserialise, il me retourne... ben rien en fait, que du vide...

  for($i=0;$i<sizeof($panier);$i++)  // même boucle qu'avant le else et c'est là que le problème survient
  {                                                       // ça n'affiche rien...
    echo $panier[$i].'
';
  }

}

Je ne suis pas un crack en php, je débute en fait. Si quelqu'un pouvait m'aider à mieux comprendre, ce serait sympa, merci d'avance.
N'hésitez pas si vous avez des questions à me les poser, j'essaierai d'y répondre du mieux que je pourrais.

@+++, TOURSENE
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_TOURSENE 11 Messages postés vendredi 26 mai 2006Date d'inscription 3 avril 2009 Dernière intervention - 26 sept. 2006 à 13:16
2
Merci
Re, encore moi...

J'ai trouvé la solution à mon problème. Pour rappeler le contexte rapidement, je tentais de passer un objet (sérialisé) par la méthode POST.  Après le passage je n'arrivais pas à récupérer les données sérialisé, bien que j'utilisais unserialize().
Le truc peut intéressé du monde donc le voilà, en fait c'était tout bête. Je ne vais très certainement rien apprendre à personne mais bon.

Je ne l'ai pas encore testé avec le code de mon premier message, mais si ça marche avec le petit bout d'essai que j'ai testé, il n'y a pas de raisons.

Il suffit de prendre l'objet sérialisé et de lui appliquer la méthode urlencode(). Une fois le formulaire soumis, on utilise urldecode(), puis unserialize() et on peut de nouveaux exploiter ses données.

<?php
if(!isset($submit))
{
    //   on a une classe Objet(), on instancie $objet
    $objet = new Objet();
    $so = serialize($objet);
    $soe = urlencode($so);
    echo'
        <form method="POST" action="'.$PHP_SELF.'">
       
       
        </form>
       ';
}
else
{
    $soe = $_POST['hidden'];
    $so = urldecode($soe);
    $objet = unserialize($so);
}
?>

Voilà, c'est aussi simple que ça...
Allez à plus et encore merci, TOURSENE.

Merci cs_TOURSENE 2

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_TOURSENE
cs_darkduck 140 Messages postés vendredi 28 février 2003Date d'inscription 29 février 2008 Dernière intervention - 26 sept. 2006 à 10:07
0
Merci
Bonjour,

je ne sais pas si ton problème vient de là mais il faut savoir que $_POST et $_GET on des longueurs maximales à ne pas dépasser.
Peut etre que leurs longueurs sont trop longues et que c'est pour cela que tu n'arriveas pas a récupérer les info.

Autre chose : Il ne faut pas faire unserialize($objet) avant d'afficher ?
Commenter la réponse de cs_darkduck
cs_TOURSENE 11 Messages postés vendredi 26 mai 2006Date d'inscription 3 avril 2009 Dernière intervention - 26 sept. 2006 à 10:27
0
Merci
Merci pour ta réponse darkduck.

Déjà pour l'histoire de longueur maximale à ne pas dépasser des $_POST et $_GET, je ne savais pas. Je te remercie.

Pour la question de déserialisation, j'ai précisé dans les commentaires de mon code que même après avoir fait unserialize($objet), ça ne retourne rien.

J'ai fait une autre version de mon code, cette fois avec variables de session. C'est pas tout mais je pas tout le temps que je souhaite. J'ai remplacé la boucle for, qui me permettait de créer mes objets $article, puis de les stocker dans le tableau $panier, par la suivante :

        for($i=0;$i<sizeof($reference);$i++)
        {
           $article = new Articles($reference[$i],$quantite[$i]);
            $panier[$i] = serialize($article);
        }
        session_register($panier);

La où ça coince, c'est ici :

  print_r($_SESSION);

renvoit :

Array ( [login] => stephane
[O:8:"Articles":2:{s:15:"referenceAchete";s:1:"4";s:14:"quantiteAchete";s:1:"1";}]
=>
[O:8:"Articles":2:{s:15:"referenceAchete";s:3:"100";s:14:"quantiteAchete";s:1:"1";}]
=> )

N'y a-t-il pas comme un problème ici ? Mes objets sont les clés ou je me trompe ?
Commenter la réponse de cs_TOURSENE
cs_TOURSENE 11 Messages postés vendredi 26 mai 2006Date d'inscription 3 avril 2009 Dernière intervention - 26 sept. 2006 à 10:39
0
Merci
Re suite à mon dernier message, j'y avais fait une petite erreur :

session_register($panier)        // non valide

il faut écrire :

$_SESSION['panier'] = $panier;

Ensuite,

$panier = $_SESSION['panier'];
print_r($panier);

renvoie :

Array ( [0] =>
O:8:"Articles":2:{s:15:"referenceAchete";s:1:"4";s:14:"quantiteAchete";s:1:"1";}
[1] =>
O:8:"Articles":2:{s:15:"referenceAchete";s:3:"100";s:14:"quantiteAchete";s:1:"1";}
)

Et là c'est tout bon, je peux poursuivre mon projet tranquillement.

Mais pour ce qui était de mon problème présenté dans le tout premier message, je cherche toutjours un solution. Ce serait juste pour le fun. Je trouve le cas intéressant, de pouvoir passer des objets par post/get. Il doit bien y avoir une solution.

Encore merci, TOURSENE
Commenter la réponse de cs_TOURSENE

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.