Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在一个mysql数据库行中插入多个映像?_Php_Mysql - Fatal编程技术网

Php 如何在一个mysql数据库行中插入多个映像?

Php 如何在一个mysql数据库行中插入多个映像?,php,mysql,Php,Mysql,好的,我想简单地说一下我的代码有什么问题。下面的代码完美地将图像数据上传到mysql数据库中,只有一个障碍。在我的表单上,人们最多可以上传4张图片。现在,下面的代码插入四个不同的行。每个图像1行。但是这四行的标题是相同的,因为它属于同一篇文章。我是否可以执行逗号分隔的插入,以便单个帖子的所有四个图像都在一行中 $posts=“从发布中选择*,其中userid='$user'; $posts\u result=mysqli\u查询($conn$posts); $res=mysqli\u num

好的,我想简单地说一下我的代码有什么问题。下面的代码完美地将图像数据上传到mysql数据库中,只有一个障碍。在我的表单上,人们最多可以上传4张图片。现在,下面的代码插入四个不同的行。每个图像1行。但是这四行的标题是相同的,因为它属于同一篇文章。我是否可以执行逗号分隔的插入,以便单个帖子的所有四个图像都在一行中


$posts=“从发布中选择*,其中userid='$user';
$posts\u result=mysqli\u查询($conn$posts);
$res=mysqli\u num\u行($posts\u result);
while($posts\u result\u rows=mysqli\u fetch\u assoc($posts\u result)){
$post_image=$posts_result_行['files'];
}
试试这个代码

<?php
   $images = array();
   $type = array();
   $size = array();
   if(isset($_POST['submitting'])) 
      {
      if(isset($_FILES['file_array']))
         {
            $user = $_SESSION['user_id'];
            $pname = $_POST['Product_Name'];
            $ProPrice = $_POST['Product_fee'];
            $n_array = $_FILES['files_array']['name'];
        $tmp_name_array = $_FILES['files_array']['tmp_name'];
        $type_array = $_FILES['files_array']['type'];
        $size_array = $_FILES['files_array']['size'];
        $error_array = $_FILES['files_array']['error'];
        for($i = 0; $i < count($tmp_name_array); $i++)
        {
            if(move_uploaded_file($tmp_name_array[$i], "data/profile/posted_data/".$n_array[$i]))
            {
                $images[] = $n_array[$i];
                $type[] = $type_array[$i];
                $size[] = $size_array[$i];
                echo '<div class="form_message_box">' . $n_array[$i] . '   ' . 'Uploaded Successfully' . '</div>' . '<br>';

            }
        }
  $all_images = implode(",",$images);
  $all_types = implode(",",$type);
  $all_sizes = implode(",",$size);
  $query = mysqli_query($conn, "INSERT INTO posts (userid, post_title, file, type, size, image_date) VALUES ('$user', '$pname', 'all_images', '$type', '$size', now())");
                if($query) 
                                        {
                       echo '' . '<br>';
                    }
                        else
                    {
                       echo 'failed!' . '<br>';
                                        }
    }
 }

?>
试试这段代码

<?php
   $images = array();
   $type = array();
   $size = array();
   if(isset($_POST['submitting'])) 
      {
      if(isset($_FILES['file_array']))
         {
            $user = $_SESSION['user_id'];
            $pname = $_POST['Product_Name'];
            $ProPrice = $_POST['Product_fee'];
            $n_array = $_FILES['files_array']['name'];
        $tmp_name_array = $_FILES['files_array']['tmp_name'];
        $type_array = $_FILES['files_array']['type'];
        $size_array = $_FILES['files_array']['size'];
        $error_array = $_FILES['files_array']['error'];
        for($i = 0; $i < count($tmp_name_array); $i++)
        {
            if(move_uploaded_file($tmp_name_array[$i], "data/profile/posted_data/".$n_array[$i]))
            {
                $images[] = $n_array[$i];
                $type[] = $type_array[$i];
                $size[] = $size_array[$i];
                echo '<div class="form_message_box">' . $n_array[$i] . '   ' . 'Uploaded Successfully' . '</div>' . '<br>';

            }
        }
  $all_images = implode(",",$images);
  $all_types = implode(",",$type);
  $all_sizes = implode(",",$size);
  $query = mysqli_query($conn, "INSERT INTO posts (userid, post_title, file, type, size, image_date) VALUES ('$user', '$pname', 'all_images', '$type', '$size', now())");
                if($query) 
                                        {
                       echo '' . '<br>';
                    }
                        else
                    {
                       echo 'failed!' . '<br>';
                                        }
    }
 }

?>

我认为您需要一个不同的模式:

Table 1:
- userid
- id 
- post_title

Table 2:
- id
- post_id (FK for table 1)
- file
- type
- size
- image_date
- sort (if you want to sort the images)
使用关系1:many,您可以为一个标题添加任意多个图像,同时不存在任何重复数据

这个答案的优点:

  • 更好的数据库性能和更好的模式
  • 更简单的SQL查询(如
    内部联接
    区分等)
