IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Classes et Formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 37
    Par défaut Classes et Formulaire
    Bonjour,
    lors d'un exercice, j'ai crée une classe avec un constructeur et sa méthode. Lors de la création de l'objet, le fonction renvoi bien le texte avec les paramètres.
    Mais quand j'ai voulu ajouter une autre classe pour introduire un formulaire, ça ne me donne plus le résultat, ça me vire de la page pour revenir à la racine du serveur. Le formulaire s'affiche mais le traitement ne s'effectue pas.

    J'ai du me gourer dans l'appel de la méthode getformu(), mais je ne vois pas comment la corriger.
    Est-ce parce que je l'appelle comme-ci elle avait un constructeur ??

    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    	$nom = $_POST['nom'];
    	$departement = $_POST['departement'];
     
    	class formu{
    		public function getformu(){
    			echo '<form method=\'POST\' action="<? $_SERVER["PHP_SELF"]?><br/>';
    			echo '<fieldset><br/>';
    			echo '<legend>Associer le département à une ville</legend><br/>';
    			echo '<label>Taper le nom de la ville</label><input type=\'text\' name=\'nom\'/><br/>';
    			echo '<label>Taper le nom du département<label><input type=\'text\' name=\'departement\'/><br/>';
    			echo '<input type=\'submit\' name=\'envoi\' value=\'Envoi\'/><br/>';
    			echo '</fieldset><br/>';
    			echo '</form>';
     
    		}
    	}
    	class maville{
    		public $nom;
    		public $departement;
    		public function __construct($nom,$departement){
    			$this->nom = $nom;
    			$this->departement = $departement;
    		}
    		public function getinfo(){
    			$texte = 'La ville de '.$this->nom.' est dans le département : '.$this->departement.'<br/>';
    			return $texte;
    		}
    	}
    	$formu1 = new formu();
    	echo $formu1->getformu();
    	$ville1 = new maville($nom,$departement);
    	echo $ville1->getinfo();
    ?>

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Par défaut
    Bonjour wattaroo,

    J'ai du me gourer dans l'appel de la méthode getformu(), mais je ne vois pas comment la corriger.
    Dans ta méthode getformu de ta classe formu tu fais un echo de ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		public function getformu(){
    			echo '<form method=\'POST\' action="<? $_SERVER["PHP_SELF"]?><br/>';
    			echo '<fieldset><br/>';
    // etc....

    or lorsque tu appel cette méthode depuis ton objet tu fais aussi un echo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $formu1->getformu();
    Je pense que c'est le "double echo" qui fait foirer ton programme.
    Essaye de remplacer ta méthode par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function getformu(){
     
        $form = '<form method=\'POST\' action="<? $_SERVER["PHP_SELF"]?><br/>';
        $form .= '<fieldset><br/>';
        $form .=  '<legend>Associer le département à une ville</legend><br/>';
        $form .=  '<label>Taper le nom de la ville</label><input type=\'text\' name=\'nom\'/><br/>';
        $form .=  '<label>Taper le nom du département<label><input type=\'text\' name=\'departement\'/><br/>';
        $form .=  '<input type=\'submit\' name=\'envoi\' value=\'Envoi\'/><br/>';
        $form .=  '</fieldset><br/>';
        $form .=  '</form>';
     
        return $form;
     
    }
    Bonne journée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 37
    Par défaut
    Merci Niki59 pour ton aide.

    Effectivement, le double "echo" ne doit pas faciliter les choses.

    Mais j'ai corrigé mon code avec tes recommandations et je n'obtiens pas un meilleur résultat. Ca plante toujours et me renvoi sur la racine du serveur.

    Donc, il doit s'agir d'autre chose.

    Si quelqu'un à une autre idée. Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    	class formu{
    		public function getformu(){
    			$form = '<form method=\'POST\' action="<? $_SERVER["PHP_SELF"]?>';
    			$form .='<fieldset>';
    			$form .='<legend>Associer le départment à une ville</legend>';
    			$form .='<label>Taper le nom de la ville</label><input type=\'text\' name=\'nom\'/><br/>';
    			$form .='<label>Taper le nom du département<label><input type=\'text\' name=\'departement\'/><br/>';
    			$form .='<input type=\'submit\' name=\'envoi\' value=\'Envoi\'/>';
    			$form .='</fieldset>';
    			$form .='</form>';
    			return $form;
    		}
    	}
     
    	$nom = $_POST['nom'];
    	$departement = $_POST['departement'];
     
    	class maville{
    		public $nom;
    		public $departement;
    		public function __construct($nom,$departement){
    			$this->nom = $nom;
    			$this->departement = $departement;
    		}
    		public function getinfo(){
    			$texte = 'La ville de '.$this->nom.' est dans le département : '.$this->departement.'<br/>';
    			return $texte;
    		}
    	}
    	$form = new formu();
    	echo $form->getformu();
     
    	$ville1 = new maville($nom,$departement);
    	echo $ville1->getinfo();
    ?>

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il y a un petit truc à retenir, et à exploiter, c'est de vérifier le HTML généré (par Php) au niveau de ton navigateur : click droit -> code source de la page
    Ensuite, analyser le code pour repérer les éventuels erreurs.

    Le problème du HTML (et Css, Javascript, ... tout ce qui est coté client) c'est que s'il y a une erreur, il y a rien qui nous l'averti.
    A moins d'utiliser des outils comme installer un plugin Firebug dans FireFox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = '<form method=\'POST\' action="<? $_SERVER["PHP_SELF"]?>';
    Ce code Php va générer ce code HTML :
    <form method='POST' action="<? $_SERVER["PHP_SELF"]?>

    Il faudrait faire plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $form = '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    Cette ligne c'est en faite déjà du Php, il n'est plus utile de remettre des <?php ?>, ça sera interprété comme une chaine.
    Il faut concaténer.


    Il y a un <label> non fermé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <label>Taper le nom du département<label> <- pas fermé
    On le tape avec quoi le département, un marteau, une masse ?
    Aussi, on ne peu vraiment pas taper un prénom de département ?

    Ne faudrait il pas dire : Veuillez saisir un département ?

  5. #5
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Je ne sais pas quel est le contexte de l'appel mais à la lecture du code, je vois quelques soucis potentiels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $machin = $_POST['toto']
    ne peut donner de résultats prévisibles que si $_POST['toto'] a été initialisé. Sinon, quand tu utilises $machin par la suite, tu auras des soucis.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nom = $_POST['nom'];
    $departement = $_POST['departement'];
    ...
    $ville1 = new maville($nom,$departement);
    echo $ville1->getinfo();
    Si $nom et $departement ne sont pas définis, $ville1->getInfo() devrait planter. Tu peux tracer en mettant un die(__LINE__) en divers endroits de ton code. Tant que tu vois ton "die", c'est que ça plante plus loin et tu peux le déplacer pour trouver la ligne fautive.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 37
    Par défaut
    Merci à vous deux d'avoir pris le temps de me répondre.

    RunCodePhp, j'ai effectué ta modif sur "l'action" et effectivement les balises php faisaient double emploi. Ca marche sans problème depuis. Merci pour tes conseils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    	class formu{
    		public function getformu(){
    		$form = '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    		$form .= '<fieldset>';
    		$form .= '<legend>Associer le départment à une ville</legend>';
    		$form .= '<label>Saisir le nom de la ville</label><input type=\'text\' name=\'nom\'/><br/>';
    		$form .= '<label>Saisir le nom du département</label><input type=\'text\' name=\'departement\'/><br/>';
    		$form .= '<input type=\'submit\' name=\'envoi\' value=\'Envoi\'/>';
    		$form .= '</fieldset>';
    		$form .= '</form>';
    		return $form;
    		}
    	}
     
    	$nom = $_POST['nom'];
    	$departement = $_POST['departement'];
     
    	class maville{
    		public $nom;
    		public $departement;
    		public function __construct($nom,$departement){
    			$this->nom = $nom;
    			$this->departement = $departement;
    		}
    		public function getinfo(){
    			$texte = 'La ville de '.$this->nom.' est dans le département : '.$this->departement.'<br/>';
    			return $texte;
    		}
    	}
    	$formu1 = new formu();
    	echo $formu1->getformu();
    	$ville1 = new maville($nom,$departement);
    	echo $ville1->getinfo();
     
    ?>
    Herode, je comprends bien ta remarque et suis d'accord avec toi, mais en l'occurrence, $nom et $departement sont définis, car le code récupère bien les saisies du formulaire.
    Je vais quand même suivre tes conseils et voir comment m'améliorer avec le "die(__LINE__)"

    Merci à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Mise en oeuvre des modules de classe de formulaire
    Par Triton972 dans le forum IHM
    Réponses: 1
    Dernier message: 26/01/2012, 21h25
  2. [PHP 5.3] Class et formulaire
    Par ETVigan dans le forum Langage
    Réponses: 15
    Dernier message: 28/05/2010, 19h06
  3. Où placer les classes de formulaires ?
    Par littleman dans le forum Zend_Form
    Réponses: 5
    Dernier message: 12/09/2008, 14h09
  4. [Vb.net]_Héritage de classe sur formulaire
    Par Gdal dans le forum VB.NET
    Réponses: 3
    Dernier message: 26/03/2007, 20h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo