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 :

Récupération et utilisation variable


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut Récupération et utilisation variable
    Bonjour à vous,

    Dans le cadre d'un jeu de rôle, je souhaite créer un formulaire afin que les joueurs puissent créer leur personnage. Le formulaire effectue le calcul des différentes caractéristiques. Dans un premier temps, je souhaite que les données du formulaire ne soient pas enregistrées dans une base de donnée. Le fait de gérer des données sans base de donnée me pose problème, je n'ai pas l'habitude. A chaque validation du formulaire, je souhaite pouvoir conserver des données sous la forme de variables que je puisse réutiliser. Je vous livre ici qu'une partie du formulaire. En effet, une grande partie des données sont gérées et ne posent pas de soucis. Le problème se pose pour la gestion des "Aspects". A chaque validation du formulaire, le joueur peut ajouter un nouvel "Aspect". Chaque "Aspect" ainsi ajouté, peut, ensuite, être modifié, sa valeur augmentée ou diminuée. Toutefois, je n'arrive pas à conserver ces valeurs.

    Le formulaire est très classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="creation.php" method="post">
    <h2>Les Aspects</h2>
    <p><label>Nom de l'Aspect</label><input type="text" name="aspect"/></p>
    <p><input type="submit" name="valider"/></p>
    </form>
    Ensuite, la récupération des données, qui se fait au début du programme et c'est là que se pose le problème. En effet, je fais intervenir la variable "$chiffre" pour tenter de comptabiliser le nombre d'aspects. En effet, l'objectif est que l'utilisateur puisse à chaque fois valider de nouveaux aspects mais je pense que je ne m'y prends pas de la bonne façon...

    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
    <?php
    if (isset ($_POST['valider']))
    	{
    if (($chiffre == NULL) AND (($_POST['aspect'])==TRUE))
    			{
    				$chiffre = 0;
    				$aspect[$chiffre]=$_POST['aspect'];
    				echo "<p>le premier aspect est $aspect[$chiffre]</p>";
    			}
    		elseif (isset($_POST['aspect']) AND ($chiffre == TRUE))
    			{
    				$chiffre++;
    				$aspect[$chiffre]=$_POST['aspect'];
    				echo "<p>le second aspect est $aspect[$chiffre] et le chiffre est $chiffre</p>";
    			}
    		if ($chiffre == TRUE)
    			{
    				$compteur = 0;
    				while ($compteur < $chiffre)
    					{
    						$aspect[$compteur]=$_POST["aspect$compteur"];
    						echo "<p>l'aspect est le suivant : $aspect[$compteur]</p>";
    						$compteur++;
    					}
    			}
    	}
    A la suite de ce code, j'ai modifié le premier formulaire pour essayer de faire apparaître les "Aspects" validés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?PHP
    $compteur = 0;
    while ($compteur < $chiffre)
    	{
    		echo "<tr><th>Nom</th></tr>";
    		echo "<tr><td>$aspect[$compteur]</td></tr>";
    		echo "<input type=\"hidden\" name=\"aspect$compteur\" value=\"$aspect[$compteur]\" />";
    		$compteur++;
    	}
    echo "</table></p>";
    echo "<p>";
    echo "<label>Nom</label><input type=\"text\" name=\"aspect\"/>";
    ?>
    Je pense que mon code serait à reprendre entièrement mais je n'arrive pas à trouver une méthode et je reste bloqué...

    Ma question est donc la suivante : comment faire pour récupérer plusieurs variables à partir d'un seul champ de formulaire et les conserver après chaque validation ?

    Merci pour vos réponses et n'hésitez pas à me dire si je ne suis pas clair

  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
    Pour être honnête ton code est affreux.
    En particulier tu n'est pas précis sur le type des tes variables.
    Par exemple, $chiffre doit visiblement être un entier mais tu fais d'un test pour savoir s'il est NULL et ensuite un test pour savoir s'il vaut TRUE.
    Même si techniquement cela peut donner un résultat parce que PHP se débrouille quand même, il est difficile de comprendre ou ton code va.

    Un exemple de ce que pourrait être ton fichier creation.php en utilisant des sessions et des tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    session_start(); // on démarre une session PHP
    if (!empty($_POST['aspect']) { // si la donnée existe et n'est pas vide
         $_SESSION['aspect'][] = $_POST['aspect']; // on la place dans un tableau PHP en session
    }
     
    foreach($_SESSION['aspect'] as $value) { // on parcours le tableau
       echo '<p>' . $value . '</p>'; // et on affiche chaque élément
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    Je te remercie pour tes commentaires et en effet, je pense que mes codes ne sont pas excellents voire pas terribles. En fait, mes connaissances du PHP me viennent des quelques heures de lecture sur le net et je n'arrive pas à prendre le temps de m'y mettre à fonds. Du coup, je bricole des codes qui, tant bien mal, fonctionnent. J'imagine, en effet, qu'un pro puisse se piquer les yeux en voyant mes codes. Bref, je vais tester dans les prochains jours ton code et je vais voir ce que cela donne. Et par la même occasion, je vais approfondir les éléments que tu viens de me communiquer en particulier la variable $_SESSION que je n'ai jamais utilisé.

    Merci bien

  4. #4
    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
    Pour faire court, une session PHP permet de stocker des données jusqu'à ce que l'utilisateur ferme son navigateur ou passé un certain délai d'inactivité.
    Il faut démarrer la session avec la fonction session_start(); et ensuite on manipule la variable tableau $_SESSION comme une variable ordinaire.

    Pour les problèmes de ton code, si tu veux tester qu'une variable est définie fait if(isset($variable)), si tu veux vérifier qu'elle n'est pas définie, fait if(!isset($variable)).
    Ne fais des tests TRUE/FALSE que lorsque tu attends un vrai booléen TRUE/FALSE en retour.
    Par exemple pour vérifier que $chiffre ne vaut pas zéro fait simplement $chiffre != 0 ou $chiffre > 0
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    c'est bon, ça marche. A présent, je vais essayer d'aller un peu plus loin dans le code. Je vais ajouter une valeur comprise entre un et cinq à chaque aspect et permettre également que l'on puisse supprimer l'aspect ou modifier la valeur de l'aspect. Je vais, du coup, sans doute avoir besoin d'éclairages supplémentaires.

    Merci Sabotage

  6. #6
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    Si j'ajoute une variable c'est-à-dire associer l'aspect à une valeur, valeur comprise entre un et cinq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <label>Ajouter un aspect</label><br/><input type="text" name="aspect"/><input type="text" name="chiffre"/>
    On peut, par la suite, faire cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!empty($_POST['aspect']))
    			{
    				$_SESSION['aspect'][] = $_POST['aspect'];
    				$_SESSION['chiffre'][] = $_POST['chiffre'];
    			}
    Et pour parcourir les différentes variables du tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_SESSION['aspect'] as $value)AND ($_SESSION['chiffre] as $chiffre)
    	{
    		echo '<tr><td>' . $value . '</td><td>' . $chiffre . '</td><td></td></tr>'; // et on affiche chaque élément
    	}
    Si je veux supprimer une valeur, à priori, il faut que j'utilise : unset($_SESSION['aspect'] mais comment lui dire qu'il s'agit de tel élément du tableau ? La réponse à cette question devrait me permettre de répondre à la question suivante : comment modifier la valeur de l'aspect (en gros modifier la variable $chiffre) ?

  7. #7
    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
    Fais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['aspect'][$_POST['aspect']] = $_POST['chiffre'];
    Ca te donne un couple aspect/valeur

    Pour tu parcours naturellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_SESSION['aspect'] as $aspect=>$value)
    	{
    		echo '<tr><td>' . $aspect. '</td><td>' . $value. '</td><td></td></tr>'; // et on affiche chaque élément
    	}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    Merci, en effet, ça m'a bien aidé. Une dernière chose, lorsque je tente de cibler une variable pour la supprimer, il me supprime la totalité. Je pense que je ne dois pas donner les bons éléments :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_SESSION['aspect'] as $aspect=>$value)
    	{
    		echo '<tr><td>' . $aspect . '</td><td>' . $value . '</td><td><input type="checkbox" name="suppr" value="' . $aspect . '"/></td></tr>'; // et on affiche chaque élément
    	}
    Et pour la suppression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		if (!empty($_POST['suppr']))
    			{
    				unset($_SESSION['aspect']);
    			}

  9. #9
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!empty($_POST['suppr']))
    			{
    				unset($_SESSION['aspect'][$_POST['suppr']]);
    			}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    Un grand merci pour ta réactivité

    Il va falloir que j'étudie attentivement tous les éléments que tu m'as transmis. En attendant, j'ai une nouvelle question, similaire à la précédente. Au lieu de vouloir supprimer la valeur, je souhaite modifier la valeur de l'aspect. J'ai mis une case à cocher qui permettrait de modifier la valeur au départ avec un select contenant les différentes valeurs :

    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
    foreach($_SESSION['aspect'] as $aspect=>$value)
    	{
    		echo '<tr><td>' . $aspect . '</td><td>';
    		echo '<select name="valeuraspect">';
    		$compt = 1;
    		while ($compt < 5)
    			{
    				echo '<option name="valeuraspect" value="' . $compt . '"';
    				if ($compt == $value)
    					{
    						echo 'selected';
    					}
    				echo '>' . $compt . '</option>';
    				$compt++;
    			}
    		echo '</select>';
    		echo '</td><td><input type="checkbox" name="modif" value="' . $aspect . '"/></td><td><input type="checkbox" name="suppr" value="' . $value . '"/></td></tr>'; // et on affiche chaque élément
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!empty($_POST['modif']))
    			{
    				?????
    			}
    Si je souhaite faire un calcul à partir de chaque valeur, je peux le faire à partir de ce 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
    foreach($_SESSION['aspect'] as $aspect=>$value)
    	{
    		if ($value == '2')
    					{
    						$totalgen = $totalgen - 6;
    					}
    		elseif ($value == '3')
    					{
    						$totalgen = $totalgen - 11;
    					}
    		else
    					{
    						$totalgen = $totalgen - 1;
    					}
    	}

  11. #11
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!empty($_POST['modif']))
    			{
    				$_SESSION['aspect'][$_POST['modif']] = $_POST['valeuraspect'];
    			}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    Après avoir effectué des tests en local, j'ai lancé la page web sur mon serveur et je me retrouve, malheureusement, avec quelques messages lorsque je veux créer un "aspect" par le biais du formulaire. Du coup, la page n'arrive pas à créer les "aspects" et à les traiter...

    Warning: Invalid argument supplied for foreach() in /web/ricothehobbit/www/jdr/jrtm/pj/creation.php on line 116
    Cette partie correspond à ce 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
    if (!empty($_POST['aspect']))
    {
    	foreach($_SESSION['aspect'] as $aspect=>$value) //calcul des points de génération par aspect
    	{
    		if ($value == '2')
    		{
    			$totalgen = $totalgen - 6;
    		}
    		elseif ($value == '3')
    		{
    			$totalgen = $totalgen - 11;
    		}
    		elseif ($value == '4')
    		{
    			$totalgen = $totalgen - 21;
    		}
    		elseif ($value == '1')
    		{
    			$totalgen = $totalgen - 1;
    		}
    	}
    }
    Warning: Invalid argument supplied for foreach() in /web/ricothehobbit/www/jdr/jrtm/pj/creation.php on line 312
    Qui correspond à cette partie :
    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
    <?php
    if (!empty($_POST['aspect']))
    {
    ?>
    <p>
    <i>Si vous souhaitez modifier la valeur d'un aspect, modifiez la valeur et cliquez sur la case "modifier".</i>
    </p>
    <p>
    <table>
    <tr><th>Nom</th><th>Valeur</th><th>Modification</th><th>Suppression</th></tr>
    <?PHP
    		foreach($_SESSION['aspect'] as $aspect=>$value)
    			{
    				echo '<tr><td>' . $aspect . '</td><td>';
    				echo '<select name="chiffreaspect">';
    				$compt = 1;
    				while ($compt < 5)
    					{
    						echo '<option name="chiffreaspect" value="' . $compt . '"';
    						if ($compt == $value)
    							{
    								echo 'selected';
    							}
    						echo '>' . $compt . '</option>';
    						$compt++;
    					}
    				echo '</select>';
    				echo '</td><td><input type="checkbox" name="modif" value="' . $aspect . '"/></td><td><input type="checkbox" name="suppr" value="' . $aspect . '"/></td></tr>'; // et on affiche chaque élément
    			}
     
    		echo '</table></p>';
    	}
    echo '<p>';
    echo '<label>Ajouter un aspect</label><br/><input type="text" name="aspect"/>';
    echo '<select name="chiffreaspect">';
    $compt = 1;
    while ($compt < 5)
    	{
    		echo '<option name="chiffreaspect" value="' . $compt . '">' . $compt . '</option>';
    		$compt++;
    	}
    echo '</select>';
    ?>
    </p>
    Et pour avoir une vue d'ensemble, voici le contenu complet du 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
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    <?php
    session_start(); // on démarre une session PHP
    include ("../../../haut.php");// on inclut les éléments html pour  toutes les pages
    ?>
    <title>JRTM</title>
    </head>
    <body>
    <a name="retour"></a>
    <?php
    include ("banniere.php");
    include ("connexion.php");//connexion à la base de données
    include ("../navigation.php");
    ?>
    <section class="texte">
    <?php
    include ("../ariane.php");
    echo " Cr&eacute;ation de personnage</article>";
    ?>
    <h1>
    <img src="../images/Barre01.jpg" /><br/>
    Les Terres du Milieu - Cr&eacute;ation d'un personnage<br/>
    <img src="../images/Barre01.jpg" />
    </h1>
    <p>
    <i>Pour le calcul des points de g&eacute;n&eacute;ration, il faut, &agrave; chaque modification, valider le formulaire afin qu'il fasse les calculs.</i>
    </p>
    </p>
    <h2>
    Les points de g&eacute;n&eacute;ration
    </h2>
    <p>
    <?PHP
    $zero = 0;//variable qui n'est jamais modifiée et utile pour certaines conditions
    $totalgen = 230;//total des points de génération
    $totaldesir = 12;//total des points de désir
    $competence4 = 0;//variable pour vérifier qu'une seule compétence a une valeur de 4
    $desirzero = 0;//variable pour vérifier qu'un seul désir a une valeur de 0
    $desircinq = 0;//variable pour vérifier qu'un seul désir a une valeur de 5
    if (isset ($_POST['valider']))//si le formulaire est validé
    	{
    		$race = $_POST['race'];//récupération de l'id du formulaire de sélection de la race
    		$reqskill = mysql_query ("SELECT * FROM metal_competence ORDER BY nom_competence");//requête pour récupérer l'ensemble des compétences
    		$compteur = 0;
    		while ($compteur < mysql_numrows($reqskill))
    			{
    				$idcompetence = mysql_result ($reqskill, $compteur, "id_competence");
    				$competence = $_POST["skill$compteur"];//récupération de la valeur de la compétence dans le formulaire
    				$valeurcompetence[$compteur] = $competence;
    				if ($competence == '2')
    					{
    						$totalgen = $totalgen - 6;
    					}
    				elseif ($competence == '3')
    					{
    						$totalgen = $totalgen - 11;
    					}
    				elseif ($competence == '4')
    					{
    						if ($competence4 == '1')//s'il existe déjà une compétence à 4
    							{
    								$totalgen = $totalgen - 1;
    								$valeurcompetence[$compteur] = 1;
    							}
    						else//s'il n'existe pas de compétence à 4
    							{
    								$totalgen = $totalgen - 21;
    								$competence4 = 1;//la variable de contrôle prend la valeur 1 pour vérifier si d'autres compétences sont à 4
    							}
    					}
    				else
    					{
    						$totalgen = $totalgen - 1;//par défaut, la compétence a une valeur de 1
    					}
    				$compteur++;
    			}
    		$req = mysql_query ("SELECT * FROM metal_etat");
    		$compteur = 0;
    		while ($compteur < mysql_numrows($req))
    			{
    				$idetat = mysql_result ($req, $compteur, "id_etat");
    				$nometat = mysql_result ($req, $compteur, "nom_etat");
    				$etat = $_POST["$nometat"];
    				$valeuretat[$idetat] = $etat;
    				if ($etat == '2')
    					{
    						$totalgen = $totalgen - 6;
    					}
    				elseif ($etat == '3')
    					{
    						$totalgen = $totalgen - 11;
    					}
    				elseif ($etat == '4')
    					{
    						$totalgen = $totalgen - 21;
    					}
    				elseif ($etat == '1')
    					{
    						$totalgen = $totalgen - 1;
    					}
    				$compteur++;
    			}
    		if (!empty($_POST['aspect']))// si l'aspect existe et n'est pas vide
    			{
    				$_SESSION['aspect'][$_POST['aspect']] = $_POST['chiffreaspect']; //on la place dans un tableau PHP en session
    			}
    		if (!empty($_POST['modif']))//modifier la valeur d'un aspect
    			{
    				$_SESSION['aspect'][$_POST['modif']] = $_POST['valeuraspect'];
    			}
    		if (!empty($_POST['suppr']))//suppression d'un aspect et de sa valeur
    			{
    				unset($_SESSION['aspect'][$_POST['suppr']]);
    			}
    		if (!empty($_POST['aspect']))
    			{
    				foreach($_SESSION['aspect'] as $aspect=>$value) //calcul des points de génération par aspect
    					{
    						if ($value == '2')
    							{
    								$totalgen = $totalgen - 6;
    							}
    						elseif ($value == '3')
    							{
    								$totalgen = $totalgen - 11;
    							}
    						elseif ($value == '4')
    							{
    								$totalgen = $totalgen - 21;
    							}
    						elseif ($value == '1')
    							{
    								$totalgen = $totalgen - 1;
    							}
    					}
    			}
    		$req = mysql_query ("SELECT * FROM metal_aspectrace WHERE id_racetm='$race' ORDER BY nom_aspectrace");//requête sur les aspects raciaux en fonction de la race choisie
    		$compteur = 0;
    		while ($compteur < mysql_numrows($req))//boucle pour afficher les aspects raciaux
    				{
    					$idaspect = mysql_result ($req, $compteur, "id_aspectrace");
    					$value = $_POST["race$idaspect"];
    					$valuerace[$compteur] = $value;
    					if ($value == '2')
    						{
    							$totalgen = $totalgen - 6;
    						}
    					elseif ($value == '3')
    						{
    							$totalgen = $totalgen - 11;
    						}
    					elseif ($value == '4')
    						{
    							$totalgen = $totalgen - 21;
    						}
    					elseif ($value == '1')
    						{
    							$totalgen = $totalgen - 1;
    						}
    					$compteur++;
    				}
    		$req = mysql_query ("SELECT * FROM metal_desir ORDER BY nom_desir");//Requête pour les désirs
    		$compteur = 0;
    		while ($compteur < mysql_numrows($req))//boucle pour obtenir les valeurs des différents désirs
    			{
    				$iddesir = mysql_result ($req, $compteur, "id_desir");
    				$nomdesir = mysql_result ($req, $compteur, "nom_desir");
    				$desir = $_POST["$nomdesir"];//valeur d'un désir
    				$valeurdesir[$iddesir]=$desir;//récupération d'une variable pour valider le select dans le formulaire
    				if ($desir == '0')//si la valeur du désir est de 0
    					{
    						if ($desirzero == '1')
    							{
    								$valeurdesir[$iddesir] = 1;
    								$totaldesir = $totaldesir - 1;
    							}
    						else
    							{
    								$desirzero = 1;
    							}
    					}
    				elseif ($desir == '1')//si la valeur du désir est de 1
    					{
    						$totaldesir = $totaldesir -1;
    					}
    				elseif ($desir == '2')//si la valeur du désir est de 2
    					{
    						$totaldesir = $totaldesir -2;
    					}
    				elseif ($desir == '3')//si la valeur du désir est de 3
    					{
    						$totaldesir = $totaldesir -3;
    						if ($totaldesir < 0)
    							{
    								$valeurdesir[$iddesir] = 1;
    								$totaldesir = $totaldesir + 2;
    							}
    					}
    				elseif ($desir == '4')//si la valeur du désir est de 4
    					{
    						$totaldesir = $totaldesir -4;
    						if ($totaldesir < 0)
    							{
    								$valeurdesir[$iddesir] = 1;
    								$totaldesir = $totaldesir + 3;
    							}
    					}
    				elseif ($desir == '5')//si la valeur du désir est de 5
    					{
    						if ($desircinq == '1')//Si un second désir est à 5, on le bascule à 1
    							{
    								$valeurdesir[$iddesir] = 1;
    								$totaldesir = $totaldesir - 1;
    							}
    						else
    							{
    								$desircinq = 1;//ajout de la variable pour vérifier qu'il n'y a qu'un seul désir à 5
    								$totaldesir = $totaldesir -5;
    								if ($totaldesir < 0)
    									{
    										$valeurdesir[$iddesir] = 1;
    										$totaldesir = $totaldesir + 3;
    									}
    							}
    					}
    				$compteur++;
    			}
    	}
    echo '<p>Vous avez 230 points de g&eacute;n&eacute;ration. Il vous reste <b><u>' . $totalgen . '</u></b> points &agrave; d&eacute;penser.</p>';
    ?>
    </p>
    <form action="creation.php" method="post">
    <h2>
    Les Races
    </h2>
    <p>
    <i>Vous devez choisir une race parmi celles pr&eacute;sent&eacute;es ci-dessous. Chaque race vous propose des Aspects sp&eacute;cifiques que vous pourrez augmenter par la suite.</i>
    </p>
    <p>
    <?php
    $req = mysql_query ("SELECT * FROM metal_racetm ORDER BY nom_racetm");
    $compteur = 0;
    while ($compteur < mysql_numrows($req))
    	{
    		$idrace = mysql_result ($req, $compteur, "id_racetm");
    		$nomrace = mysql_result ($req, $compteur, "nom_racetm");
    		echo '<label>' . $nomrace .'</label><input type="radio" name="race" value="' . $idrace .'"';
    		if ($idrace == $race)
    			{
    				echo 'checked';
    			}
    		echo '/>';
    		$compteur++;
    	}
    ?>
    </p>
    <h2>
    Les Comp&eacute;tences
    </h2>
    <p>
    <a href="../metal/index.php?#competence" class="bdd">LES R&Egrave;GLES</a>
    </p>
    <p>
    <i>Chaque comp&eacute;tence a une valeur de 1. Vous pouvez ajouter pour chaque comp&eacute;tence un ou deux points (soit un co&ucirc;t de 5 ou 10 points). Pour une seule comp&eacute;tence, vous pouvez avoir une valeur de 4 soit un co&ucirc;t de 20 points.</i>
    </p>
    <p>
    <table>
    <tr><th>Nom</th><th>Valeur</th></tr>
    <?PHP
    $req = mysql_query ("SELECT * FROM metal_competence ORDER BY nom_competence");
    $compteur = 0;
    while ($compteur < mysql_numrows($req))
    	{
    		$idcompetence = mysql_result ($req, $compteur, "id_competence");
    		$nomcompetence = mysql_result ($req, $compteur, "nom_competence");
    		echo "<tr><td>$nomcompetence</td><td>";
    		echo "<select name=\"skill$idcompetence\">";
    		$compt = 1;
    		while ($compt < 5)
    			{
    				echo "<option name=\"skill$idcompetence\" value=\"$compt\"";
    				if ($compt == $valeurcompetence[$idcompetence])
    					{
    						echo "selected";
    					}
    				echo ">$compt</option>";
    				$compt++;
    			}
    		echo "</select>";
    		echo "</td></tr>";
    		$compteur++;
    	}
    ?>
    </table>
    </p>
    <h2>
    Les Aspects
    </h2>
    <p>
    <a href="../metal/index.php?#aspects" class="bdd">LES R&Egrave;GLES</a>
    </p>
    <?php
    if (!empty($_POST['aspect']))
    	{
    ?>
    <p>
    <i>Si vous souhaitez modifier la valeur d'un aspect, modifiez la valeur et cliquez sur la case "modifier".</i>
    </p>
    <p>
    <table>
    <tr><th>Nom</th><th>Valeur</th><th>Modification</th><th>Suppression</th></tr>
    <?PHP
    		foreach($_SESSION['aspect'] as $aspect=>$value)
    			{
    				echo '<tr><td>' . $aspect . '</td><td>';
    				echo '<select name="chiffreaspect">';
    				$compt = 1;
    				while ($compt < 5)
    					{
    						echo '<option name="chiffreaspect" value="' . $compt . '"';
    						if ($compt == $value)
    							{
    								echo 'selected';
    							}
    						echo '>' . $compt . '</option>';
    						$compt++;
    					}
    				echo '</select>';
    				echo '</td><td><input type="checkbox" name="modif" value="' . $aspect . '"/></td><td><input type="checkbox" name="suppr" value="' . $aspect . '"/></td></tr>'; // et on affiche chaque élément
    			}
     
    		echo '</table></p>';
    	}
    echo '<p>';
    echo '<label>Ajouter un aspect</label><br/><input type="text" name="aspect"/>';
    echo '<select name="chiffreaspect">';
    $compt = 1;
    while ($compt < 5)
    	{
    		echo '<option name="chiffreaspect" value="' . $compt . '">' . $compt . '</option>';
    		$compt++;
    	}
    echo '</select>';
    ?>
    </p>
    <?php
    	if (!empty ($_POST['race']))//si une race est choisie, les aspects raciaux vont être affichés ici
    		{
    			echo '<h2>Aspect Raciaux</h2>';//titre
    			echo '<p><a href="../metal/index.php?#aspectsrace" class="bdd">LES R&Egrave;GLES</a></p>';
    			echo '<p><table>';//affichage d'un tableau
    			echo '<tr><th>Nom</th><th>Valeur</th><th>Description</th></tr>';
    			$req = mysql_query ("SELECT * FROM metal_aspectrace WHERE id_racetm='$race' ORDER BY nom_aspectrace");//requête sur les aspects raciaux en fonction de la race choisie
    			$compteur = 0;
    			while ($compteur < mysql_numrows($req))//boucle pour afficher les aspects raciaux
    				{
    					$idaspect = mysql_result ($req, $compteur, "id_aspectrace");
    					$nomaspect = mysql_result ($req, $compteur, "nom_aspectrace");
    					$descaspect = mysql_result ($req, $compteur, "desc_aspectrace");
    					echo '<tr><td>' . $nomaspect . '</td><td>';//nom de chaque aspect racial
    					echo "<select name=\"race$idaspect\">";
    					$compt = 0;
    					while ($compt < 5)
    						{
    							echo "<option name=\"race$idaspect\" value=\"$compt\"";
    							if ($compt == $valuerace[$compteur])
    								{
    									echo 'selected';
    								}
    							echo '>' . $compt . '</option>';
    							$compt++;
    						}
    					echo '</select>';
    					echo '</td><td><i>' . $descaspect . '</i></td></tr>';
    					$compteur++;
    				}
    			echo '</table></p>';
    		}
    ?>
    <h2>
    Les Compteurs d'&eacute;tat
    </h2>
    <p>
    <a href="../metal/index.php?#effort" class="bdd">LES R&Egrave;GLES</a>
    </p>
    <p>
    <i>Vous pouvez augmenter chacun des trois &eacute;tats.</i>
    </p>
    <p>
    <table>
    <tr><th>Nom</th><th>Augmentation</th><th>Les Seuils de difficult&eacute;</th></tr>
    <?php
    $req = mysql_query ("SELECT * FROM metal_etat");
    $compteur = 0;
    while ($compteur < mysql_numrows($req))
    	{
    		$idetat = mysql_result ($req, $compteur, "id_etat");
    		$nometat = mysql_result ($req, $compteur, "nom_etat");
    		echo '<tr><td>' . $nometat . '</td><td><select name="' . $nometat . '">';
    		$baseetat = 3;//valeur de base de l'état
    		$compt = 0;
    		while ($compt < 5)
    			{
    				echo '<option name="' . $nometat . '" value="' . $compt . '"';
    				if ($compt == $valeuretat[$idetat])
    					{
    						echo 'selected';
    						$baseetat = $compt + $baseetat;//calcul des cases de l'état
    					}
    				echo'>' . $compt . '</option>';
    				$compt++;
    			}
    		echo '</select></td>';
    		echo '<td><i>' . $baseetat . ' cases &agrave; 6 - ' . $baseetat . ' cases &agrave; 9 - ' . $baseetat . ' cases &agrave; 12 - 3 cases &agrave; 15</i></td></tr>';//affichage des différents seuils de difficulté
    		$compteur++;
    	}
    ?>
    </table>
    </p>
    <h2>
    Les D&eacute;sirs
    </h2>
    <p>
    <i>Vous devez d&eacute;penser 12 points entre les cinq d&eacute;sirs. Un seul d&eacute;sir peut avoir une valeur de 0 et un seul de 5. Il vous reste <?php echo '<b>' . $totaldesir . '</b>';?> points &agrave; utiliser.</i>
    </p>
    <p>
    <table>
    <tr><th>Nom D&eacute;sir</th><th>Valeur</th><th>Description</th></tr>
    <?PHP
    $req = mysql_query ("SELECT * FROM metal_desir ORDER BY nom_desir");
    $compteur = 0;
    while ($compteur < mysql_numrows($req))
    	{
    		$iddesir = mysql_result ($req, $compteur, "id_desir");
    		$nomdesir = mysql_result ($req, $compteur, "nom_desir");
    		echo '<tr><td>' . $nomdesir . '</td>';
    		echo '<td><select name="' . $nomdesir . '">';
    		$compt = 0;
    		while ($compt < 6)
    			{
    				echo '<option name="' . $nomdesir . '" value="' . $compt . '"';
    				if ($compt == $valeurdesir[$iddesir])
    					{
    						echo 'selected';
    						$desc = $compt;
    					}
    				elseif ($compt == '1')
    					{
    						echo 'selected';
    						$desc = $compt;
    					}
    				echo '>' . $compt . '</option>';
    				$compt++;
    			}
    		echo '</select></td>';
    		$reqdesir = mysql_query ("SELECT * FROM metal_desir_valeur WHERE valeur_desir='$desc'");
    		$desc = mysql_result ($reqdesir, $zero, "desc_desir");
    		echo '<td><i>' . $desc . '</i></td></tr>';
    		$compteur++;
    	}
    ?>
    </table>
    </p>
    <p>
    <input type="submit" name="valider"/>
    </form>
    </p>
    </section>
    <?php
    include ("../../../footer.php");
    ?>
    </body>
    </html>

  13. #13
    Membre à l'essai
    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
    Points : 20
    Points
    20
    Par défaut
    Après avoir tenté de multiples expériences, je suis reparti sur autre chose mais j'ai quelques soucis en particulier pour supprimer spécifiquement certaines variables. J'ai un tableau avec plusieurs variables (aspects et valeurs associées à l'aspect). Je souhaite pouvoir supprimer certaines valeurs et conserver les autres. Je suis en cours de tests, je tâtonne mais si vous avez des idées, je suis preneur...

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <?php
    if (isset ($_POST['valider']))//si le formulaire est validé
    	{
    		if (!empty ($_POST['comptaspect']))
    			{
    				$comptaspect = $_POST['comptaspect'];
    				//echo '<p>La recuperation de la variable comptaspect est de ' . $comptaspect . '</p>';
    			}
    		if (!empty($_POST['suppraspect']))
    			{
    				$comptaspect--;
    			}
    		if ($comptaspect > 0)
    			{
    				$compteur = 0;
    				while ($compteur < $comptaspect)
    					{
    						if ($compteur != $_POST['suppraspect'])
    							{
    								$aspect = $_POST["aspect$compteur"];
    								$asp[$compteur] = $aspect;
    								$chiffre = $_POST["chiffre$compteur"];
    								$aspchiff[$compteur] = $chiffre;
    								//echo '<p>L aspect est ' . $aspect . ' avec un chiffre de ' . $chiffre . ' pour un total de ' . $comptaspect . '</p>';
    								$compteur++;
    							}
    						else
    							{
    								$compteur++;
    							}
    					}
    			}
    		if ((!empty ($_POST['aspect']) AND ($comptaspect == NULL)))
    			{
    				$compteur = 0;
    				$aspect = $_POST['aspect'];
    				$asp[$compteur] = $aspect;
    				$chiffre = $_POST['chiffreaspect'];
    				$aspchiff[$compteur] = $chiffre;
    				$comptaspect = 1;
    				//echo '<p>Le chiffre pour l aspect ' . $aspect . ' est de ' . $chiffre . '</p>';
    			}
    		elseif (!empty ($_POST['aspect']))
    			{
    				$aspect = $_POST['aspect'];
    				$asp[$comptaspect] = $aspect;
    				$chiffre= $_POST['chiffreaspect'];
    				$aspchiff[$comptaspect] = $chiffre;
    				//echo '<p>Le chiffre pour l aspect ' . $aspect . ' est de ' . $chiffre . '</p>';
    				$comptaspect++;
    			}
    	}
    echo '<p>Vous avez 230 points de g&eacute;n&eacute;ration. Il vous reste <b><u>' . $totalgen . '</u></b> points &agrave; d&eacute;penser.</p>';
    ?>
    </p>
    <form action="aspect.php" method="post">
    <h2>
    Les Aspects
    </h2>
    <?php
    if ($comptaspect > 0)
    	{
    		$compteur = 0;
    		while ($compteur < $comptaspect)
    			{
    				$aspect = $asp[$compteur];
    				$chiffre = $aspchiff[$compteur];
    				echo '<input type="hidden" name="comptaspect" value="' . $comptaspect . '" />';//renvoyer le nombre d'aspects à chaque validation
    				echo "<p><input type=\"text\" name=\"aspect$compteur\" value=\"$asp[$compteur]\" />";
    				echo "<select name=\"chiffre$compteur\">";
    				$compt = 1;
    				while ($compt < 5)
    					{
    						echo "<option name=\"chiffre$compteur\" value=\"$compt\"";
    						if ($compt == $chiffre)
    							{
    								echo 'selected';
    							}
    						echo ">$compt</option>";
    						$compt++;
    					}
    				echo '</select>';
    				echo "<input type=\"checkbox\" name=\"suppraspect\"  value=\"$compteur\"/></p>";
    				$compteur++;
    			}
    	}
    ?>
    <?php
    echo '<p>';
    echo '<label>Ajouter un aspect</label><br/><input type="text" name="aspect"/>';
    echo '<select name="chiffreaspect">';
    $compt = 1;
    while ($compt < 5)
    	{
    		echo '<option name="chiffreaspect" value="' . $compt . '">' . $compt . '</option>';
    		$compt++;
    	}
    echo '</select>';
    ?>
    </p>

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/12/2012, 08h18
  2. [C#] Récupération d'une variable d'environnement
    Par jamy79 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/08/2005, 14h03
  3. Réponses: 16
    Dernier message: 07/04/2005, 11h36
  4. Récupération d'une variable
    Par cach dans le forum Windows
    Réponses: 7
    Dernier message: 22/02/2005, 11h19
  5. Debutant recherche utilisation variable système
    Par agent-zaizai dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/05/2003, 21h53

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