Kommunauty
Connexion
Inscription

Traitement formulaire en boucle


Courroux Messages : 2216

Salut,

voilà, j'ai un léger problème auquel je suis confronté depuis quelques temps, c'est le traitement de formulaires en boucle. J'ai essayé plusieurs choses, du plus inutile au plus complexe et rien ne fonctionne.

Donc en fait dans ma base de données, je stocke les types d'unités qu'un joueur a construit ainsi que le nombre qu'il a construit. Lorsque le joueur veut lancer une attaque, on lui affiche les types d'unités qu'il a construit. Disons qu'il a 20 archers et 10 infanteries, on lui affiche "Archers" et "Infanteries" dans des champs input de formulaires afin qu'il puisse choisir le nombre d'unités qu'il veut envoyer en attaque. Donc ces unités, sont affichées en boucle à partir de la base de donnée (j'avais utilisé mysql_fetch_row mais je ne sais pas si ça a une utilité particulière).

Sur une deuxième page, je traite ce formulaire mais lorsque le joueur rempli le formulaire de la première page, la requête qui est censée être envoyée si le joueur rempli le formulaire ne s’envoie pas. Voici mon formulaire qui est sûrement faux:


<form method="post" action="index.php?page=lancer_attaque&defenseur=<?php echo $villagedefenseur; ?>&attaquant=<?php echo $villageattaquant; ?>" name = "unites">
        <fieldset>
          <legend>Etape 2 - Lancer une attaque</legend>           
 
 <label>Choississez vos unités:</label>
                       
<?php

$req_unites = mysql_query("SELECT * FROM unitesconstruites WHERE id_village = '" . $villageattaquant . "'");
while ($unites = mysql_fetch_row($req_unites)) {
echo $unites[4]; ?>:   <input type="text" name="<?php echo $unites[0]; ?>" /> (Max: <?php echo $unites[5]; ?>)<br />
<?php
}
?>
        

         
          <input type="submit" value="Lancer l'attaque"/>
        </fieldset>
 
      </form>

Voilà, je demande donc votre aide afin de résoudre ce problème tout con.

Merci.

samedi 10 novembre 2012

SiMax Messages : 7572

Salut !

Comme tu as à la fois du POST et du GET, tu t'es peut être mélangé les pinceaux à un moment ? Pour éviter ça, passe tout en POST. Pour transmettre les valeurs attaquant et défenseur, utilise des champs input hidden dans le formulaire.

dimanche 11 novembre 2012

Courroux Messages : 2216

Oui en effet, c'est un peu l'anarchie là sur mon projet. J'essaie en ce moment de reprendre le code pour qu'il soit plus compréhensible et j'ajoute ça à la liste des tâches car en effet GET c'est pas très jolie et puis ça sert pas à grand chose sur ce cas là.

Sinon, c'est pas un problème d'organisation là. C'est juste que je ne sais pas comment on fait pour traiter les champs d'un formulaire qui apparaissent en boucle. Comment les nommer et comment les traiter ?

dimanche 11 novembre 2012

SiMax Messages : 7572

Niveau nom, ça dépend juste du champ "name" des input. Là visiblement t'as mis $unites[0] mais je ne sais pas à quoi ça correspond ni ce que ça retourne comme valeur.

dimanche 11 novembre 2012

Courroux Messages : 2216

En fait $unites[0] c'est un tableau que j'ai récupéré de la base de donnée avec mysql_fetch_row qui semble inutile et qui correspond à l'ID de l'unité. Ensuite dans le traitement je fais:


    if (isset($_POST['unites']))
{
//Je traite le formulaire
}

Mais j'ai testé ça pour tester quoi, je sais pas du tout si c'est vrai, faux, complètement inapproprié ou totalement con de ma part...

dimanche 11 novembre 2012

SiMax Messages : 7572

Ah non, ta condition ici regarde si tu as envoyé un champ qui a pour name "unites". Or toi, ton name, c'est l'ID de l'unité. Ton test doit donc porter sur cet ID. Et tu fais un test pour chaque ID dans ton traitement (avec une boucle encore, pour optimiser).

dimanche 11 novembre 2012

Répondre Pour répondre, tu dois d'abord t'inscrire rapidement sur Kommunauty. Rejoins-nous vite !