Bonjour,

je rencontre un problème avec mon code.

Je vous explique:

J'ai un objet Form que j'ai créé, et je l'instancie depuis index.php. Cet objet contient des méthodes qui permettent de générer des inputs de tout type ainsi que des méthodes qui permettent de faire des vérifications automatiques.
Pour faire ces vérifications automatiques, lors de la génération des inputs, je dois stocker pas mal d'informations dans différents attributs (tel que input obligatoires, valeur de tous les inputs, etc).

Seulement, lorsque je génère mes inputs et que je fais un var_dump de mon instanciation, tous les attributs sont correctement remplis.
Par contre, au moment de soumettre le formulaire afin de faire mes vérifications, tous mes attributs sont à nouveau vide et le var_dump qui se trouve dans le if(isset($_POST['submit'])) me retourne NULL.

Je pense que mon objet se réinstancie à chaque fois et cela empêche mon script de fonctionner.

J'ai déjà testé certains trucs mais j'aimerai savoir si il était possible d'instancier un objet et de stocker les valeurs de tout mes attributs afin de pouvoir les réutiliser après le 'submit' pour les vérifications!
Comme par exemple, tant que les variables $_POST existent, l'objet ne se réinstancie pas et reste le même (en l'occurence donc, aucune réinitialisation de mes attributs) par contre si les variables $_POST n'existent pas/plus, il me réinstancie un objet "vierge" pour éviter des problèmes si je passe d'un formulaire à un autre.

Je ne sais pas si j'ai été parfaitement clair, n'hésitez pas à poser autant de questions! Si par hasard, ce que je souhaite n'est pas possible, y a-t-il une façon de contourner ce problème?

Je vous remercie d'avance pour le temps que vous prendrez à mon problème,

Bien à vous,
RageAgaain

8 réponses


RageAgaain
Auteur
Réponse acceptée

Bonsoir,
je viens dire que j'ai trouvé la solutions a mon problème!
Après avoir fait la déclarations de tous mes inputs, je fais un serialize() de mon instanciation de Form que je stocke dans une variable de sessions! J'ai ensuite juste à la récupérer et la unset a la fin de mes vérifications! ;)

Salut,

il faut que tu nous montre le code.
au moins :

  • le formulaire
  • la page qui reçoit le formulaire

Ceci : $_POST['submit']
m'intrigue beaucoup.

Bonjour,
merci de votre réponse si rapide et je tiens à m'excuser pour ma réponse si tardive!

Le formulaire ainsi que son traitement son tous les deux sur la même page donc voici le code du index.php qui utilise ma classe Form dont j'ai un problème avec.

<?php
require '../../../PhpRR_Bootstrap/Classes/Autoloader.php'; //Require du Autoload
use PhpRR_Bootstrap\Form;
use PhpRR_Bootstrap\Autoloader;
Autoloader::register();

if(isset($_POST['submit']))
{
    Form::debug([$form]); //Cette fonction m'affiche le contenu de $form mais me retourne un NULL
} 

?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Viktor _dev</title>

    <!-- Bootstrap -->
    <link href="/PhpRR_Bootstrap/Assets/css/Templates/Default/bootstrap.min.css" rel="stylesheet">
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>
<div class="container">
    <form method="post">
        <h2 style="text-align: center;">Connexion</h2>
        <hr>
        <?php
        $form = new Form('post');
        $form->inputText('text', 'Un texte : ');
        $form->inputPassword('password', 'Votre mot de passe : ');
        $form->inputSubmit('submit', 'Soumettre', NULL, 'btn-primary');
        Form::debug([$form]); //Me retourne le $form avec toutes les valeurs correctes

        ?>
    </form>
</div>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="../../../PhpRR_Bootstrap/Assets/js/bootstrap.min.js"></script>
</body>
</html>

Je ne sais pas si j'ai encore été assez précis, j'ai un peu de mal à bien exprimer mon problème!

Encore merci!

RageAgaain

Bonjour.
C'est tout à fait normal, dans ta condition l'objet $form n'est pas encore créé, donc $form n'est qu'une variable qui n'existe pas et donc qui renvoi null.

C'est ce que je me suis donc j'ai créé l'objet tout en haut de mon index.php mais alors dans ce cas, au rechargement de la page, l'objet se recrée, ce qui réinitialise donc tous mes attributs...

As-tu regardé le tutoriel vidéo Un exemple concret : Form de la formation La POO en PHP ?

Oui oui mais je me base pas tout à fait sur la même structure que lui pour faire mon objet! que pourrait il m'apporter à mon problème?

que pourrait il m'apporter à mon problème?

Tu demandais comment garder les données postées via le formulaire au niveau de la classe et il en parle justement.