sameer kumar
sameer kumar

Reputation: 149

Insert multiple image name in a single row in database

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>

enter image description here

Upvotes: 1

Views: 13660

Answers (6)

Alpesh Navadiya
Alpesh Navadiya

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

user936965
user936965

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

Apoorv Bambarde
Apoorv Bambarde

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

Altmish-E-Azam
Altmish-E-Azam

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

rack_nilesh
rack_nilesh

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

Affan
Affan

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

Related Questions