Les Allergies
Alimentaires
Posez votre question Signaler

PHP - garder un objet en mémoire

corto - Dernière réponse le 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 !
Lire la suite 

PHP - garder un objet en mémoire »

8 réponses
Réponse
+10
moins plus
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
Ajouter un commentaire
Réponse
+4
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
merci pour vos réponses

cortoConfiguration: Windows XP Opera 9.23
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour

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

Comment conserver des variables de page en page ? :
* http://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
* http://www.phpcs.com/codes/PHP5-CLASSE-FORMULAIRE_34977.aspx

@+ ;-)

Merci
Ajouter un commentaire
Réponse
+0
moins plus
Bonjours,

Le meilleurs moyen reste encore d'utiliser un framework ORM ( http://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.)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
ah ben voilà. C'est du gâteau.

Serge.
Ajouter un commentaire
Ce document intitulé « PHP - garder un objet en mémoire » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?