2017-09-04 2 views
0

Je souhaite créer une table dans laquelle elle est modifiable dans chacune des lignes. En même temps je veux pouvoir prendre toutes les lignes de données et les mettre dans un fichier. Le problème que j'ai est quand je clique sur le bouton avec id = télécharger, je ne pourrais pas obtenir toutes les données dans toutes les rangées mais seulement la première rangée comme si j'ai cliqué sur le bouton soumettre pour le id = firstRow.Envoi d'une demande de publication de toutes mes données dans un tableau associé

Quelqu'un sait comment puis-je récupérer toutes les lignes de données en un clic sur un bouton? Je n'utilise que PHP actuellement, donc ce serait une aide précieuse pour résoudre cela en utilisant PHP, ou HTML d'ailleurs.

<form method="post" action="allRows.php"> 
    <table border="1"> 
     <tr> 
      <th>Name</th> 
      <th>Age</th> 
      <th>Gender</th> 
      <th>Single</th> 
      <th>Test button</th> 
     </tr> 
     <tr> 
      <form action="oneRow.php" method="post"> 
       <td><input type="text" name="person[0][name]"></td> 
       <td><input type="text" name="person[0][age]"></td> 
       <td><input type="text" name="person[0][sex]"></td> 
       <td><input type="text" name="person[0][spouse]"></td> 
       <td><input id="firstRow" type="submit" name="test"></td> 
      </form> 
     </tr> 
     <tr> 
      <form action="oneRow.php" method="post"> 
       <td><input type="text" name="person[1][name]"></td> 
       <td><input type="text" name="person[1][age]"></td> 
       <td><input type="text" name="person[1][sex]"></td> 
       <td><input type="text" name="person[1][spouse]"></td> 
       <td><input id="secondRow" type="submit" name="test"></td> 
      </form> 
     </tr> 
    </table> 
    <input id="download" type="submit" name="Download" value="Download"> 
</form> 
+0

Utilisez seulement 1 balise ''

' '. –

+0

En utilisant une seule balise de formulaire, je ne peux pas éditer chaque ligne séparément. –

Répondre

1

Vous ne pouvez pas les formes de nid à l'intérieur des formes, qui est html invalide, donc si vous voulez avoir toutes ces fonctionnalités, vous devez utiliser javascript pour soumettre tous les formulaires à la fois par les assembler en une forme js mais PHP pur n'est pas possible à moins que vous soumettiez un formulaire avec tous les champs en même temps.

<!-- You need the jQuery library --> 
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <table border="1"> 
     <tr> 
      <th>Name</th> 
      <th>Age</th> 
      <th>Gender</th> 
      <th>Single</th> 
      <th>Test button</th> 
     </tr> 
     <tr> 
      <!-- You need to add class="rowform" to each form tag --> 
      <form action="oneRow.php" method="post" class="rowform"> 
       <td><input type="text" name="person[0][name]"></td> 
       <td><input type="text" name="person[0][age]"></td> 
       <td><input type="text" name="person[0][sex]"></td> 
       <td><input type="text" name="person[0][spouse]"></td> 
       <td><input id="firstRow" type="submit" name="test"></td> 
      </form> 
     </tr> 
     <tr> 
      <form action="oneRow.php" method="post" class="rowform"> 
       <td><input type="text" name="person[1][name]"></td> 
       <td><input type="text" name="person[1][age]"></td> 
       <td><input type="text" name="person[1][sex]"></td> 
       <td><input type="text" name="person[1][spouse]"></td> 
       <td><input id="secondRow" type="submit" name="test"></td> 
      </form> 
     </tr> 
    </table> 
<!-- Create the empty download all form, add id="allrows" --> 
<form method="post" action="allRows.php" id="allrows"> 
    <input id="download" type="submit" name="Download" value="Download"> 
</form> 

<script> 
// Start document listener 
$(document).ready(function(e) { 
    // Listen for the download form to submit 
    $('#allrows').on('submit',function(e) { 
     // Stop it from reloading the page (submitting the form) 
     e.preventDefault(); 
     // Create a storage array 
     var data = []; 
     // Loop through each form (each form tag needs the "rowform" class 
     $.each($('.rowform'),function(k,v) { 
      // Fetch all the data from the form 
      data[k] = $(v).serialize(); 
     }); 
     // Create a storage array for the form 
     var form = []; 
     // Start building a form 
     form.push('<form action="allRows.php" method="post">'); 
     // Implode the form data from each form 
     form.push('<input name="allfields[]" value="'+data.join('" /><input name="allfields[]" value="')+'" />'); 
     // Create a submit field 
     form.push('<input type="submit" value="submit" /></form>'); 
     // Combine the html form 
     form = form.join(''); 
     // Submit the form 
     $(form).submit(); 
    }); 
}); 
</script> 

Dans le php, vous devrez vérifier la clé allfields si:

if(!empty($_POST['allfields'])) { 
    // do code 
} 

Ce que vous verrez quelque chose comme:

Array 
(
    [allfields] => Array 
     (
      [0] => person%5B0%5D%5Bname%5D=qewrqwer&person%5B0%5D%5Bage%5D=adsf&person%5B0%5D%5Bsex%5D=fdsdfds&person%5B0%5D%5Bspouse%5D=sdfds 
      [1] => person%5B1%5D%5Bname%5D=sssssss&person%5B1%5D%5Bage%5D=sssweeeee&person%5B1%5D%5Bsex%5D=qqqqqq&person%5B1%5D%5Bspouse%5D=222222 
     ) 
) 

Et vous verrez ce champ avoir une série de tableaux et de chaînes de requête. Traitez ce que vous voulez à partir de ce point en utilisant urldecode() etc.

+0

J'ai sûrement besoin d'en savoir plus sur Javascript. Pour l'instant je le fais en écrivant un autre ensemble d'entrée qui est caché et récupère toutes les données à la fois, et en mettant cela dans un formulaire. En faisant cette forme de nidification peut être évitée. –