我有一个包含 11 列的复杂表单。至于行,它们会根据学生人数从大约 20 到 50 不等。我通过 php 脚本
将数据捕获为数组。每列产生一个数组。例如,从我有 fname[]、lname[]、exam_no[]
等的表单中,当提交表单时,比如 10 行,我最终得到 11 个数组,每个数组有 10 个条目,我通过一些 php 函数
来删除空元素。阵列的生成没有任何问题。
我想使用循环将这些数组中的数据插入到 mysql
中。基本上,lname array
将为名字列提供所有 first_name,lname array
将提供数据库的 last_name 列,依此类推。
我什至无法开始构建 MySQL 查询
来插入数据,我很熟悉“普通”插入,其中您有列和值,并且您已经知道有多少行将插入,每次插入大多一行。
甚至可以通过使用 PHP 循环
的插入来填充 MySQL 数据库表
,并使用如此多的列,并且可以灵活地插入任意数量的列每次用户输入学生数据时行都会有所不同?
更新
这是我想出来的。它有效但未达到预期效果!
数组像 $fname[], lname[]
等等
然后我将主数组构建为 $master_array=array['$fname, $lname];
$sql = "INSERT INTO testing (date, fname, lname) VALUES ";
foreach($master_array as $subarray) {
$sql .= "(NOW( )";
echo 'A nested array: '.$subarray.'<br />';
foreach($subarray as $value) {
$sql .= ", '$value'";
echo 'A Name: '.$value.'<br />';
}
$sql.= "), ";
}
$sql = substr($sql,0,-2); //removes extraneous , at end.
echo $sql;
$result=mysqli_query($dbc, $sql)
or die('Query Failed!');
?>
由于我的查询涉及连接小段代码,因此我在构建后打印它以查看要插入的内容。看起来是这样;
INSERT INTO table (date, fname, lname) VALUES (NOW( ), 'Andrew', 'Alex'), (NOW( ), 'Peterson', 'Marlon')
正如我所怀疑的,它在第一行插入所有名字,在第二行插入所有姓氏。期望的结果是在名字列中插入名字,在名字列中插入名字。所以现在我需要一种方法将一个数组的所有元素插入到一个列中,然后移动到第二个数组并将其插入下一列。这听起来很复杂,我想知道它是否可行!让我作为一个中级或新手的 php 语言的大师教育!
最佳答案
按学生分组不是更好吗?
例子:
<form...>
<? foreach ($students as $id => $info) : ?>
<input type="text" name="fname;<=$id;?>" value="<?=$info['fname'];?>" />
<input type="text" name="lname;<=$id;?>" value="<?=$info['lname'];?>" />
etc
<? endforeach ?>
</form>
(我在这里使用 PHP 短标签)
然后,当您处理表单时:
$update = array();
foreach ($_POST as $key => $value) {
// key will look like: fname;1, fname;2, etc
// so, split it on the ; sign to separate the field name from the student's id
$data = explode(';',$key);
// result:
// $data[0] = fname, lname, etc
// $data[1] = 1, 2, etc
// you can add some checks to make sure that this field is valid
// and that the id is in fact a valid id (number, > 0, etc)
// sanitize data (however you want, just an example)
$value = mysql_real_escape_string(trim($value));
// now add it to the update array, grouped by student id
$update[$data[1]][$data[0]] = $value;
// result:
// $update[1]['fname'] = 'First name student 1';
// $update[1]['lname'] = 'Last name student 1';
// $update[2]['fname'] = 'First name student 2';
// $update[2]['lname'] = 'Last name student 2';
// etc
}
之后,遍历更新数组:
foreach ($update as $id => $info) {
$sql = "UPDATE students
SET fname = '".$info['fname']."', lname = '".$info['lname']."'
WHERE id = $id";
mysql_query($sql);
}
关于php - 我如何使用 PHP 将数组插入 mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766320/