首页 > 解决方案 > 无法在数组的下一个循环中存储数据

问题描述

我不知道这段代码有什么问题,但是每当我选择要填写的多个表格时,只会显示数据的最后一部分。例如,我会选择 3 个表格并用仅存储最后一个表格的数据填充它。我使用这段代码来显示应该在数组中的数据。

echo "<pre>";                                                
print_r($_POST);                                                         
echo "</pre>";

这是我的代码,请帮助我

<?php

//  $_POST['countEmp'] is a variable from another page that would determine 
//  how many loops that it should execute  

$count = $_POST['countEmp'];
$sql = "SELECT * FROM position";
$res = mysqli_query($conn,$sql);
$flag = 0;

for ($i=0; $i < $count; $i++) { 
    echo " <form method='POST' action=insertProject1.php> ";
    echo " <input type='text' name='employee[]' placeholder='employee's name'> ";
    echo "<select  name='position[]'>";
    echo "<option selected='selected'>POSITION</option>";
       while ($data = mysqli_fetch_assoc($res)) {
           echo "<option value=".$data['position_id'].">".$data['position']."</option>";
        }   
    echo "</select>";
    echo "<br>";
    $flag++;
    if ($flag== $count) {
        echo "<input type='submit' value='SUBMIT' name='insert'>";
    }
    mysqli_data_seek($res,0);
    echo " </form> ";
    }
?>

标签: phpmysql

解决方案


因为您有单独的表单和自己的提交按钮,所以提交的数据将只属于单击提交按钮的表单。您将需要重组/合并您的表格以生成您想要的结果。

这是我在本地主机上测试的方式:

<?php
var_export($_POST);
?>
<br>
<form method='POST' action=''>
    <input type='text' name='employee[]' placeholder='employee&apos;s name'>
    <select  name='position[]'>
        <option>POSITION</option>
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
    </select>
    <br>
    <input type='submit' value='SUBMIT' name='insert1'>";
</form>
<br>
<form method='POST' action=''>
    <input type='text' name='employee[]' placeholder='employee&apos;s name'>
    <select  name='position[]'>
        <option>POSITION</option>
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
    </select>
    <br>
    <input type='submit' value='SUBMIT' name='insert2'>";
</form>
<br>
<form method='POST' action=''>
    <input type='text' name='employee[]' placeholder='employee&apos;s name'>
    <select  name='position[]'>
        <option>POSITION</option>
        <option value="1">A</option>
        <option value="2">B</option>
        <option value="3">C</option>
    </select>
    <br>
    <input type='submit' value='SUBMIT' name='insert3'>";
</form>

除了employee[]position[]值,当我单击第二个提交按钮时,我看到了$_POST['insert2'] = "SUBMIT".


如果你想要这样的结构:

array (
    'employee' => array ( 0 => 'Frank', 1 => 'Jim', 2 => 'Earl', ),
    'position' => array ( 0 => '2', 1 => '1', 2 => '3', ),
    'insert' => 'SUBMIT',
)

然后使用单个提交按钮将所有字段包装在一个表单中。


或者,如果您想要这样的结构:

array (
   'set' => array (
       0 => array ( 'employee' => 'Candice', 'position' => '3', ),
       1 => array ( 'employee' => 'Bert', 'position' => '2', ),
       2 => array ( 'employee' => 'Abe', 'position' => '1', ),
   ),
   'insert' => 'SUBMIT',
)

然后你可以构建你的单一表单,如下所示:

<form method='POST' action=''>
<?php
for ($i = 0; $i < 3; ++$i) {
    echo "<input type='text' name='set[$i][employee]' placeholder='employee&apos;s name'>";
    echo "<select name='set[$i][position]'>";
        echo "<option>POSITION</option>";
        echo "<option value='1'>A</option>";
        echo "<option value='2'>B</option>";
        echo "<option value='3'>C</option>";
    echo "</select>";
    echo "<br>";
}
?>
<input type='submit' value='SUBMIT' name='insert'>
</form>

推荐阅读