Tableau liste déroulante

Eléphanteau du PHP | 11 Messages

07 févr. 2012, 11:56

Bonjour à tous, je vous explique mon problème:

J'ai créer un tableau statique, puis j'y ai ajouté 2 colonnes qui permettent la saisie de données (avec des listes déroulantes).
Maintenant j'ai donc un formulaire tableau :mrgreen:

Code : Tout sélectionner

<form action="a_facturer.php"> <table class="Tabledonnees"> <thead> <tr> <th>Numéro contrat</th> <th>Nom locataire</th> <th>Date mandat</th> <th>A la charge</th> <th>Statut matériel</th> <th>Statut mandat</th> <th>Type mandat</th> <th>Facture 1</th> <th>Montant 1</th> <th>Facture 2</th> <th>Montant 2</th> <th></th> </tr> </thead> <?php $altenative = $numligne = 0 ; $vide = "vrai"; $c_ligne = $c_ligne2="" ; ?> <? while ($ligne = mysql_fetch_array($exec)) : ?> <tr valign=top> <!--<td><?php echo ($numCon = getNumCon($ligne["NUM_DOS"])) ?></td>--> <td> <a href="<?php echo 'detail_dossier.php?NUM_DOS='.$ligne["NUM_DOS"].'&onglet=6&NUM_CON='.$numCon ?>"> <?php echo $numCon ?> </a> </td> <td><?php echo $ligne["DEN_LOC"] ?></td> <td><?php echo datemysql2francais($ligne["DATE_DOS"]) ?></td> <td><?php echo $ligne["DEN_CLI"] ?></td> <td><?php echo htmlentities($ligne["LIB_STA"]) ?></td> <td><?php echo htmlentities($ligne["LIBE_STA_DOS"]) ?></td> <td><?php echo $ligne["LIB_TYP_MANDAT"] ?></td> <td><?php echo select_facture($ligne["NUM_FACT"]) //fonction qui fait une liste déroulante avec les factures?></td> <td><?php echo $ligne["MT_FACT"] ?></td> <td><?php echo select_facture($ligne["NUM_FACT2"]) ?></td> <td><?php echo $ligne["MT_FACT2"] ?></td> <td> <a href="rapport_activite.php?NUM_DOS=<?php echo $ligne["NUM_DOS"] ?>" target="_blank"> <img src="img\b_print.png" border="0" width="16" height="16" alt="Rapport d'activité"> </a> </td> </tr> <?php endwhile; ?> </table> <p style="text-align: center;"><input name="modi" type="submit" class="button" value="Enregistrer les modifications"></p> </form>


Je renvoie les données sur la même page et les traite de cette façon:

Code : Tout sélectionner

