我有一个实际上是表的表单,表(表单)是动态的,因此表可以包含10到300行的任何内容,
表格表格:
以下是输入表格表的代码:
include("x.xxx");
$cxn = mysqli_connect($host,$user,$password,$dbname);
$query = "SELECT * FROM `inspjc` ORDER BY `scaffreq_id`";
$result = mysqli_query($cxn,$query)
or die ("Couldn't execute query.");
echo "<table align='center'><br>
<tr bgcolor='#8DB4E3'>
<th>X</th>
<th>Scaffold Req No</th>
<th>Elevation</th>
<th class='vertical'>Foundations</th>
<th class='vertical'>Ledgers</th>
<th class='vertical'>Face Brace</th>
<th class='vertical'>Plan Brace</th>
<th class='vertical'>Platforms</th>
<th class='vertical'>Mobiles</th>
<th class='vertical'>Uprights</th>
<th class='vertical'>Transoms</th>
<th class='vertical'>Transverse Braces</th>
<th class='vertical'>Ties</th>
<th class='vertical'>Safe Access</th>
<th class='vertical'>Signs</th>
<th>If Not Inspected<br>Supply a Reason</th>
</tr>";
while($row = mysqli_fetch_assoc($result))
{
extract($row);
echo "<tr>\n
<td><input type='checkbox' checked='checked' name='scaffreq_id[]' value='$scaffreq_id' /></td>\n
<td><center>$scaffreq_id</center></td>\n
<td><center>$level m</center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp1[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp2[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp3[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp4[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp5[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp6[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp7[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp8[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp9[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp10[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp11[]' value='y' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='insp12[]' value='y' /></center></td>\n
<td><center><p><input type='text' name='insp_reason[]' maxlength='255' size='45' value='$insp_reason'></p></center></td>\n
</tr>\n";
}
echo "</table><br>";
?>
所需的输出如下(简化):
x ID a b c d e f g
---------------------------------------------------
1 365 1 1 0 0 0 1 North Bay
1 211 1 0 1 1 1 1 South Bay
0 237 0 1 1 1 1 0 Boiler
x表示type ='checkbox'的输入类型,ID表示其ID键。 提交时,我想将数据写入数据库。
我尝试了一些循环选项,但我需要从php运行循环而不是循环查询(这需要太长时间),尤其是选择了300行。
php代码的基本支出:
$ID = $_POST[ID];
$a = $_POST[a];
$b = $_POST[b];
$c = $_POST[c];
$d = $_POST[d];
$e = $_POST[e];
$f = $_POST[f];
$g = $_POST[g];
$userData = array();
foreach ($ID as $newid)
{
$userData[] = "('" . $newid['ID'] . "',
'" . $newid['a'] . "',
'" . $newid['b'] . "',
'" . $newid['c'] . "',
'" . $newid['d'] . "',
'" . $newid['e'] . "',
'" . $newid['f'] . "',
'" . $newid['g'] . "')";
}
$query = "INSERT INTO `inspect` (`ID`,`a`,`b`,`c`,`d`,`e`,`f`,`g`) VALUES ";
$query .= implode(',',$userData);
但是,回显查询只会给我“('0',0','0','0','0','0','0','0'),('0 '...'但是,所选ID字段的确有数据量(在括号内)。
答案 0 :(得分:0)
<强>更新强>
(哇,这很难):您将HTML表单中的所有输入字段定义为数组。您可以删除那些使其成为数组的[]
,也可以在name=insp[]
- 复选框上使用insp
。然后使用var_dump($_POST)
输出您的提交,您将看到如何解析数组。
或者创建一个嵌套数组。这样的事情会有所帮助:
while($row = mysqli_fetch_assoc($result)) {
extract($row);
echo "<tr>\n
<td><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][id]' /></td>\n
<td><center>{$scaffreq_id}</center></td>\n
<td><center>{$level} m</center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][a]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][b]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][c]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][d]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][e]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][f]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][g]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][h]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][i]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][j]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][k]' /></center></td>\n
<td><center><input type='checkbox' checked='checked' name='items[{$scaffreq_id}][insp][l]' /></center></td>\n
<td><center><p><input type='text' name='items[{$scaffreq_id}][reason]' maxlength='255' size='45' value='Reason{$insp_reason}'></p></center></td>\n
</tr>\n";
}
如果没有看到HTML表单代码,帮助并不容易。但在我看来,$ID
很可能不是一个数组。因此使用foreach($ID as ...)
并不好。相反,像这样构建你的字符串:
$query = "INSERT INTO `inspect` (`ID`,`a`,`b`,`c`,`d`,`e`,`f`,`g`) VALUES ";
$query .= "({$ID}, {$a}, {$b}, {$c}, {$d}, {$e}, {$f}, {$g})";
警告:强>
请注意,您的代码对SQL注入是不安全且难以理解的(请参阅this SO Q&A)。使用PDO prepared statements代替mysql()
函数!