在数据库的单行中插入多个图像名称

时间:2014-12-17 07:05:51

标签: php mysql

Mates请帮我解决这个问题。 我创建了一个多个Image可以插入到单行数据库的地方,现在我的代码运行良好但是不可能将所有图像存储在它存储在多行中的单个数据库行中。这就是我到目前为止所做的事情。

<?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

6 个答案:

答案 0 :(得分:3)

您可以使用serialize()功能将多个图像名称存储在一行中。使用以下代码:

$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'])); 

答案 1 :(得分:2)

尝试以下代码

$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."')");

答案 2 :(得分:0)

提示不是确切的代码

循环并运行多个图像名称的循环并将它们存储在单个变量

   foreach( $_FILES["image"]["name"] as $key=>$value){
    $name .=$value;
  }

  $sql=mysql_query("INSERT INTO multiimg (`fieladname`) VALUES (insertField));

这将为所有行存储相同的名称 我希望这能解决你的问题

答案 3 :(得分:0)

您可以通过两种方式完成此操作,可以通过连接@Miya和@Affan回答的图像名称,也可以为每个图像创建单独的列。

我将解释第二种方法。

您有四个固定图像上传按钮。因此,不是在db表中使用单列'image',而是可以有四列用于单独的图像。

所以你的表架构将是

id   |   image1   |   image2   |   image3   |   image4 

现在您可以使用单个插入查询插入所有图像,

$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]')");

我建议你采用这种方法,因为将来如果要获取图像名称,它将比第一种方法插入的值更容易。

答案 4 :(得分:0)

尝试这样的事情:

$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)."'");

当您从数据库中选择它时,您可以使用json_decode将图像放入数组中。

答案 5 :(得分:0)

       $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')";