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 :

Problème $_POST


Sujet :

Langage PHP

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut Problème $_POST
    Bonjour,

    J'ai écrit une classe permettant de faciliter la création de formulaires. J'ai un bouton Submit et un champ caché nommé "isSubmitted", avec la valeur 1.

    Je devrais savoir si le formulaire a été envoyé avec $_POST["isSubmitted"]. Mais le tableau $_POST est toujours vide, après envoi du formulaire. Je ne comprends pas pourquoi...

  2. #2
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Avec quelle méthode soumets-tu le formulaire ? GET ou POST ?

    Montres un peu de code.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Citation Envoyé par macbook
    Avec quelle méthode soumets-tu le formulaire ? GET ou POST ?

    Montres un peu de code.
    J'utilise une méthode POST.

    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
    37
    38
    39
    40
    41
    class formGenerator extends XHTMLElement {
    // Définition des variables
    var $action;
    var $method = "post";
    var $accept;
    var $enctype = "text/plain";
    var $errorMessage;
    var $redirection;
    var $formElements = array();
    var $requiredNote;
     
    [...]
    // Récupération des variables et validation
    function validate() {
    	print_r($_POST);
    	if ( $_POST["isSubmitted"] ) {
    		return true;
    	}else{
    		return false;
    	}
    }
    // Traitement
    function process() {
    	echo "Formulaire envoyé !";	
    }
    // Affichage du formulaire
    function generateXHTML() {
    	//Champ caché pour l'envoi du formulaire
    	$xhtml = "<form".$this->getAttributes().">\n";
    	$submitted = new hiddenField();
    	$submitted->setName("isSubmitted");
    	$submitted->setValue(1);
    	$xhtml .= $submitted->generateXHTML();
    	//Affichage des champs
    	foreach ( $this->formElements as $formElement ) {
    		$xhtml .= $formElement->generateXHTML();
    	}
    	$xhtml .= "</form>\n";
    	$xhtml .= $this->requiredNote."\n";
    	return $xhtml;
    }

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Voici le code HTML généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <html><head></head><body>Array()
    <form id="form" title="Exemple de formulaire" action="/jerome/test_form_02.php" method="post" enctype="text/plain">
    <input value="1" name="isSubmitted" type="hidden">
    <label for="nom">Votre nom
    <input id="nom" title="Exemple de champ" value="Saisir votre nom" name="nom" type="text">
    </label>
    <label for="prenom">Votre prénom *
    <input id="prenom" value="Saisir votre prénom" name="prenom" type="text">
    </label>
    <input id="submit1" name="submit" value="Envoyer" type="submit">
    <input id="reset1" name="reset" value="Annuler" type="reset">
    </form>
    (*) Champs obligatoires
     </body></html>

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Personne n'a une idée ?

  6. #6
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Le formulaire a l'air bon.

    Peut-etre une faute dans ton php "test_form_02.php"

    Pierre

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Non, ça ne marche pas ! Par contre ça fonctionne avec la méthode GET... Il s'agit peut-être d'un bug de PHP ou du serveur.

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Sans l'enctype, ça fonctionne.

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Citation Envoyé par Kirkis
    Salut

    Sans l'enctype, ça fonctionne.
    Ca fonctionne, mais pas correctement. La variable $this->value est effacée dans la fonction suivante. Je ne comprends pas pourquoi.

    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
    	function validate( $method = "post" ) {		
    		if ( $method = "post" ) {	
    			$this->value = $_POST[$this->name];
    			echo "<br /> POST : ".$this->value;
    		}
    		if ( $method = "get" ) {	
    			$this->value = $_GET[$this->name];
    		}
    		echo "<br /> VALUE : ".$this->value;
    		if ( ( $thecis->required ) && ( $this->value == "" ) ) {
    			$this->value = $this->emptyMessage;
    			$this->style = "font-weight: bold; color: rgb(255, 0, 0);";		
    			return false;
    		}
    		return true;
    	}

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    :

    En fait, nous avons changé de problème. Je présume que le formulaire est correctement envoyé mais que tu récupères mal les informations ?

    Sinon, puis-je suggérer l'utilisation des getters et setters, quitte à faire de l'objet ?

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Citation Envoyé par Kirkis
    J'ai vu ça mais le problème ne vient pas de là. $this->value est mise à jour, mais de nouveau vide quelques lignes plus tard !

    Citation Envoyé par Kirkis
    En fait, nous avons changé de problème. Je présume que le formulaire est correctement envoyé mais que tu récupères mal les informations ?
    En fait je récupère bien les informations via $_POST. C'est la mise à jour de $this->value qui pose problème.

    Citation Envoyé par Kirkis
    Sinon, puis-je suggérer l'utilisation des getters et setters, quitte à faire de l'objet ?
    Oui, j'ai essayé ça aussi, sans résultat.

    Ca fonctionne dans certains cas si je définis au départ une autre variable, de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $m = $this->value = $_POST[$this->name];

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Reprends ton code au calme, je suis sûr que tu verras à quel moment tu écrases ta variable. Le construct echo est encore et toujours le meilleur outil de débogage
    En tout état de cause, une variable ne disparaît pas inexplicablement en plein script. Elle est assurément écrasée.

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Citation Envoyé par Kirkis
    Reprends ton code au calme, je suis sûr que tu verras à quel moment tu écrases ta variable. Le construct echo est encore et toujours le meilleur outil de débogage
    En tout état de cause, une variable ne disparaît pas inexplicablement en plein script. Elle est assurément écrasée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $method = "get" ) {
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $method == "get" ) {
    $this->value prenait la valeur de $_GET[$this->name], qui etait vide.


  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Afin d'éviter ce problème, certains programmeurs adoptent le style suivant pour les comparaisons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if('valeur' == $variable)
    Le résultat est identique au test classique mais l'analyseur syntaxique de PHP va te crier à la figure si tu oublies un signe égal. Le seul souci est que cela ne correspond pas à ce que nous avons l'habitude de manipuler.
    À chacun de voir ce qu'il préfère.

Discussions similaires

  1. [MySQL] Problème $_POST Liste Deroulante
    Par gueguenk dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 19/04/2010, 08h54
  2. [PHP 5.0] Probléme $_POST vide
    Par Vinz31 dans le forum Langage
    Réponses: 13
    Dernier message: 02/04/2009, 16h26
  3. problème $_POST et de clé
    Par damien77 dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2007, 15h48
  4. [Tableaux] Problème $_POST
    Par Alain15 dans le forum Langage
    Réponses: 9
    Dernier message: 19/07/2006, 18h02
  5. problème $_POST et $_SESSION et requête MYSQL
    Par GarGamel55 dans le forum Requêtes
    Réponses: 9
    Dernier message: 25/01/2006, 22h10

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