<? if(isset($_REQUEST["modi"])) { //echo "test"; var_dump($_REQUEST["NUM_FACT"],$_REQUEST["NUM_FACT2"]); $sqlUP="update locataire set NUM_FACT='".$_REQUEST["NUM_FACT"]."' , NUM_FACT2='".$_REQUEST["NUM_FACT2"]."' where NUM_DOS='".$_REQUEST["NUM_DOS"]."' "; $execUP=mysql_query($sqlUP) or die(mysql_error()); } ?>
Déjà j'ai pluieurs problèmes: $_REQUEST["NUM_FACT"] prends en fait la valeur de la dernière liste déroulante qui devrait logiquement être $_REQUEST["NUM_FACT2"] qui du coup n'est pas défini.

Ensuite je voudrais mettre à jour le champ pour un numéro de dossier (ce que j'ai mis dans la requête), mais le $_REQUEST["NUM_DOS"] n'est pas défini non plus :(

Merci de m'aider :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 févr. 2012, 15:11

Première chose, ton formulaire englobe ton tableau et donc toutes tes lignes. Lorsque tu le soumets, tu soumets en fait l'intégralité des informations présentes à l'écran.

Côté listes, il faudrait voir le code de ta fonction select_facture(). En effet, si dans ton formulaires deux champs ont le même nom (parce que sur deux lignes différentes), php va écraser les valeurs reçues (la valeur du champ de la ligne 2 écrase la valeur du champ envoyée à la ligne 1, etc.) à moins que le nom de ton champs ne comporte des crochets (name="mon_champ[]") auquel cas php fera un tableau des valeurs reçues.

Enfin, pour ton numéro de dossier, autant il apparait bien dans les liens qui permettent d'ouvrir les rapports d'activité ou le détail du dossier, mais à aucun moment il n'apparait comme champ (visible ou non) de ton formulaire. Du coup quand tu soumets le formulaire, il n'est jamais envoyé. Attention là également, si tu as un numéro de dossier par ligne, il ne faut pas que les champs aient le même nom, ou alors avec des crochets pour récupérer un tableau de valeur ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

07 févr. 2012, 15:29

Tout d'abord merci pour ton intervention :-D

Olala oui effectivement j'avais fait nombre d'erreurs évitables :oops:

Tu as pointé du doigt de nombreuses choses que j'avais foiré !

Premièrement j'avais oublié de modifier le nom de la fonction select_facture2 , j'ai du faire un copié collé et oublier de modifier certaines choses.

J'ai aussi rajouté un type hidden pour le numéro de dossier.

Par ailleurs il y à effectivement un numéro de dossier pour chaque ligne :mrgreen:

Voici ce que j'ai modifié selon tes remarques et ce que j'ai tenté de faire avec un indice $i :

Code : Tout sélectionner

<form action="a_facturer.php" method="post"> <table class="Tabledonnees"> <thead> <tr> <th>Numéro contrat</th> <th>Nom locataire</th> <th>Date mandat</th> <th>A la charge</th> <th>Statut matériel</th> <th>Statut mandat</th> <th>Type mandat</th> <th>Facture 1</th> <th>Montant 1</th> <th>Facture 2</th> <th>Montant 2</th> <th></th> </tr> </thead> <?php $altenative = $numligne = 0 ; $vide = "vrai"; $c_ligne = $c_ligne2="" ; $i=0; while ($ligne = mysql_fetch_array($exec)) : $i=$i+1; ?> <tr valign=top> <!--<td><?php echo ($numCon = getNumCon($ligne["NUM_DOS"])) ?></td>--> <td> <a href="<?php echo 'detail_dossier.php?NUM_DOS='.$ligne["NUM_DOS"].'&onglet=6&NUM_CON='.$numCon ?>"> <?php echo $numCon ?> </a> </td> <td><?php echo $ligne["DEN_LOC"] ?></td> <td><?php echo datemysql2francais($ligne["DATE_DOS"]) ?></td> <td><?php echo $ligne["DEN_CLI"] ?></td> <td><?php echo htmlentities($ligne["LIB_STA"]) ?></td> <td><?php echo htmlentities($ligne["LIBE_STA_DOS"]) ?></td> <td><?php echo $ligne["LIB_TYP_MANDAT"] ?></td> <td><?php echo select_facture($ligne["NUM_FACT"]) //fonction qui fait une liste déroulante avec les factures?></td> <td><?php echo $ligne["MT_FACT"] ?></td> <td><?php echo select_facture2($ligne["NUM_FACT2"]) ?></td> <td><?php echo $ligne["MT_FACT2"] ?></td> <td> <a href="rapport_activite.php?NUM_DOS=<?php echo $ligne["NUM_DOS"] ?>" target="_blank"> <img src="img\b_print.png" border="0" width="16" height="16" alt="Rapport d'activité"> </a> </td> </tr> <?php endwhile; ?> </table> <input type="hidden" name="NUM_DOS" value=<?$ligne["NUM_DOS"]?> > <p style="text-align: center;"><input name="modi" type="submit" class="button" value="Enregistrer les modifications"></p> </form> <? if(isset($_REQUEST["modi"])) {for ($i=1;$i<=$NB; $i++) { //echo "test"; //echo " facture 1 : '".$_REQUEST["NUM_FACT"]."' <br>"; //echo " facture 2 : '".$_REQUEST["NUM_FACT2"]."' <br>"; $sqlUP="update locataire set NUM_FACT='".$_REQUEST["NUM_FACT[$i]"]."' , NUM_FACT2='".$_REQUEST["NUM_FACT2[$i]"]."' where NUM_DOS='".$_REQUEST["NUM_DOS[$i]"]."' "; $execUP=mysql_query($sqlUP) or die(mysql_error()); } } ?>


ça ne fonctionne pas, mes champs sont indéfinis selon lui #-o

Encore merci :D

Eléphanteau du PHP | 11 Messages

09 févr. 2012, 10:53

J'up ce topic parce que j'ai toujours besoin d'aide, cependant j'ai progressé!

Il y à un numéro de dossier par ligne, j'ai réussi à faire passer tous les numéros de dossier :D
<input type="hidden" name="NUM_DOS[]" value="<?php echo $ligne["NUM_DOS"] ; ?>" > 
maintenant je récupère les factures aussi!
 $monTab=array() ;
$monTab["NUM_FACT"]=$ligne["NUM_FACT"];

$monTab2=array();
$monTab2["NUM_FACT2"]=$ligne["NUM_FACT2"];
Oui MAIS (il y à toujours un mais :x ) je n'arrive à récupérer que les valeurs des factures qui sont dans la bdd: si je modifie une facture je récupère l'ancienne :roll: et ça m'arrange pas... que faire?

Merci!

ViPHP
xTG
ViPHP | 7331 Messages

09 févr. 2012, 11:25

Problème de rafraichissement non ?
Fais le traitement avant l'affichage. ;)

Eléphanteau du PHP | 11 Messages

09 févr. 2012, 13:02

En fait non je n'ai pas réussi à récupérer les factures (les dossiers oui mais pas les factures) j'ai juste réussi à ne pas tout écraser pour la dernière ligne :oops:

Sinon pour faire passer mes tableaux de num_facture comment faire? Avec un serialize ? Ou existe-il une manière plu simple?

Merci