有没有办法在PHP处理每个表?例如,我有这个PHP代码:
<table>
<tr>
<td><input type="hidden" value="table1" name="tables[]" />Table 1</td>
</tr>
<tr>
<td><input type="hidden" value="1000" name="var1[]" />1000</td>
<td><input type="hidden" value="2000" name="var2[]" />2000</td>
</tr>
</table>
<table>
<tr>
<td colspan="2"><input type="hidden" value="table1" name="tables[]" />Table 2</td>
</tr>
<tr>
<td><input type="hidden" value="1000" name="var1[]" />1000</td>
<td><input type="hidden" value="2000" name="var2[]" />2000</td>
</tr>
<tr>
<td><input type="hidden" value="3000" name="var1[]" />3000</td>
<td><input type="hidden" value="4000" name="var2[]" />4000</td>
</tr>
</table>
我的输入名称对于每个表(tables, var1, and var2
)具有相同的名称。如果我使用这些方法的问题:
foreach ($_POST['var1'] as $cnt => $cat) {
$table = $_POST['tables'][$cnt];
$var2 = $_POST['var2'][$cnt];
myFunction($table, $var2);
}
它会给出一个错误,例如&#34;注意:未定义的偏移量:2 bla bla bla&#34; 有没有想过如何为每个表创建运行的代码?仅供参考:我的表格多种多样,可能是1,2或100.而且每张表格可能有1,2,3或100行,每张表格可能有不同的行数。
答案 0 :(得分:0)
你有这个通知,因为你想获得$_POST['tables']
数组的第三个元素,并且这个偏移量不存在。看看你的html代码,你有第一组和第二组的表数组。但是在第三组你没有表数组。
foreach ($_POST['var1'] as $cnt => $cat) {
$var2 = $_POST['var2'][$cnt];
if (isset($_POST['tables'][$cnt])) {
$table = $_POST['tables'][$cnt];
myFunction($table, $var2);
}
}
答案 1 :(得分:0)
目前查看您的代码,我只能看到$table
未被声明的问题。
<td>
,这就是您收到偏移错误的原因。查看您的表格并确保其中包含所有正确的数据。
这是一个工作解决方案,输出显示它有效:
<?php
if (isset($_POST)) {
foreach ($_POST['tables'] as $index => $table) {
$var2 = $_POST['var2'][$index];
$var1 = $_POST['var1'][$index];
echo 'table = ' . $table;
echo '<br>';
echo 'var1 = ' . $var1;
echo '<br>';
echo 'var2 = ' . $var2;
echo '<br><br>';
}
}
?>
<form method="post">
<table>
<tr>
<td><input type="hidden" value="table1" name="tables[]" />Table 1</td>
<td><input type="hidden" value="1000" name="var1[]" />1000</td>
<td><input type="hidden" value="2000" name="var2[]" />2000</td>
</tr>
</table>
<table>
<tr>
<td><input type="hidden" value="table2" name="tables[]" />Table 2</td>
<td><input type="hidden" value="1000" name="var1[]" />1000</td>
<td><input type="hidden" value="2000" name="var2[]" />2000</td>
</tr>
<tr>
<td><input type="hidden" value="table3" name="tables[]" />Table 3</td>
<td><input type="hidden" value="3000" name="var1[]" />3000</td>
<td><input type="hidden" value="4000" name="var2[]" />4000</td>
</tr>
</table>
<button>Click</button>
</form>
答案 2 :(得分:0)
正如您所说,可以有许多行和列。我会从你的POST数据创建一个二维数组:
<table>
<tr>
<td><input type="hidden" value="table1" name="tables[0][0]" />Table 1</td>
<td><input type="hidden" value="1000" name="tables[0][1]" />1000</td>
<td><input type="hidden" value="2000" name="tables[0][2]" />2000</td>
</tr>
</table>
<table>
<tr>
<td><input type="hidden" value="table1" name="tables[1][0]" />Table 2</td>
<td><input type="hidden" value="1000" name="tables[1][1]" />1000</td>
<td><input type="hidden" value="2000" name="tables[1][2]" />2000</td>
</tr>
<tr>
<td><input type="hidden" value="3000" name="tables[2][1]" />3000</td>
<td><input type="hidden" value="4000" name="tables[2][2]" />4000</td>
</tr>
然后:
<?php
$tables = $_POST['tables'];
foreach($tables as $table){
if(isset($table[0]) && isset($table[2])) myFunction($table[0], $table[2]);
}
?>
$tables[$x]
包含单行。然后$tables[$x][0]
是第一个<input>
,依此类推。