Rechercher : dans
Par :

PHP - garder un objet en mémoire

Dernière réponse le 30 aoû 2007 à 11:46:16 corto, le 30 aoû 2007 à 00:41:50 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows XP
Opera 9.23

Meilleures réponses pour « PHP garder un objet en mémoire » dans :
MySQL – Optimisation VoirL’optimisation au niveau de MySQL passe par trois composants, à savoir : Optimisation du serveur MySQL Optimisation de la base de données Optimisation des requêtes Optimisation de la configuration de serveur MySQL L’optimisation du serveur peut...
Télécharger Automatic Backup VoirQuand vous perdez vos données, il n'est pas nécessaire de vous persuader de posséder un programme de sauvegarde efficace. Automatic Backup est un programme qui protégera non seulement vos données, mais aussi gardera en mémoire les anciennes versions...
Télécharger Widget eBay VoirWidget eBay est une barre de recherche internationale. Il garde en mémoire les résultats de vos 10 dernières recherches, ce qui vous facilitera la tâche pour suivre les enchères sur eBay. La barre de recherche fonctionne comme une barre de recherche...
Télécharger Mozilla Sunbird Portable VoirSunbird Portables est un outil tout en un prenant en charge la gestion des tâches sur les applications basée sur la technologie du navigateur Firefox. Il est facile à manipuler et garde en mémoire et met à jour le calendrier des tâches que vous devez...
PHP - Les variables VoirConcept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...
PHP - Les classes VoirLa notion de classe Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la...

1

Serge_La, le 30 aoû 2007 à 05:29:27

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.

Répondre à Serge_La

2

Citoyen, le 30 aoû 2007 à 06:05:08
  • +1

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_garder­variables

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

Répondre à Citoyen

3

Serge_La, le 30 aoû 2007 à 06:24:32

Ah ben voilà. C'est du gâteau.

Serge.

Répondre à Serge_La

4

Citoyen, le 30 aoû 2007 à 06:32:34
  • +2

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

Répondre à Citoyen

5

 corto, le 30 aoû 2007 à 11:46:16

Merci pour vos réponses

corto

Configuration: Windows XP
Opera 9.23

Répondre à corto