Php 将数组中的表单值插入数据库
我创建了一个表单,允许用户将多个文件上载到一个目录。现在,我试图从表单输入字段中获取文件名,并将其存储到数据库中 我试图获取输入字段的数组值,即;输入['file']['name']和['file']['tmp_name']并将它们插入数据库。使用下面的代码,我只能将单词“array”插入到数据库中,而不是文件本身的实际名称 我认为我需要使用foreach循环遍历数组,但是我不确定如何编写它以及在哪里将它插入到代码中。以下是迄今为止的代码:Php 将数组中的表单值插入数据库,php,mysql,database,arrays,Php,Mysql,Database,Arrays,我创建了一个表单,允许用户将多个文件上载到一个目录。现在,我试图从表单输入字段中获取文件名,并将其存储到数据库中 我试图获取输入字段的数组值,即;输入['file']['name']和['file']['tmp_name']并将它们插入数据库。使用下面的代码,我只能将单词“array”插入到数据库中,而不是文件本身的实际名称 我认为我需要使用foreach循环遍历数组,但是我不确定如何编写它以及在哪里将它插入到代码中。以下是迄今为止的代码: #connect to the database
#connect to the database
mysql_connect("localhost", "root", "");
mysql_select_db("masscic");
//Upload Handler to check image types
function is_image($file) {
$file_types = array('jpeg', 'gif', 'bmp'); //acceptable file types
if ($img = getimagesize($file)){
//echo '<pre>';
//print_r($_FILES); //will return an array of information for testing
//print_r($img); //will return an array of information for testing
if(in_array(str_replace('image/', '', $img['mime']), $file_types))
return $img;
}
return false;
}
//form submission handling
if(isset($_POST['submit'])) {
//file variables
$fname = $_FILES['files']['name'];
$ftype = $_FILES['files']['type'];
$fsize = $_FILES['files']['size'];
$tname = $_FILES['files']['tmp_name'];
$ferror = $_FILES['files']['error'];
$newDir = '../uploads/'; //relative to where this script file resides
for ($i = count($fname) -1; $i >=0; $i--) {
if ($ferror[$i] =='UPLOAD ERR OK' || $ferror[$i] ==0)
{
if(is_image($tname[$i]))
{
move_uploaded_file($tname[$i], ($newDir.time().$fname[$i]));
echo '<li><span class="success">'.$fname[$i].' -- image has been accepted<br></span></li>';
}else
echo '<li><span class="error">'.$fname[$i].' -- is not an accepted file type<br></span></li>';
}
}
}
$sqlInsert = mysql_query("INSERT INTO files (file_names) VALUES('$fname')") or die (mysql_error());
#连接到数据库
mysql_connect(“本地主机”、“根目录”、“根目录”);
mysql_select_db(“masscic”);
//上载处理程序以检查图像类型
函数是_image($file){
$file_types=array('jpeg','gif','bmp');//可接受的文件类型
如果($img=getimagesize($file)){
//回声';
$_FILES['files']['name'][0]; // a.html
$_FILES['files']['name'][1]; // b.html
$_FILES['files']['size'][0]; // size of a.html
$_FILES['files']['size'][1]; // size of b.html
//print_r($_FILES);//将返回一个用于测试的信息数组
//print_r($img);//将返回一个用于测试的信息数组
if(在数组中(str_replace('image/',''.$img['mime']),$file_types))
返回$img;
}
返回false;
}
//表格提交处理
如果(isset($_POST['submit'])){
//文件变量
$fname=$_文件['FILES']['name'];
$ftype=$_文件['FILES']['type'];
$fsize=$_文件['FILES']['size'];
$tname=$\u文件['FILES']['tmp\u名称'];
$ferror=$_文件['FILES']['error'];
$newDir='../uploads/';//相对于此脚本文件所在的位置
对于($i=count($fname)-1;$i>=0;$i--){
如果($ferror[$i]='UPLOAD ERR OK'| |$ferror[$i]==0)
{
if(is_image($tname[$i]))
{
移动上传的文件($tname[$i],($newDir.time().$fname[$i]);
回显“”。$fname[$i].--图像已被接受
”;
}否则
echo“”。$fname[$i].--不是可接受的文件类型
;
}
}
}
$sqlInsert=mysql\u query(“插入到文件(文件名)值('$fname'))或die(mysql\u error());
感谢您的帮助。上载多个文件(具有相同的字段名)时,会向阵列中添加另一个维度。假设我上传a.html和b.html,我会得到:
for(var $i = 0; $i < count($_FILES['files']['name']); $i++) {
echo 'File name ' . $_FILES['files']['name'][$i] . ' has size ' . $_FILES['files']['size'][$i];
}
要遍历:
for(var$i=0;$i
这一点在Hi中进行了说明。我已经广泛地阅读了那一页,但我不能完全理解它。这就是我想到“foreach”循环的原因。你是说我应该用我的for循环替换上面的循环吗?如果是这样,for循环会给出一个解析错误。我修复了解析错误并将其插入到数据库中,但它会创建三条单独的记录。也就是说,如果用户上载三个文件,则会在数据库中创建三个单独的记录。我希望将所有三个文件作为一条记录计入数据库中名为“files”的一个数据库列中。