您现在想要实现的目标的缺点(如果您继续当前的逻辑,您希望将文件名存储到单个post的单个字符串中):

  • 较慢的性能
  • 当您为一篇文章(例如
    Dadashi.jpg、3.jpg、2.jpg
    )获取数据时,您必须使用类似
    explode()
    的函数,然后在循环中运行它们,以便在
    “width=”220“height=”220“>

    我认为您需要一个不同的模式:

    Table 1:
    - userid
    - id 
    - post_title
    
    Table 2:
    - id
    - post_id (FK for table 1)
    - file
    - type
    - size
    - image_date
    - sort (if you want to sort the images)
    
    使用关系1:many,您可以为一个标题添加任意多个图像,同时不存在任何重复数据

    这个答案的优点:

    • 更好的数据库性能和更好的模式
    • 更简单的SQL查询(如
      内部联接
      区分等)
    您现在想要实现的目标的缺点(如果您继续当前的逻辑,您希望将文件名存储到单个post的单个字符串中):

    • 较慢的性能
    • 当您为一篇文章(例如
      Dadashi.jpg、3.jpg、2.jpg
      )获取数据时,您必须使用类似
      explode()
      的函数,然后在循环中运行它们,以便在
      “width=”220“height=”220“>


      为什么?最好将它们分别插入到每个图像的行中。@Logan Wayne,原因是,例如,当另一个用户希望看到一个用户发布的所有图像时,该帖子将被分成4个不同的帖子,尽管标题和其他内容相同,但图片不同。我希望所有四个图像都属于一篇文章。这就是为什么你需要一个更好的模式。如果这是我的项目,我将创建一个单独的表来存储
      post\u title
      ,并将其索引到该表中。现在你存储文件的方式是正确的。@koroush问题是你在for循环中插入了什么。答案贴在下面。通过Syed定义关系。在你的例子中,一篇文章可以有很多(4)个图片,所以用这种方式实现它。为什么?最好将它们分别插入到每个图像的行中。@Logan Wayne,原因是,例如,当另一个用户希望看到一个用户发布的所有图像时,该帖子将被分成4个不同的帖子,尽管标题和其他内容相同,但图片不同。我希望所有四个图像都属于一篇文章。这就是为什么你需要一个更好的模式。如果这是我的项目,我将创建一个单独的表来存储
      post\u title
      ,并将其索引到该表中。现在你存储文件的方式是正确的。@koroush问题是你在for循环中插入了什么。答案贴在下面。通过Syed定义关系。在你的例子中,一篇文章可以有很多(4)个图片,所以用这种方式来实现它。这就是他要求的答案。穆罕默德谢谢兄弟。它在一定程度上起作用。我现在唯一的问题是,它不会插入类型和大小信息,我得到一张空白图像。穆罕默德谢谢兄弟,你能在这里呆一会儿吗?我还有一个问题,那就是如何在页面上的这些图像上显示这些信息?以下是我当前用于显示图像的代码:请查看编辑后的post.down投票者投票的任何原因。这就是他要求的答案。穆罕默德谢谢兄弟。它在一定程度上起作用。我现在唯一的问题是,它不会插入类型和大小信息,我得到一张空白图像。穆罕默德谢谢兄弟,你能在这里呆一会儿吗?我还有一个问题,那就是如何在页面上的这些图像上显示这些信息?这是我当前用于显示图像的代码:请参阅已编辑的帖子。我已经有了不同的表,实际上帖子表是子表。@koroush我怀疑应该有一个“附件”表(每个帖子都有一个“子表”)。我同意@user2864740,没有理由阻止你为孩子准备一张儿童桌table@koroush你需要意识到你是在正确的轨道上,你只需要考虑NaguibIhab的解决方案。这将比将
      Dadashi.jpg、3.jpg、2.jpg
      存储在一行中有更好的性能(在获取图像时必须使用
      explode()
      ;当您想要添加更多图像时,必须获取第一个图像行并添加新文件的字符串,然后将其更新回该行;以及更多).@Naguib Ihab我想我会给你
      if($stmt = $con->prepare("SELECT userid, id, post_title FROM table1")){ /* FETCH ALL POST QUERY */
        $stmt->execute(); /* EXECUTE QUERY */
        $stmt->store_result(); /* NECESSARY WHEN NESTING A SECOND STATEMENT */
        $stmt->bind_result($userid,$id,$post_title); /* BIND RESULT TO THESE QUERIES */
        while($stmt->fetch()){ /* START FETCHING ALL POST RESULTS */
      
          ?>
            <tr> <!-- START ROW -->
              <td><?php echo $post_title; ?></td> <!-- FIRST COLUMN IS THE TITLE -->
              <td> <!-- SECOND COLUMN IS THE FILES ATTACHED FOR THIS POST -->
          <?php
      
          if($stmt2 = $con->prepare("SELECT post_id, file, type, size, image_date, sort FROM table2 WHERE id = ?")){ /* PREPARE THE QUERY THAT WILL FETCH ALL FILES ATTACHED FOR THE CURRENT POST */
             $stmt2->bind_param("i",$id); /* BIND THIS VARIABLE TO THE QUERY; i STANDS FOR INTEGER */
             $stmt2->execute(); /* EXECUTE QUERY */
             $stmt2->store_result(); 
             $stmt2->bind_result($postid,$file,$type,$size,$imagedate,$sort); /* BIND THE RESULTS TO THESE VARIABLES */
             while($stmt2->fetch()){ /* START FETCHING ALL FILES FROM THE CURRENT FETCHED POST */
               ?>
                 <img src="data/profile/posted_data/<?php echo $file; ?>" width="220" height="220"><br>
               <?php
             } /* END OF FETCHING FILES FOR THE CURRENT FETCHED POST */
             $stmt2->close();
          } /* END OF SECOND PREPARED STATEMENT */
          ?>
              </td> <-- END OF COLUMN -->
            </tr> <!-- END OF ROW -->
          <?php
      
        } /* END OF WHILE LOOP */
        $stmt->close();
      } /* END OF PREPARED STATEMENT */