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 :

Soucis de formulaire avec variable globale


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 17
    Points
    17
    Par défaut Soucis de formulaire avec variable globale
    Bonjour,

    J'ai un soucis... vous pouvez peut-être éclairer ma lanterne, je ne comprends pas pourquoi mon second formulaire ne s'affiche pas...

    Alors je situe le contexte, je viens d'une page sur laquelle j'ai cliqué sur une image, qui me sert de lien vers la page actuelle, tout en récupérant un id afin d'afficher l'image cliquée en première dans un slideshow. Au dos de ces images se trouve un formulaire.
    Ici je teste avec 2 images, la première c'est ok mais pour la seconde ce n'est pas le cas.
    J'obtiens bien le texte qui doit se trouver dans le formulaire, sauf qu'il n'y a que la balise fermante du second formulaire.

    Donc, les parties de code qui nous intéressent

    Tout d'abord ouverture de formulaire, à noter que la global $vGlobForm est mise à NULL tout en haut du fichier qui contient les fonctions suivantes
    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
     
    function startForm($args)
    {
    	global $vGlobForm;
    	$vGlobForm = NULL;
     
    	$openForm = "<form";
    	$closeForm = ">";
     
    	$vGlobForm .= $openForm;
     
    	if (!empty($args))
    	{
    		foreach($args as $key => $value)
    		{
    			$vGlobForm .= ' '.$key.'="'.$value.'"';
    		}
    	}
    	$vGlobForm .= $closeForm;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Fonction fermant un formulaire
    function endForm()
    {
    	global $vGlobForm;
    	$vGlobForm .= '</form>';
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Fonction renvoyant l'intégralité du formulaire
    function getForm()
    {
    	global $vGlobForm;
    	return $vGlobForm;
    }
    A noter ici que les lignes commentées de 52 à 54 sont fonctionnelles...

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    // Utilisée sur la page Slideshow.php
    function getPicSlideshow()
    {
    		dbConnect('mysql','localhost',...Connexion à la DB);
     
    		global $vGlobConnect;
    		global $vGlobForm;
     
    		// On vérifie le rôle de l'utilisateur connecté pour la possibilité d'édition du formulaire ModelDescription
    		if ((isset($_SESSION['UserRole'])) && ($_SESSION['UserRole'] == 'Administrateur'))
    			$form = startForm($args = array('class' => 'backfacePic imageAutre visHidden',
    											'name' => 'ModelDescription',
    											'contenteditable' => 'false',
    											'ondblclick' => 'contentUpdate(this.id)'
    											)
    							 );
    		else 
    			$form = startForm($args = array('class' => 'backfacePic imageAutre visHidden',
    											'name' => 'ModelDescription',
    											'contenteditable' => 'false'
    											)
    							 );
     
    		// On sélectionne tous les "models"
    		$sql = $vGlobConnect->query("CALL `selectModels`();");
     
    		// On fetch le résultat de la procédure stockée
    		$tab = $sql->fetchAll();
     
    		// On récupère l'indice de l'image sur laquelle l'utilisateur a cliqué sur la page d'index
    		$firstPicModelID = array_search($_GET['picId'], array_column($tab, 'ModelID'));
     
    		// On affiche l'image en question avec les infos récupérées
    		echo '<img id="'.$firstPicModelID.'" src="'.$tab[$firstPicModelID]['ModelPath'].$tab[$firstPicModelID]['ModelName'].'" alt="'.$tab[$firstPicModelID]['ModelName'].'" class="imageAutre visHidden" title="'.$tab[$firstPicModelID]['ModelName'].'" />';
    		$vGlobForm .= $form;
    		$vGlobForm .= $tab[$firstPicModelID]['ModelDescription'];
    		endForm();
    		echo getForm();
     
    		// On charge à présent les autres
    		foreach ($tab as $value)
    		{
    			if ($value['ModelID']==$_GET['picId'])
    				continue;
     
    				$firstPicModelID++;
    				echo '<img id="'.$firstPicModelID.'" src="'.$value['ModelPath'].$value['ModelName'].'" alt="'.$value['ModelName'].'" class="imageAutre visHidden" title="'.$value['ModelName'].'" />';
    			//echo '<form class="backfacePic imageAutre visHidden" name="ModelDescription" contenteditable="false">';
    			//echo $value['ModelDescription'];
    			//echo '</form>';
    				$vGlobForm = $form;
    				echo '<script type="text/javascript">alert("'.$vGlobForm.'")</script>';
    				$vGlobForm .= $value['ModelDescription'];
    				endForm();
    				echo getForm();
    		}
                    $sql->closeCursor();
    }
    J'obtiens donc ceci, ou visiblement il me manque le début de mon second formulaire... Une idée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <div class="coverSide" id="left"></div>
         <div class="container" >
              <div class="slider" >
                   <div class="prev" ></div>
                        <img id="0" src="../images/products/5.jpg" alt="5.jpg" class="imageAutre visHidden" title="5.jpg" />
                        <form class="backfacePic imageAutre visHidden" name="ModelDescription" contenteditable="false">Test de description</form>
                        <img id="1" src="../images/products/123.jpg" alt="123.jpg" class="imageAutre visHidden" title="123.jpg" />Seconde description</form>
                   <div class="next" ></div>
              </div>
         </div>
         <div class="coverSide" id="right"></div>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le rendu que tu nous montres ne semblent pas correspondre au code puisqu'on y voit les deux lignes commentées à savoir la description suivi de </form>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 17
    Points
    17
    Par défaut
    C'est pourtant le cas.
    Je m'explique, les 3 lignes sont commentées ok, c'était pour tester et il me les affiche si je les décommente, et que je commente les autres.
    Mais dans le cas présent, ce n'est pas celles-là qu'il m'affiche vu qu'elles sont commentées, logique.
    Donc la description ainsi que la balise de fermeture du form, sont issues des lignes juste en dessous, hors il me manque le contenu de la variable $form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $vGlobForm = $form; --> normalement ici le début du formulaire, qui fonctionne normalement plus haut mais pas ici pour une obscure raison
    $vGlobForm .= $value['ModelDescription'];  -----> La derscription
    endForm(); -------> Fonction pour la balise de fermeture du formulaire
    echo getForm(); --> on retourne le formulaire
    Je t'assure que c'est le rendu qui correspond, c'est pour ça que je suis perdu

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Si j'ai bien compris ton fonctionnement, il faut que tu appelles startForm pour ouvrir les balises de formulaire. Or, tu l'appelles qu'une seule fois au début du script. C'est normal ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 17
    Points
    17
    Par défaut
    Tout à fait Celira, mais je stocke cet appel dans ma variable $form.

    Dans le start form, je set la variable globale $vGlobForm à Null pour ensuite la garnir à coups de concaténation.
    Avec le endForm() j'ajoute la balise fermante à la variable globale $vGlobForm, et enfin je renvois l'intégralité du formulaire avec le getForm().

    Donc comme vous pouvez le constater, cela fonctionne très bien à la première séquence ( ligne 36 à 40 ) mais pas lors de la seconde, de la ligne 53 à 57 ( ne pas tenir compte de la ligne javascript )

    Pour répondre à ta question, le startForm n'est appelé qu'une fois, mais comme je le stocke dans la $form, et que j'appelle celle-ci 2 fois ( ligne 37 & 53 ), ça devrait le faire non ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ta fonction startForm n'a pas de return, donc tu ne peux récupérer ce qu'elle envoie. ça marche la 1ere fois parce que tu concatènes $form (en fait rien) à $vGlobForm (qui a en fait été affectée en global en l'intérieur de startForm).

    La question est en fait, c'est pourquoi te prendre la tête avec une variable globale ? pourquoi ne pas simplement renvoyer le morceau de chaine en sortie de la fonction ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 17
    Points
    17
    Par défaut
    J'ai dû relire ton explication même si au final, c'était limpide.
    Mais j'ai compris, pourquoi ça ne fonctionnait pas.

    Pour répondre à ta question, il s'agit d'un de mes projets de fin d'étude, et une des contraintes est d'utiliser diverses fonctions afin de construire un formulaire, et ce, à l'aide d'une variable globale, pour ensuite renvoyer l'intégralité du formulaire avec le endform(). Alors cette lumineuse idée, me les ... sévère, mais bon, pas vraiment le choix.

    Je vais devoir dupliquer une partie de mon code, ce qui ne m'enchante pas, en attendant de trouver mieux.

    Un grand merci pour ton éclaircissement.

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

Discussions similaires

  1. problème avec variables globales
    Par johnburton54 dans le forum VBA Access
    Réponses: 5
    Dernier message: 12/06/2007, 09h20
  2. Formulaire et Variable Globale
    Par Jean_Benoit dans le forum IHM
    Réponses: 4
    Dernier message: 27/02/2007, 22h02
  3. Réponses: 4
    Dernier message: 04/02/2007, 19h39
  4. VALUE d'un champ de formulaire avec variable php
    Par shub dans le forum Langage
    Réponses: 5
    Dernier message: 04/04/2006, 12h13
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20

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