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

PHP & Base de données Discussion :

Récupérer des variables dans un formulaire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut Récupérer des variables dans un formulaire
    Bonjour à tous,

    Je suis en train de construire un formulaire en PHP à partir d'une base de donnée MySQL. L'objectif est de proposer un formulaire de création de personnage pour un jeu de rôle (Shadowrun plus exactement). Les données du jeu sont sur la base de donnée (races, caractéristiques, compétences, capacités spéciales). Le joueur effectue ses choix et le formulaire calcule à chaque validation le nombre de points qu'il lui reste pour faire son personnage. Les données saisies par le joueur ne sont pas envoyées à la base de données mais sont envoyées de nouveau dans le formulaire par le biais de $_GET ce qui permet de faire les calculs des points restants avant d'envoyer à la base de donnée.

    Mon problème, car il y a un problème, se situe au niveau des compétences. Les compétences sont divisées en groupes. Chaque groupe est divisé en domaine. Ex : dans le domaine 'Combat', nous avons deux groupes : 'Armes à feu' et 'Combat rapproché', dans le domaine : 'Physique', nous avons trois groupes : 'Athlétisme', 'Furtivité' et 'Plein Air'. Dans le groupe 'Armes à feu', nous avons trois compétences : 'Armes automatiques, 'Fusils' et 'Pistolet'.

    Dans le formulaire, je mets en place un classement pour lister les groupes de compétences en fonction de leur domaine. Mais lorsque je veut récupérer les données saisies par le joueur, je n'y arrive pas car le code n'arrive pas à distinguer les groupes selon leur domaine. Le groupe 1 du domaine 1 aura la même valeur que le groupe 1 du domaine 2 et du domaine 3. J'avais pensé mettre un nom spécifique au formulaire pour chaque domaine Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name=\"groupe$iddomaine[]\"
    mais le problème est que lorsque je veut récupérer les données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $groupe = $_GET['groupe$iddomaine'];
    ça ne marche pas, il ne reconnait pas $iddomaine comme étant une variable.

    Si mes explications sont claires, que puis-je faire pour obtenir une saisie unique pour chaque groupe ?

    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
    <?php
    $groupe = $_GET['groupe'];
    echo "<fieldset><h2>Comp&eacute;tences</h2>";
    $valeur = 0;
    $req = mysql_query ("SELECT * FROM shad_domaine");
    $compteur = 0;
    while ($compteur < mysql_numrows ($req))
    	{
    		$nomdomaine = mysql_result ($req, $compteur, "nom_domaine");
    		$idomaine = mysql_result ($req, $compteur, "id_domaine");
    		echo "<p><b>$nomdomaine</b></p><p><table>";
    		$reqgroupe = mysql_query ("SELECT * FROM shad_groupe WHERE id_domaine='$idomaine' ORDER BY nom_groupe");
    		$compteurgroupe = 0;
    		while ($compteurgroupe < mysql_numrows ($reqgroupe))
    			{
    				$nomgroupe = mysql_result ($reqgroupe, $compteurgroupe, "nom_groupe");
    				$idgroupe = mysql_result ($reqgroupe, $compteurgroupe, "id_groupe");
    				$valeurgroupe = $groupe[$compteurgroupe];
    				$valeurgroupegen = $valeurgroupe * 4;
    				$gengroupe = $gengroupe + $valeurgroupegen;
    				echo "<tr><td><label><b>$nomgroupe</b> (<i>GC</i>)</label></td>";
    				echo "<td><input type=\"text\" name=\"groupe[]\" id=\"$idgroupe\" value=\"$valeurgroupe\" size=\"1\"/></td></tr>";
    				$compteurgroupe++;
    			}
    		echo "</table></p>";
    		$compteur++;
    	}
    echo "</fieldset>";
    ?>

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Pas compris grand chose, et très sceptique sur la façon de faire les choses, mais tente $_GET["id$domaine"], avec des guillemets.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    Citation Envoyé par asdf007 Voir le message
    Pas compris grand chose, et très sceptique sur la façon de faire les choses, mais tente $_GET["id$domaine"], avec des guillemets.
    Merci pour ton commentaire. Il se peut que ma façon de programmer ne soit pas très académique. N'ayant aucune formation en informatique, le codage est totalement empirique. Pour l'instant, il fonctionne et me permet d'arriver à mes fins. Cependant, actuellement, je coince, d'où ma question sur la récupération de variables.
    Pourrais-tu préciser tes incompréhensions afin que j'essaye de les éclairer (si j'y arrive )

    Je vais tester ta suggestion, merci

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Bon, après relecture, j'ai un peu mieux compris le truc. Je retire donc ce que j'ai dit plus haut : même si c'est pas un code idéal (mélange du PHP et du HTML, entre autres), pour quelqu'un qui n'a pas de formation, tu te débrouilles mieux et avec davantage de bon sens que beaucoup de gens postant par ici...

    Bref, tente donc le coup des guillemets (les variables ne sont reconnues qu'à l'intérieur de guillemets). Voir http://fr.php.net/manual/fr/language.types.string.php vers "Analyse des variables".

    Sinon, quitte à utiliser la bibliothèque mysql de base, pense aux fonctions mysql_fetch_*, par exemple http://fr2.php.net/manual/fr/functio...tch-object.php.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    Citation Envoyé par asdf007 Voir le message
    même si c'est pas un code idéal (mélange du PHP et du HTML, entre autres), pour quelqu'un qui n'a pas de formation, tu te débrouilles mieux et avec davantage de bon sens que beaucoup de gens postant par ici...
    J'avoue personnellement mieux m'y retrouver dans mon code en passant le html directement dans le code php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $groupe = $_GET['groupe'];
    echo "<fieldset><h2>Comp&eacute;tences</h2>";
    $valeur = 0;
    $req = mysql_query ("SELECT * FROM shad_domaine");
    $compteur = 0;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $groupe = $_GET['groupe'];
    ?>
    <fieldset>
    <h2>
    Comp&eacute;tences
    </h2>
    <?php
    $valeur = 0;
    $req = mysql_query ("SELECT * FROM shad_domaine");
    $compteur = 0;
    Après, si le premier code est peu académique, je m'en cogne du moment que je m'y retrouve et que j'arrive à faire des applications. Par contre pour les guillemets, au lieu de mettre des " ", je mets des ' ' et il me semble que ça marche autant à moins que... je vérifie quand même. Si c'est le cas, tu viens de m'enlever une belle épine du pied

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    J'ai tenté un nouveau code :
    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
    <?php
    echo "<fieldset><h2>Comp&eacute;tences</h2>";
    $valeur = 0;
    $req = mysql_query ("SELECT * FROM shad_domaine");
    $compteur = 0;
    while ($compteur < mysql_numrows ($req))
    	{
    		$nomdomaine = mysql_result ($req, $compteur, "nom_domaine");
    		$idomaine = mysql_result ($req, $compteur, "id_domaine");
    		echo "<p><b>$nomdomaine</b></p><p><table>";
    		$reqgroupe = mysql_query ("SELECT * FROM shad_groupe WHERE id_domaine='$idomaine' ORDER BY nom_groupe");
    		$compteurgroupe = 0;
    		while ($compteurgroupe < mysql_numrows ($reqgroupe))
    			{
    				$nomgroupe = mysql_result ($reqgroupe, $compteurgroupe, "nom_groupe");
    				$idgroupe = mysql_result ($reqgroupe, $compteurgroupe, "id_groupe");
    				$groupe = $_GET["groupe$iddomaine"];
    				$valeurgroupe = $groupe[$compteurgroupe];
    				$valeurgroupegen = $valeurgroupe * 4;
    				$gengroupe = $gengroupe + $valeurgroupegen;
    				echo "<tr><td><label><b>$nomgroupe</b> (<i>GC</i>)</label></td>";
    				echo "<td><input type=\"text\" name=\"groupe$idgroupe[]\" value=\"$valeurgroupe\" size=\"1\"/></td></tr>";
    				$compteurgroupe++;
    			}
    		echo "</table></p>";
    		$compteur++;
    	}
    echo "</fieldset>";
    ?>
    Et voici la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected ']', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/rico/www/private/jdr/shadow/pj/competences.php on line 27
    La ligne 27 étant la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<td><input type=\"text\" name=\"groupe$idgroupe[]\" value=\"$valeurgroupe\" size=\"1\"/></td></tr>";

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Citation Envoyé par rico the hobbit Voir le message
    J'avoue personnellement mieux m'y retrouver dans mon code en passant le html directement dans le code php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $groupe = $_GET['groupe'];
    echo "<fieldset><h2>Comp&eacute;tences</h2>";
    $valeur = 0;
    $req = mysql_query ("SELECT * FROM shad_domaine");
    $compteur = 0;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $groupe = $_GET['groupe'];
    ?>
    <fieldset>
    <h2>
    Comp&eacute;tences
    </h2>
    <?php
    $valeur = 0;
    $req = mysql_query ("SELECT * FROM shad_domaine");
    $compteur = 0;
    Je parle d'une séparation complète : tout le PHP de "contrôle" (récupération de l'input, etc), puis ensuite un fichier de template HTML qui affiche le résultat de façon basique. M'enfin bon.

    Pour les guillements/ simples/doubles, si tu as lu le lien que je t'ai passé tu auras compris la différence : les variables ne sont analysées qu'à l'intérieur des doubles.

    En ce qui concerne l'erreur de parsing, je te laisse relire ce même bout de doc, tout y est et avec des exemples.

    (Tu n'as manifestement pas non plus regardé les mysql_fetch_*...)

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    Citation Envoyé par asdf007 Voir le message
    Je parle d'une séparation complète : tout le PHP de "contrôle" (récupération de l'input, etc), puis ensuite un fichier de template HTML qui affiche le résultat de façon basique. M'enfin bon.
    OK, il faudra que j'y songe

    Citation Envoyé par asdf007 Voir le message
    Pour les guillements/ simples/doubles, si tu as lu le lien que je t'ai passé tu auras compris la différence : les variables ne sont analysées qu'à l'intérieur des doubles.
    D'accord mais je n'arrive pas à comprendre d'où vient l'erreur sur cette ligne car si j'essaye de mettre une variable à la place du nom, il m'indique une erreur. Value prend bien la variable $valeurgroupe par contre name ne prend la variable que si l'on n'ajoute pas les crochets $nomdomaine et non $nomdomaine[]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<td><input type=\"text\" name=\"$nomdomaine[]\" value=\"$valeurgroupe\" size=\"1\" /></td></tr>";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected ']', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/rico/www/private/jdr/shadow/pj/competences.php on line 27
    Je vais continuer de consulter la documentation que tu m'as laissé.

    Citation Envoyé par asdf007 Voir le message
    (Tu n'as manifestement pas non plus regardé les mysql_fetch_*...)
    Pour mysql_fetch, je remplace mysql_numrows ($req) par un code avec mysql_fetch ? Si c'est le cas, qu'est-ce que cela m'apporte comme intérêt ?

    Merci pour tes infos

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    J'ai réussi à obtenir une valeur unique par groupe en nommant par l'id du groupe. Mon erreur venait des guillemets simples que je mettais au $_GET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $valeurgroupe = $_GET["groupe$idgroupe"];
    				$valeurgroupegen = $valeurgroupe * 10;
    				$gengroupe = $gengroupe + $valeurgroupegen;
    				echo "<tr><td><label><b>$nomgroupe</b> (<i>GC</i>)</label></td>";
    				echo "<td><input type=\"text\" name=\"groupe$idgroupe\" value=\"$valeurgroupe\" size=\"1\" /></td></tr>";

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Citation Envoyé par rico the hobbit Voir le message
    Pour mysql_fetch, je remplace mysql_numrows ($req) par un code avec mysql_fetch ? Si c'est le cas, qu'est-ce que cela m'apporte comme intérêt ?
    Ne pas avoir à faire de compteur numérique, ni à appeler mysql_result pour chaque colonne. Tu boucles juste sur le résultat de mysql_fetch_* et tu obtiens directement les valeurs. Ce que tu fais fonctionne, ceci dit, c'est juste lourd.

    De toute façon, pour quelque chose de vraiment propre, il vaudrait mieux passer à mysqli, ou encore mieux à PDO. Mais tant que tu protèges tes requêtes, si c'est pour un petit site ça devrait bien se passer.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    Citation Envoyé par asdf007 Voir le message
    Ne pas avoir à faire de compteur numérique, ni à appeler mysql_result pour chaque colonne. Tu boucles juste sur le résultat de mysql_fetch_* et tu obtiens directement les valeurs. Ce que tu fais fonctionne, ceci dit, c'est juste lourd.

    De toute façon, pour quelque chose de vraiment propre, il vaudrait mieux passer à mysqli, ou encore mieux à PDO. Mais tant que tu protèges tes requêtes, si c'est pour un petit site ça devrait bien se passer.
    Merci pour tes conseils.

    Pour la sécurisation du formulaire, pour l'instant, mon formulaire n'est pas en ligne mais uniquement en local, du coup, je ne me suis pas trop penché sur la question.

    Le formulaire n'est toutefois pas terminé, j'aurais donc quelques petites autres questions.

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

Discussions similaires

  1. récupérer des variables dans un formulaire. JSP
    Par galia dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/09/2012, 10h06
  2. Récupérer des variables dans JTextField
    Par Loic67 dans le forum Composants
    Réponses: 2
    Dernier message: 13/06/2012, 11h06
  3. Récupérer des variables dans un texte collé
    Par Victor01 dans le forum Langage
    Réponses: 27
    Dernier message: 30/09/2009, 13h54
  4. [WD-2003] Récupérer des données dans un formulaire Word
    Par sellig60 dans le forum VBA Word
    Réponses: 8
    Dernier message: 24/05/2009, 21h12
  5. [Regex] Récupérer des Variables dans une phrase.
    Par Jimmy_S dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/05/2008, 20h50

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