发送关联数组中的所有数据的发布请求

问题描述:

我想要创建一个表,其中每个行都可以编辑它。同时,我希望能够将所有行数据放入一个文件中。发送关联数组中的所有数据的发布请求

我遇到的问题是当我点击id = download的按钮时,我无法获取所有行中的所有数据,但只有第一行,就好像我点击了id = firstRow的提交按钮。

任何人都知道如何通过单击一个按钮来检索所有数据行? 我现在只是使用PHP,所以使用PHP或HTML解决这个问题会有很大的帮助。

<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

只能使用1'

'标签。 –
+0

通过仅使用1个窗体标签,我无法单独编辑每个单独的行。 –

你不能表单内嵌套形式,也就是无效的HTML,所以如果你想拥有所有这些功能,您将需要使用的JavaScript由它们组装成一个js表单提交一次所有的形式但纯粹的PHP是不可能的,除非你一次提交一个包含所有字段的表单。

<!-- 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> 

在PHP中,你将需要检查的allfields键,以便:

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

您将看到的是一样的东西:

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 
     ) 
) 

你会看到该字段有一系列数组和查询字符串。使用urldecode()等处理您想要的方式。

+0

我当然需要了解更多关于Javascript的知识。现在,我通过编写另一组隐藏的输入并一次检索所有数据并将其放入表单中。通过这样做可以避免嵌套形式。 –