Reputation: 149
Mates Please Help me to solve this problem. I ve created one from where multiple Image can Insert to a single row of database now my code is working well but it is not possible to store all image in a single data base row it is storing in multiple rows. Here what i ve done till yet.
<?php
mysql_connect("localhost","root","");
mysql_select_db("test");
$uploads_dir = 'photo/';
foreach ($_FILES["image"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["image"]["tmp_name"][$key];
$name = $_FILES["image"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
$sql=mysql_query("INSERT INTO multiimg SET image='$name'");
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>
function addmore(num)
{
if(num==1)
{
document.getElementById('field2').style.display='block';
document.getElementById('ni1').style.display='block';
return false;
}
else if(num==2)
{
document.getElementById('field3').style.display='block';
return false;
}
}
</script>
</head>
<body>
<form enctype="multipart/form-data" name="" action="" method="post">
<div id="field1">Enter One Image :<input type="file" name="image[]" id="img1"/><a href="#" onclick="addmore(1)" id="ni1">addmore...</a></div>
<div id="field2" style="display:none;">Enter Two Image :<input type="file" name="image[]" id="img2"/><a href="#" onclick="addmore(2);">add more...</a></div>
<div id="field3" style="display:none;">Enter Three Image :<input type="file" name="image[]" id="img3"/><a href="#" onclick="addmore(3)" id="ni3">addmore...</a></div>
<div id="field4" style="display:none">Enter Forth Image :<input type="file" name="image[]" id="img4"/><a href="#" onclick="addmore(4)" id="ni4">addmore...</a></div>
<input type="submit" name="submit"/>
</form>
</body>
</html>
Upvotes: 1
Views: 13660
Reputation: 23
$img[$i] = array();
$uploads_dir = "images/";
$i=1;
foreach ($_FILES["image"]["error"] as $key => $error)
{
$name[$i] == "";
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["image"]["tmp_name"][$key];
$img[$i] = $_FILES["image"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$img[$i]");
}
$i++;
}
$sql1 = "INSERT INTO event(img1,img2,img3) VALUES('$img1','$img2','$img3')";
Upvotes: 0
Reputation:
Try something like this:
$uploads_dir = 'photo/';
$imageArr = array();
foreach ($_FILES["image"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["image"]["tmp_name"][$key];
$name = $_FILES["image"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
array_push($imageArr,$name);
}
}
$sql=mysql_query("INSERT INTO multiimg SET image='".json_encode($imageArr)."'");
When you selected it from the database, you can use json_decode
to get your images in an array.
Upvotes: 0
Reputation: 342
You can use serialize()
function for storing the multiple image name in single row. Use the below code:
$uploads_dir = 'photo/';
$imageArr = array();
foreach ($_FILES["image"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["image"]["tmp_name"][$key];
$name = $_FILES["image"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
array_push($imageArr,$name);
}
}
$imageArr=serialize($imageArr);
$sql=mysql_query("INSERT INTO multiimg SET image='".$imageArr."'");
After that use unserialize() function,this will show the array of that multiple image. user the bellow code:
$sql1=mysql_query("Select * from multiimg");
$result=mysql_fetch_assoc($sql1);
print_r(unserialize($result['image']));
Upvotes: 3
Reputation: 1583
Try below code
$images_name ="";
foreach ($_FILES["image"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["image"]["tmp_name"][$key];
$name = $_FILES["image"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
$images_name =$images_name.",".$name;
}
}
$sql=mysql_query("INSERT INTO multiimg(image) values('".$images_name."')");
Upvotes: 3
Reputation: 553
You can do this in two ways, either by concatenating image names as answered by @Miya and @Affan or by creating separate column for each image.
I'll explain second approach.
You have four fixed image upload buttons. So instead of having single column 'image' in db table you can have four columns each for separate image.
So you table schema will be
id | image1 | image2 | image3 | image4
And now you can insert all images using single insert query as,
$uploads_dir = 'photo/';
$name = array();
$i=1;
foreach ($_FILES["image"]["error"] as $key => $error) {
$name[$i] == "";
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["image"]["tmp_name"][$key];
$name[$i] = $_FILES["image"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
$sql=mysql_query("INSERT INTO multiimg SET image='$name'");
}
$i++;
}
$sql=mysql_query("INSERT INTO multiimg (`image1`,`image2`,`image3`,`image4`) VALUES ('$name[1]','$name[2]','$name[3]','$name[4]')");
I recommend you this approach because in future if you want to fetch image name then it will easier than the value inserted by first approach.
Upvotes: 0
Reputation: 1140
hint not exact code
your loop and run loop for multiple image name and store them in single variable
foreach( $_FILES["image"]["name"] as $key=>$value){
$name .=$value;
}
$sql=mysql_query("INSERT INTO multiimg (`fieladname`) VALUES (insertField));
this will store same name to all row i hope this will solve your problem
Upvotes: 0