【问题标题】:How to retrieve imploded images path in database to view in code igniter如何检索数据库中的内爆图像路径以在 codeigniter 中查看
【发布时间】:2023-04-06 16:00:01
【问题描述】:

我正在尝试将多个图像路径保存在数据库中,并将图像上传到 root 的上传/图像 [目录]。我已经完成了它和它的工作。图像名称保存在数据库中,并且正在上传图像文件。我只是通过内爆保存了图像名称。现在我需要在视图中分解该图像。我怎样才能做到这一点?我已经在视图中尝试了以下代码,但它不起作用。

      <?php foreach ($products as $p): ?>
      <tr>
          <td><?php echo $p['id']; ?></td>
          <td><?php echo $p['product_name']; ?></td>
          <td><?php echo $p['product_price']; ?></td>
          <td><?php echo $p['produce_description']; ?></td>
          <!-- <td><?php echo $p['picture']; ?> </td> -->
          <td><img src="<?php echo base_url('uploads/images/').explode('|',$p['picture']);?>" /> </td>
          <td>
              <a href="<?php echo site_url('products/view/'.$p['id']); ?>">View</a> |
              <a href="<?php echo site_url('products/edit/'.$p['id']); ?>">Edit</a> |
              <a href="<?php echo site_url('products/delete/'.$p['id']); ?>" onClick="return confirm('Are you sure you want to delete?')">Delete</a>
          </td>
      </tr>

它抛出这个错误:

    A PHP Error was encountered

    Severity: Notice

    Message: Array to string conversion

    Filename: views/dashboard.php

     Line Number: 47

这是我的第 47 行:

     <td><img src="<?php echo base_url('uploads/images/').explode('|',$p['picture']);?>" /> </td>

如果我的图片上传功能出错,这是我的代码:

    public function set_product($id=0)
     {
    #code
    // if($this->input->post('userSubmit')){
      $picture=array();
      $count=count($_FILES['picture']['name']);
      //Check whether user upload picture
      if(!empty($_FILES['picture']['name'])){

          foreach($_FILES as $value)
          {
            for($s=0; $s<=$count-1; $s++)
            {
              $_FILES['picture']['name']=$value['name'][$s];
    $_FILES['picture']['type']    = $value['type'][$s];
    $_FILES['picture']['tmp_name'] = $value['tmp_name'][$s];
    $_FILES['picture']['error']       = $value['error'][$s];
    $_FILES['picture']['size']    = $value['size'][$s];

    $config['upload_path'] = 'uploads/images/';
    $config['allowed_types'] = 'jpg|jpeg|png|gif';
    $config['file_name'] = $_FILES['picture']['name'];

    //Load upload library and initialize configuration
    $this->load->library('upload',$config);
    $this->upload->initialize($config);
          // print_r($value['name'][$s]);exit;
          if($this->upload->do_upload('picture')){
              $uploadData = $this->upload->data();
              $picture[] = $uploadData['file_name'];
          }
          else{
              $picture = '';
          }
        }
      }
      }//end of first if

      else{
          $picture = '';
      }

  $data=array(
    'product_name'=>$this->input->post('product_name'),
    'produce_description'=>$this->input->post('produce_description'),
    'product_price'=>$this->input->post('product_price'),
    'picture'=>implode('|',$picture)
  );
  if ($id==0)
  {
    return $this->db->insert('products',$data);
  }
  else {
    $this->db->where('id',$id);
    return $this->db->update('products',$data);
  }

} 这是我获取数据的模型函数:

      public function get_product()
    {
   #code
   $query=$this->db->get('products');
    return $query->result_array();
    }

我们非常感谢任何形式的帮助。谢谢。

【问题讨论】:

  • 你介意将dashboard.php与其中的特定行共享
  • explode('|',$p['picture']) 将创建一个数组,您正在尝试使用 echo 打印一个数组 ...
  • @Malik Mudassar 我在这里提供的视图是dashboard.php
  • @MalikMudassar 那我该怎么办,你能指导我吗?
  • 展开名称,将它们保存在一个数组中,并在显示产品时使用您想要的索引

