begin process at 2012 05 30 17:29:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Passage d'objet par POST/GET


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Passage d'objet par POST/GET

mardi 26 septembre 2006 à 09:50:26 | Passage d'objet par POST/GET

TOURSENE

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'<input type="hidden" name="panier[]" value="'.serialize($article).'">';
             }
             echo'<input class="button" type="submit" name="commander" value="Je passe la commande">
            </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].'<br>';
           }
}
else
{
      print_r($panier).'<br>';             // 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'<br>';                              // 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].'<br>';
  }

}


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
mardi 26 septembre 2006 à 10:07:57 | Re : Passage d'objet par POST/GET

darkduck

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 ?
mardi 26 septembre 2006 à 10:27:36 | Re : Passage d'objet par POST/GET

TOURSENE

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 ?
mardi 26 septembre 2006 à 10:39:46 | Re : Passage d'objet par POST/GET

TOURSENE

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
mardi 26 septembre 2006 à 13:16:42 | Re : Passage d'objet par POST/GET

TOURSENE

Réponse acceptée !
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.'">
        <input type="hidden" name="hidden" value="'.$soe.'">
        <input type="submit" name="submit">
        </form>
       ';
}
else
{
    $soe = $_POST['hidden'];
    $so = urldecode($soe);
    $objet = unserialize($so);
}
?>

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


Cette discussion est classée dans : affiche, post, echo, panier, objets


Répondre à ce message

Sujets en rapport avec ce message

panier : je ne m'en sors pas.... [ par jereln ] Bonjour, je suis en trai de créer un panier avec utilisation des sessions.J'ai une première page (index.php) qui correspond à mon catalogue. Chaque ar ==/=== ?? [ par DMK04 ] Bonjour,je voudrais savoir quelle est la différence entre == et === ?parce que lorsqu'on exécute le code suivant :$test = 'TEST';if($test==0)    echo Problème de $_POST [ par sagaff ] Bonjours, j'ai un problème avec ce code, en effet lorsque qu'on clique sur le input de validation ()  rien ne se passe, j'ai page blanche, si je met u Mon script d'inscription plante [ par Joe0557 ] Bonjour, j'ai fais un script d'inscription mais malheureusement il plante. Il m'affiche toujours :Une ou plusieurs erreurs se sont produites pendant l Problème avec mon script [ par azep ] Bonjour, je ne trouve pas d'erreur dans mon code php,Pouvez vous m'aider s-il vous plait ?Voici mon code php : $p Problème [ par azep ] Bonjour, j'ai un problème avec mon inscription ^^Voici mon problème, quand j'oublie un champ, sa marche et sa me met "Vous avez oublié le champs ..." case a cocher php /mysql [ par yoyo77yo ] Bonjour !! et bonne année J'ai un probleme : j'ai repris le code de quélqu'un que j'ai payé mais par contre il n'est pas complet donc je voudrait case php et mysql [ par yoyo77yo ] bonjour et bonne annéeJe vous explique mon probleme (je suis débutant)j'ai un script d'espace membre mais je veux rajouter des choses : en effet je so Cacher une liste [ par M000004965 ] Bonjour à tous,Dans une page j'utilise une liste multiple, je dois récupérer les choix de l'utilisateur pour un traitement ultérieur dans une fonction comment les valeurs d'un champ input créé dynamiquement [ par Jarod1980 ] Bonjour,Je voudrais donner la possibilité à l'utilisateur d'insérer des champs input type text dans la page WEB à partir d'un bouton. Le problème, c'e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales