[RESOLU] recuperation information liste deroulante dans un tableau

Eléphanteau du PHP | 33 Messages

06 mars 2017, 10:52

Bonjour,

En essayant d'être clair,
j'affiche un tableau dans une page php chaque ligne comporte une case à cochée pour selection de la ligne pour traitement ultérieur ainsi qu'une listbox pour divers choix.
Je rencontre le probleme suivant : je recupere bien la ligne cochée mais la valeur de la listbox n'est pas toujours bonne, un coup cela fonctionne puis deux autres fois cela ne marche pas je ne recupere que le 1er choix.
voici mon code :
Le probleme rencontré avec la liste deroulante choix[]

Code : Tout sélectionner

<table cellspacing="1px" cellpadding="5px" border="1px" align="center"> <form action="#" method="post"> <?php $messagesParPage=6; //Nous allons afficher 6 utilisateurs par page. $total = totalusers($connexion); $nombreDePages=ceil($total/$messagesParPage);//Nous allons maintenant compter le nombre de pages. if(isset($_GET['page'])) { // Si la variable $_GET['page'] existe... $pageActuelle=intval($_GET['page']); if($pageActuelle>$nombreDePages) { // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages... $pageActuelle=$nombreDePages; } }else { // Sinon $pageActuelle=1; // La page actuelle est la n°1 } $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire $people = avanthabilitation($connexion,$premiereEntree,$messagesParPage); for($i=0;$i<sizeof($people);$i++) // tant que $i est inferieur au nombre d'éléments du tableau... { echo "<tr> <td> <input type=checkbox name=sel[] value=".$people[$i]['id']."> <input type=hidden name=id[] value=".$people[$i]['id']."> </td> <td>".$people[$i]['civ']."</td> <td>".$people[$i]['username']."</td> <td>".$people[$i]['firstname']."</td> <td>".$people[$i]['login']."</td> <td>".$people[$i]['email']."</td> <td> <select name=choix[]> <option value='1'>demandeur</option> <option value='2'>gestionnaire</option> <option value='3'>administrateur</option> </select> </td> <td><a href='suppression.php?id=".$people[$i]['id']."'><input type=button value=Supprimer /></a></td> </tr>"; } for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle { //On va faire notre condition if($i==$pageActuelle) {//Si il s'agit de la page actuelle... echo '<b> [ '.$i.' ]</b> - '; }else {//Sinon... echo ' <a href="gestion_habilitation.php?page='.$i.'"> '.$i." - ".'</a> '; } } ?> <p><center><input type=submit value=Valider name="btsubmit"></center></p> </form> </table>
Je récupère de cette façon :

Code : Tout sélectionner

if(isset($_POST['btsubmit'])){ // si formulaire soumis if (isset($_POST['sel'])){ $choix =''; for ($i=0;$i<count($_POST['sel']);$i++){ $valsel = ($_POST['sel'][$i]); $valrang = ($_POST['choix'][$i]); $choix .= $valsel."-".$valrang.","; } echo $choix; } }
si quelqu un a une idée, je suis preneur merci beaucoup.

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

06 mars 2017, 11:10

salut,

Tu as quoi dans $_POST['choix'] exactement ?
Tu pré-sélectionne pas la valeur courante dans la liste ?

coté html ton form doit être en dehors de la table.
la dernière boucle for n'est pas non plus dans une ligne ni une case de l&a table ressort la après la table (et après le /form du coup).

en dehors de cela il n'y a pas de raison qu'il n'y ai pas de valeur das $_POST['choix'] (a priori)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

06 mars 2017, 11:24

le problème c'est surtout que je n ai pas le bon retour à chaque fois, sinon j'ai généralement 1 en retour dans $_POST['choix'] mais des fois c'est bon, si j'ai plusieurs lignes de cochées j'ai bien le retour des id cochés mais pas forcement la correspondance avec la sélection choisi en liste déroulante.
Je n'ai en effet pas fait de pré-sélection dans la liste, serait-ce mieux???
j'ai sorti mon form de la table, merci - par contre je n'ai pas compris pour la derniere boucle for????
merci d'avoir regardé,

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

06 mars 2017, 11:40

cette partie la
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) {//Si il s'agit de la page actuelle...
echo '<b> [ '.$i.' ]</b> - ';
}else {//Sinon...
echo ' <a href="gestion_habilitation.php?page='.$i.'"> '.$i." - ".'</a> ';
}
}
?>
<p><center><input type=submit value=Valider name="btsubmit"></center></p>
n'est pas dans une cas de tableau (td) donc rien a faire lla cela doit être en dehors du tableau (un div ou même l'élément html nav me semble approprié ;) )

as tu exemples de données que retourne le formulaire ?
- si possible screenshot du formulaire
- résultat du var_dump($_POST) après validation du formulaire ;)

parce que cela semble correct mais sans les données c'est pas simple ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

06 mars 2017, 11:53

Je voulais mettre un screenshot mais je n'arrive pas à trouver ou l'associer???? car img me demande un lien et c est sur mon disque dur????

Eléphanteau du PHP | 33 Messages

06 mars 2017, 11:55

le var_dump me retourne ceci :
array (size=4)
'btsubmit' => string 'Valider' (length=7)
'id' =>
array (size=6)
0 => string '54' (length=2)
1 => string '55' (length=2)
2 => string '56' (length=2)
3 => string '57' (length=2)
4 => string '58' (length=2)
5 => string '59' (length=2)
'choix' =>
array (size=6)
0 => string '1' (length=1)
1 => string '3' (length=1)
2 => string '2' (length=1)
3 => string '1' (length=1)
4 => string '3' (length=1)
5 => string '1' (length=1)
'sel' =>
array (size=3)
0 => string '55' (length=2)
1 => string '56' (length=2)
2 => string '58' (length=2)

55-1,56-3,58-2,

Eléphanteau du PHP | 33 Messages

06 mars 2017, 11:59

le var_dump ci dessus est bon et me retourne bien les bons choix apres deux autres essais voici un lorsque cela ne fonctionne pas :
array (size=4)
'btsubmit' => string 'Valider' (length=7)
'id' =>
array (size=6)
0 => string '44' (length=2)
1 => string '45' (length=2)
2 => string '46' (length=2)
3 => string '51' (length=2)
4 => string '52' (length=2)
5 => string '53' (length=2)
'choix' =>
array (size=6)
0 => string '1' (length=1)
1 => string '2' (length=1)
2 => string '1' (length=1)
3 => string '1' (length=1)
4 => string '1' (length=1)
5 => string '1' (length=1)
'sel' =>
array (size=1)
0 => string '45' (length=2)

45-1,

alors que cela devrait me retourner 45-2
Une idée?

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

06 mars 2017, 12:33

je comprend mieux ton problème vient du fait que les checkbox non cochée ne sont pas envoyée au serveur.

du coup le plus simple serait de mettre l'id de la ligne en index du tableau comme ça tu vires le champs caché et tu l'utilise pour trouver ce dont tu as besoin dans les tableaux de champs de formulaire.
<select name="choix[$people[$i]['id']]">

pour la validation tu peux réduire le nombre de ligne de code et surtout la complexité (4 lignes ;) )
<?php
if(isset($_POST['btsubmit']) && !empty($_POST['sel'])){ // si formulaire soumis et il y a des checkbox de cochées
  foreach($_POST['sel'] as $id){
    echo $id.'-'.$_POST['choix'][$id].',';
  }
}
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

06 mars 2017, 14:02

Un très grand merci à moogli, tout fonctionne comme je le souhaitais.
Encore merci et bonne journée.