我尝试在我的数据库中插入多行,该图像不保存到文件夹和
我收到此错误
Blockquote ArrayArray您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在“Chrysanthemum.jpg”附近使用正确的语法,(''Hydrangeas.jpg')','('Chrysanthemum.jpg'),('Hydrangeas.j'在线1
这是我的代码:
$hopid = $_POST[photo_hop_id];
$title = $_POST['photo_name_id'];
if(!is_array($title)) {
$title = array();
}
$titleds = "('" . implode("'), ('", $title) . "')";
$tmp_file = $_FILES['ne_photo_image']['tmp_name'];
$file = $_FILES['ne_photo_image']['name'];
if(!is_array($tmp_file)) {
$tmp_file = array();
}
if(!is_array($file)) {
$file = array();
}
$sementara = "('" . implode("'), ('", $tmp_file) . "')";
$filed = "('" . implode("'), ('", $file) . "')";
$tmp_file1 = $_FILES['fe_photo_image']['tmp_name'];
$file1 = $_FILES['fe_photo_image']['name'];
if(!is_array($tmp_file1)) {
$tmp_file = array();
}
if(!is_array($file1)) {
$file = array();
}
$sementara1 = "('" . implode("'), ('", $tmp_file) . "')";
$filed1 = "('" . implode("'), ('", $file) . "')";
if(!move_uploaded_file($sementara, 'image/' . $filed)) {
echo $_FILES["ne_photo_image"]["error"];
}
if(!move_uploaded_file($sementara1, 'image/' . $filed1)) {
echo $_FILES["fe_photo_image"]["error"];
}
$y = "INSERT INTO photo VALUES (null, '".$filed."', '".$filed1."', '".$hopid."', '".$titleds."')";
$z = mysql_query($y) or die (mysql_error());
if($z) {
$msg = "Data sudah ditambahkan";
}
else {
$msg = "Data tidak bisa dimasukkan";
}
echo print_r($y);
这是我的表格:
<form method="post" enctype="multipart/form-data">
<table border="0"cellpadding="0" cellspacing="0" width= "100%">
<tr>
<td>Hop Name :<?echo "$data[hop_name]"?>
<input type='hidden' name='photo_hop_id' value='<?echo"$data[hop_id]"?>'>
</td>
</tr>
<table border="0"cellpadding="0" cellspacing="0" width= "100%">
<tr>
<td cellpadding="0" cellspacing="0" width= "50%">
Near End Site Name : <?echo "$data[ne_site_name]" ?>
</br>
Near End Site Id : <?echo "$data[ne_site_code]" ?>
</td>
<td cellpadding="0" cellspacing="0" width= "50%">
Far End Site Name : <?echo "$data[fe_site_name]" ?>
</br>
Far End Site Id : <?echo "$data[fe_site_code]"?>
</td>
</tr>
<tr>
<td cellpadding="0" cellspacing="0" width= "50%">
<? $pm1= mysql_query("SELECT photo_name FROM photo_name WHERE photo_name_id = 1");
$dpm1 = mysql_fetch_array ($pm1);echo"$dpm1[0]" ?>
<input type='hidden' name='photo_name_id[]' value='<?echo"$dpm1[0]"?>'> :
<input type="file" name="ne_photo_image[]">
</td>
<td cellpadding="0" cellspacing="0" width= "50%">
<?echo "$dpm1[0]"?> : <input type="file" name="fe_photo_image[]">
</td>
</tr>
<tr>
<td cellpadding="0" cellspacing="0" width= "50%">
<? $pm1= mysql_query("SELECT photo_name FROM photo_name WHERE photo_name_id = 2");
$dpm1 = mysql_fetch_array ($pm1);echo"$dpm1[0]" ?>
<input type='hidden' name='photo_name_id[]' value='<?echo"$dpm1[0]"?>'> :
<input type="file" name="ne_photo_image[]">
</td>
<td cellpadding="0" cellspacing="0" width= "50%">
<?echo "$dpm1[0]"?> : <input type="file" name="fe_photo_image[]">
</td>
</tr>
</table>
</table>
<input type="submit" value="insert" />
</form>
非常感谢您的帮助
答案 0 :(得分:1)
你的错误很明显来自这一行:
$y = "INSERT INTO photo VALUES (null, '".$filed."', '".$filed1."', '".$hopid."', '".$titleds."')";
例如,您的var $filed
是一个内爆数组,看起来像('foo'), ('bar')
。最后,您的请求将显示为INSERT INTO photo VALUE (null, '('foo'), ('bar')', [...]);
。
您必须在$filed
,$filed1
,$hopid
,$titleds
中转义简单引号,但我非常确定您的请求完全错误。
你能给我们photo
表 schema 结构吗?
编辑:
给出的结构:(photo_id,ne_photo_image,fe_photo_image,hop_id,title)
要在表中插入多行,必须使用以下语法:
INSERT INTO photo(`photo_id`, `ne_photo_image`, `fe_photo_image`, `hop_id`, `title`)
VALUES
(null, 'foo', 'bar', 'baz', 'qux'),
(null, 'foo', 'bar', 'baz', 'qux'),
(null, 'foo', 'bar', 'baz', 'qux');
Aka,您必须逐行插入数据 ,而不是逐列插入数据(您现在尝试尝试的内容)。
你的代码应该是这样的(这绝对不是一整段代码,我不确定你所有的代码,然后我给你一些跟踪):
<?php
$hopid = $_POST['photo_hop_id'];
$titles = $_POST['photo_name_id'];
$ne_photo_images = $_FILES['ne_photo_image']['tmp_name'];
$fe_photo_images = $_FILES['fe_photo_image']['tmp_name'];
/*
I assume $titles, $ne_photo_images and $fe_photo_images
have the same number of elements, in the right order.
*/
$sql = "INSERT INTO photo(`photo_id`, `ne_photo_image`, `fe_photo_image`, `hop_id`, `title`) VALUES";
for($i = 0, $l = sizeof($titles) ; $i < $l ; $i++)
{
//adding row datas
$sql .= " (null,
'".$ne_photo_images [$i]."',
'".$fe_photo_images [$i]."',
'".$hopid."',
'".$titles[$i]."')";
if($i < $l - 1)
$sql .= ",";
}
if(mysql_query($sql))
//get happy
else
//take a coffee
?>
同样,这段代码还远非完美,我只是想解释一下如何处理这个问题。
答案 1 :(得分:0)
删除$filed
,$filed1
,$titleds
$y = "INSERT INTO photo VALUES (null, ".$filed.", ".$filed1.", '".$hopid."', ".$titleds.")";
不要使用mysql_*
函数,因为它已被弃用。
答案 2 :(得分:0)
在您的代码中,您将提交的数据分配给相应的变量。你正在检查这些变量是否是数组。如果没有,您将使用array()
分配该变量。因此,您尝试将其转换为没有元素的数组变量,因为当您执行该分配时,您将覆盖任何现有值。
所以最后,如果提交的数据不是数组,那么插入的数组中可能没有任何元素!
进行测试:
$abc = 'hi';
if(!is_array($abc))
{
$abc = array();
}
print_r($abc); // $abc will be an empty array
另外,请阅读samsam和亚历山大曾就单引号指出的内容。
另一件事是,$_POST
是一个关联数组。你必须传递key
作为字符串。在第一行:$hopid = $_POST[photo_hop_id];
,它应该是这样的:$hopid = $_POST['photo_hop_id'];
如果要回显变量的值,可以这样做:echo $variblename;
。在您的代码中<?echo "$dpm1[0]"?>
,最好像这样使用它:<?echo $dpm1[0]?>
(即没有双引号,因为其中没有其他字符串)。