标签: codeigniter explode implode


【解决方案1】:

你应该试试这样的

<?php foreach ($products as $p): ?>
  <?php 
      // explode images into a variable/array
      $images=explode('|',$p['picture']);
   ?>
  <tr>
      <td><?php echo $p['id']; ?></td>
      <td><?php echo $p['product_name']; ?></td>
      <td><?php echo $p['product_price']; ?></td>
      <td><?php echo $p['produce_description']; ?></td>
      <!-- <td><?php echo $p['picture']; ?> </td> -->
      <td><img src="<?php echo base_url('uploads/images/').$images[0];?>" /> </td>
      <td>
          <a href="<?php echo site_url('products/view/'.$p['id']); ?>">View</a> |
          <a href="<?php echo site_url('products/edit/'.$p['id']); ?>">Edit</a> |
          <a href="<?php echo site_url('products/delete/'.$p['id']); ?>" onClick="return confirm('Are you sure you want to delete?')">Delete</a>
      </td>
  </tr>

编辑

我会给你一个来自this link生产代码的例子

<div class="aa-properties-details-img" style="margin-bottom: 25px;">
<?php
    $property[0]['images']=explode(',',$property[0]['img']);
    if(count($property[0]['images'])>0){
       for($i=0;$i<count($property[0]['images']);$i++)
       { ?>
        <img src="<?php echo  base_url().'img/'.$property[0]['images'][$i]?>" alt="img">
       <?php }
       }else{
       ?>
        <img src="<?php echo base_url().'img/no-image.jpg'?>" alt="img">
       <?php
     }
?>
</div>

【讨论】:

  • 让我试一试。
  • 是的,我做到了,它奏效了。但我试图上传多张图片来展示它们。 $images[0] 只返回一个图像人。我怎样才能得到所有这些?
  • 我有一个从仪表板链接的显示页面。在显示页面中,我希望显示所有产品图片。所以我做了这样的事情: " />
  • 在执行此操作时,它表示出乎意料的 foreach。我需要如何执行此操作?
  • 如果要显示所有图像,请使用一些滑块并循环显示图像
【解决方案2】:

试试这个:

<?php foreach ($products as $p): ?>
  <tr>
      <td><?php echo $p['id']; ?></td>
      <td><?php echo $p['product_name']; ?></td>
      <td><?php echo $p['product_price']; ?></td>
      <td><?php echo $p['produce_description']; ?></td>
      <td>
       <?php  $images=explode('|',$p['picture']); 
          foreach($images as $image) {
       ?>
      <img src="<?php echo base_url('uploads/images/').$image; ?>" width="50" height="50" />
      <?php } ?>
      </td>
      <td>
          <a href="<?php echo site_url('products/view/'.$p['id']); ?>">View</a> |
          <a href="<?php echo site_url('products/edit/'.$p['id']); ?>">Edit</a> |
          <a href="<?php echo site_url('products/delete/'.$p['id']); ?>" onClick="return confirm('Are you sure you want to delete?')">Delete</a>
      </td>
  </tr>

【讨论】:

  • 或者如果你想制作更多的列,你可以使用 Gaurav 的这段代码
  • 但你必须限制没有。的图像。你想显示多少。
  • 好的,我明白了。但是我遇到了一个问题。假设我在编辑帖子时需要删除任何一张图片。那么我如何在数据库中管理这个内爆图像名称?此外,图像不会从根文件夹 /uploads/images/ 中删除。当图像或整个帖子被删除时,图像也应该被删除,对吗?伙计们怎么能这样做?
  • 您必须在删除图像后重新提交所有图像名称。在代码中,您在删除之前和删除之后都获取了图像数组的差异。如果出现差异,那么您可以从图像文件夹中删除该图像。之后,您通过 impoded 保存该图像数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多