在mysql中插入多个图像,也插入多行

时间:2014-12-16 09:21:15

标签: php image mysqli upload

我搜遍了谷歌的所有地方寻找答案,但我似乎无法找到合适的答案,所以我会在这里试一试。

我想在mysqli数据库中存储用户的firstname,lastname和图像路径,以及文件夹上传中的图像。 (用户可以上传多张图片)

这有效,没问题。

问题是:

例如,当他们键入他们的名字和姓氏并选择两个图像并按下上传按钮时,它会上传所有内容,但它也会创建两行,其值完全相同。

我想将所有内容存储在一行中,请参阅下面的代码:

<?php

$con = mysqli_connect('localhost','root','','img_db');
mysqli_select_db($con,'img_db');

$rn = mt_rand();

if(isset($_POST['submit'])&& isset($_FILES['image'])&& !empty($_POST['firstname'])&& !empty($_POST['lastname']))
{
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];

    for($i=0; $i<count($_FILES['image']['name']); $i++)
    {
        $tmp_name = $_FILES['image']['tmp_name'][$i];
        $max_size = 100000;
        $path = "uploads/";  
        $name = $_FILES['image']['name'][$i];
        $size = $_FILES['image']['size'][$i];
        $type = $_FILES['image']['type'][$i];

        $ext = strtolower(substr($name, strpos($name, '.') +1));
        $name = str_replace('_','',trim($name));
        $name = str_replace('-','',trim($name));
        $name = str_replace(' ','',trim($name)); 
        $name = str_replace('__','',trim($name));

        if(($ext=='jpg' || $ext=='jpeg' || $ext=='png' || $ext=='gif')&&($type=='image/jpeg' || $type=='image/png' || $type=='image/gif')&&$size<=$max_size)
        {  

            if(move_uploaded_file($_FILES['image']['tmp_name'][$i], $path.$rn.$name)) 
            { 
                mysqli_query($con,"INSERT into `img` (firstname,lastname,url) VALUES('$firstname','$lastname','$rn$name')");
            }
        }// END EXT

    }// END FOR LOOP

}// END IF ISSET POST SUBMIT

?>

1 个答案:

答案 0 :(得分:1)

建议1

一种解决方案是将上传的文件网址存储在array(在for循环之前声明)并使用array循环之外的for,如下所示:

if (isset(/* ... */)) {
  // Outside your for loop
  $files = array();

  for (/* .. */) {

    // Doing things

    if (/* $ext stuff */) {
      if (move_uploaded_file(/* ... */))
      {
        $files[] = $rn.$name;
      }
    } // End EXT
  } // End FOR

  // Utilize $files array to determine how you want to store all of these URLs in one field.
  // Let's say you created a variable called $store with the desired representation.
  mysqli_query($con,"INSERT into `img` (firstname,lastname,url) VALUES('$firstname','$lastname','$store')");

} // End ISSET

建议2

您可以使用双表结构(一个表是用户,一个表是图像),并通过所需用户的主键从每个图像表行创建外键关系到用户表行。 / p>

请参阅:http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html