Récupérer la valeur de chaque <tr> contenant des input

Résolu/Fermé
Utilisateur anonyme - 12 avril 2016 à 12:22
 Utilisateur anonyme - 19 avril 2016 à 22:30
Bonjour,

J'ai un tableau et j'aimerai que pour chaque ligne qui existe, je puisse les envoyer dans ma BDD si elles ne sont pas vides.
<tr id="ligne[]">
  <td class="date"><input class="horaire form-control" id="horaire[]" autocomplete="off"/></td>
<td><input class="form-control" id="input2[]" autocomplete="off"/></td>
<td><input class="form-control" id="input3[]" autocomplete="off"/></td></tr>


Je pense à qqch dans le genre
foreach ($ligne[] as $key => $value) {
    echo $key;
}


Mais je ne vois pas comment adapter cela à mon code...

Avez-vous des idées ?

Par avance, merci ! :-)

2 réponses

jordane45 Messages postés 38358 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 décembre 2024 4 719
12 avril 2016 à 14:50
Bonjour,

Pour commencer ... tu as créé un formulaire ? En POST ou en GET ?
Ensuite, fais donc un :
 print_r($_POST); // ou GET si tu es en get... 
et regarde ce que ça te donne...
A partir de là .. tu devrais être en mesure de réaliser ton traitement.

0
Merci de ton retour,

Oui c'est un formulaire qui envoie tout en POST
Le
print_r($_POST);

me renvoie donc toutes données.

Maintenant, je ne vois pas comment adapter mon foreach..
0
jordane45 Messages postés 38358 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 décembre 2024 4 719 > Utilisateur anonyme
12 avril 2016 à 17:33
Si tu n'es pas un peu plus précis sur tes besoins... il me sera difficile de pouvoir te répondre !!!
Tout dépend de la structure de ta table...
Et de ce que tu souhaites faire exactement !

As tu commencé à écrire ta requête d'insertion en BDD ? ' INSERT INTO...... ' ??
0
Utilisateur anonyme
12 avril 2016 à 18:18
Pour la BDD je gère :-)

Je souhaite dans un premier temps pouvoir récupérer ces variables.

<tr name="ligne" id="ligne[]">
    <td class="date">
       <input name="horaire[]" class="horaire form-control" id="horaire[]" autocomplete="off"/>
    </td>
     <td>
       <input name="input1[]" class="input1 form-control" id="input1[]" autocomplete="off"/>
     </td>
     <td>
      <input name="input2[]" class="input2 form-control" id="input2[]" autocomplete="off"/>
       </td>
       <td>
        <input name="input3[]" class="input3 form-control" id="input3[]" autocomplete="off"/>
        </td>
        <td>
          <input name="input4[]" class="input4 form-control" id="input4[]" autocomplete="off"/>
        </td>
</tr>                        


J'ai donc ce tableau.
Chaque ligne contient 5 input.
J'arrive donc à lire ces données via le print_r
Mais je n'arrive pas à mettre en place une boucle pour qu'il affiche pour chaque ligne qui existe, les valeurs.

Du genre
foreach($ligne as $element)
{
    echo $horaire . '<br />';
    echo $input1 . '<br />';
    echo $input2. '<br />';
    echo $input3 . '<br />';
}
?>


Tu comprends ?
0
jordane45 Messages postés 38358 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 décembre 2024 4 719
12 avril 2016 à 20:26
Un truc du genre ? :

En partant du principe que tous les champs sont obligatoires.... et donc qu'il y a bien le même nombre de champs"horaires" de remplis que des autres input..

$horaire= !empty($_POST['horaire']) ? $_POST['horaire'] : NULL;
$input1= !empty($_POST['input1']) ? $_POST['input1'] : NULL;
$input2= !empty($_POST['input2']) ? $_POST['input2'] : NULL;
$input3= !empty($_POST['input3']) ? $_POST['input3'] : NULL;

$nbLignes = count($horaire);

for($l=0;$l<=$nbLignes;$l++){
 echo $horaire[$l];
 echo $input1[$l];
 echo $input2[$l];
 echo $input3[$l];

}



NB : Mettre des ID sous forme d'ARRAY est inutile et une abération.

NB² = Mettre un ID à tes TR ne te permettra pas de récupérer ce champ lors d'un SUBMIT. Seuls les champs de type ( INPUT / SELECT / TEXTAREA ) sont pris en compte lors d'un submit.


Tu devrais également pouvoir utiliser des array à deux dimensions pour tes objets.
En supposant que tes TR sont générés via une boucle PHP tu pourrais faire un truc du genre

<?php  
// début de ta boucle
// par exemple 
for($i=0;$i<=20;$i++){
?>
<tr name="ligne" id="<?php echo $i;?>">
  <td class="date">
     <input name="ligne[<?php echo $i;?>]['horaire']" class="horaire form-control" id="horaire[]" autocomplete="off"/>
  </td>
  <td>
    <input name="ligne[<?php echo $i;?>]['input1']" class="input1 form-control" id="input1[]" autocomplete="off"/>
  </td>
  <td>
    <input name="ligne[<?php echo $i;?>]['input2']" class="input2 form-control" id="input2[]" autocomplete="off"/>
  </td>
  <td>
    <input name="ligne[<?php echo $i;?>]['input3']" class="input3 form-control" id="input3[]" autocomplete="off"/>
  </td>
  <td>
    <input name="ligne[<?php echo $i;?>]['input4']" class="input4 form-control" id="input4[]" autocomplete="off"/>
  </td>
</tr> 
<?php
} //fin de la boucle
?>
0
Utilisateur anonyme
13 avril 2016 à 17:52
Merci pour ta réponse complète ! :-)

Encore une petite chose :
Je propose 10 lignes. Seulement, on peut choisir d'en remplir seulement seulement quelques unes.

J'ai donc les lignes qui s'ajoutent bien à ma BDD et à la fin j'ai une ligne vide qui est ajoutée.

J'ai donc testé plusieurs solutions et celles qui me semble la plus propice est une condition qui teste si horaire existe.
Si il existe, alors on ajoute les données à la BDD.

for($l=0;$l<=$nbLignes;$l++){
                          if(isset($horaire)){
                            echo $horaire[$l] . '<br>';
                            echo $input1[$l] . '<br>';
                            echo $input2[$l] . '<br>';
                            echo $input3[$l] . '<br>';
                            echo $input4[$l] . '<br>';
                            $req2 = $db->prepare("INSERT INTO seances (date, input1, input2, input3, input4) VALUES (:horaire, :input1, :input2, :input3, :input4)");
                            $req2->bindValue(':horaire', $horaire[$l]);
                            $req2->bindValue(':input1', $input1[$l]);
                            $req2->bindValue(':input2', $input2[$l]);
                            $req2->bindValue(':input3', $input3[$l]);
                            $req2->bindValue(':input4', $input4[$l]);
                            $req2->execute();

                          
                          }
                          else{
                            exit();
                          }
}


Malgré cela, je n'arrive pas à traiter seulement les variables qui existent..!
0
Utilisateur anonyme
16 avril 2016 à 12:55
Une idée ?
0
Utilisateur anonyme
18 avril 2016 à 11:14
Up !!
0
jordane45 Messages postés 38358 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 décembre 2024 4 719
18 avril 2016 à 14:52
Tu as marqué :
if(isset($horaire)){

là ... tu testes seulement si la variable $horaire (qui contient l'ensemble de tes valeurs saisies...) existe....

Pour savoir si il y a un horaire .. il faut vérifier que la variable :
$horaire[$l]

n'est pas vide ...
Et donc:
if(!empty($horaire[$l])) {
0