PHP - garder un objet en mémoire

Fermé
corto - 30 août 2007 à 00:41
 arnaud - 19 juil. 2011 à 13:46
Bonjour tout le monde

Une petite question, mais qui est en train de m’empoisonner d’autant qu’il me semble que la solution doit être toute bête …

Je voudrais tout simplement qu’une instance de classe reste en mémoire lorsqu’on passe d’un formulaire à un autre.

Mettre tout le code sur lequel je travaille serait fastidieux, voici donc une modélisation :

<html><title>question.php</title><head></head><body><?php

$UC = new UneClasse() ;

if($_POST['Etape']=='')
{
echo "Point de départ<br>" ;
echo "<form action='#' method=post>" ;
echo "<select name='choix'>" ;
echo "<option value='choix 1'>Choix 1</option>" ;
echo "<option value='choix 1'>Choix 1</option>" ;
echo "</select>" ;
echo "<input type=hidden name='Etape' value='Première'>" ;
echo "<input type=submit>" ;
echo "</form>" ;
}

if($_POST['Etape']=='Première')
{
echo $_POST['Etape'] . " étape" ;
$UC->UneVariable=$_POST['choix'] ;
echo "<form action='#' method=post>" ;
echo "<input type=hidden name='Etape' value='Seconde'>" ;
echo "<input type=submit>" ;
echo "</form>" ;
}

if($_POST['Etape']=='Seconde')
{
echo $_POST['Etape'] . " étape<br>" ;
echo "La propriété de la classe est " . $UC->UneVariable . "<br>";
}

class UneClasse
{
public $UneVariable ;

function UneClasse()
{
echo "Une classe a été créé<br>" ;
}
}
?></body></html>


Lors du premier formulaire, on fait un choix dans la liste déroulante. Lors du deuxième formulaire, on récupère le choix sélectionné et on le stocke dans la propriété de l’objet. Mais, quand on arrive au troisième formulaire, l’objet a été réinitialisé et sa propriété est perdue !

Il doit quand même avoir moyen de garder cette valeur, non ?

Alors évidemment, si le problème était aussi simple, je mettrais cette valeur dans une balise hidden et puis voilà. Ce qui se passe, c’est que dans le vrai script, les choix successifs déterminent l’affichage des prochains formulaires et qu’il faut une flopée de balises hidden pour les gérer, d’autant que c’est tout plein de conditionnels. Ce serait tellement plus simple dans une classe !! (et, j’ose à peine le dire, tellement plus class …)

Si vous avez une solution …

Merci !
A voir également:

8 réponses

Bonjour

La sérialisation en PHP : fonctionnement et intérêts :
* Formulaire Web en PHP ...

Partie 3: Sérialisation et points importants .
=> La sortie de PHP5 va amener à revoir ce tuto de Nikoh, qui reste valable pour PHP4 .
* http://www.phpdebutant.org/article44.php

La sérialisation est un moyen simple de sauvegarder vos objets :
* Dans une variable, un fichier, une base SQL, ... ; afin de les réutiliser ultérieurement .

Vous pouvez notamment passer un objet d'une page à une autre ;
Pour cela on dispose des deux fonctions suivantes :

$chaîne = serialize ($objet); <<<===
$objet = unserialize ($chaîne); <<<===

"La fonction serialize permet donc de convertir un objet passé en paramètre en une variable chaîne contenant la valeur de chacune des variables membres de l'objet à sérialiser."

"La fonction unserialize effectue l'opération inverse."

!! La fonction serialize ne sauvegarde en aucun cas les fonctions membres d'un objet .
=> Ainsi, lors de l'appel à la fonction unserialize, la classe correspondante doit être déclarée .
=> On voit ici l'intérêt de mettre les classes dans des fichiers séparés .

Merci
14
Sinon le plus simple dans ton cas c'est de stocker ton objet directement dans $_SESSION. Mais le serialize marche très bien mais c'est pas obligatoire. Si je me souviens bien, PHP serialize automatique ton objet à la fin de ton script et le unserialize au début du script suivant.

http://php.net/manual/fr/language.oop5.serialization.php
4
merci pour vos réponses

corto
1
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
30 août 2007 à 05:29
Bonsoir, je vois plein de solutions qui évitent le php. Exemples:

- une seule page pour tous les formulaires avec javascript pour les changements.
- garder les infos dans un cookie.

Il y avait une discussion de ce genre ce printemps avec un login à garder d'une page php à l'autre. Personne n'a mentionné une solution de variable php. Je crois qu'elles sont toutes réinitialisées en changeant de page. Quelqu'un pour confirmer?

Serge.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

FORMULAIRE WEB EN PHP SUR PLUSIEURS PAGES ; TRANSFERTS DE DONNÉES PAR CLASSE :

Comment conserver des variables de page en page ? :
* https://php.developpez.com/faq/?page=sessions#concepts_gardervariables

Auteur : Cyberzoide
En stockant leurs valeurs dans une base de données
En les enregistrant dans un fichier sur le serveur (mais oblige à donner des droits d'écriture aux visiteurs)
Utiliser des cookies (malheureusement certains navigateurs ne les acceptent pas)
En les envoyant dans l'URL :
* (mais seront visibles aux visiteurs dans la barre d'adresse et cela leur impose de toujours utiliser les liens hypertextes)
En les passant par un formulaire (mais impose aux visiteurs de cliquer sur un bouton d'envoi)
En utilisant une session

Pour ce qui est de conserver les données, sans Javascript, c'est très simple :
Cette classe conserve bien le formulaire créé .
Si tu veux passer l'objet de page en page, il suffit de le sérialiser .
* Commentaire de : malalam le 28/01/2006 12:52:35
* https://codes-sources.commentcamarche.net/

@+ ;-)

Merci
0
Bonjours,

Le meilleurs moyen reste encore d'utiliser un framework ORM ( https://fr.wikipedia.org/wiki/Mapping_objet-relationnel ) telle que Doctrine ( http://fr.wikipedia.org/wiki/Doctrine_(ORM)) permettant de stocker correctement ces objets dans une bdd.

; )

(Ps : Je remonte le topic, mais cela pourra être utile pour des intéresser faisant des recherche sur notre bon ami google.)
0
Bonjour tout le monde;

j'ai fait une formulaire :
<form action="contact.php" method="post" name="form1">
  <p>Nom :<input size="20" name="nom" type="text">
     prenom :<input size="20" name="entre" type="text">  
     votre message :<textarea name="msg" rows="20" cols="30"></textarea>
  <button type="submit" name="Envoyer"> Envoyer </button> </p>


**************** mais le problemme **************
je veux sauvgarder (nom,prenom,votre msg) dans une table dans la base de donnees mais j'ai trouver un peu de déficulté car je suis nouveau dans la programmation surtou PHP/MSQL SVP ce que vous pouvez m'aidez pour passer cette etape :( SVP montrer moi juste les etapes et le code pour sauvgarder mes donnees dans des variables aprés comment les enregistré dans la base donnees .

merciii d'avance
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
30 août 2007 à 06:24
ah ben voilà. C'est du gâteau.

Serge.
-1