数据库的图像输出

Posted

技术标签:

【中文标题】数据库的图像输出【英文标题】:Image output from database 【发布时间】:2021-09-27 11:24:47 【问题描述】:

我学习php,尝试为自己开发一个小博客。我有一个问题。当我从数据库中提取信息时,除了图片之外的所有内容都显示出来了。在代码中,我尝试将图片保存在 img 文件夹中,数据库中有一个补充,但没有保存到文件夹中。这可能是没有图像输出的原因。 我寻求帮助。对不起我的英语不好。谢谢!

//添加帖子

<?php
session_start();
require_once '../DB.php';


if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['button-post']))  
$error ='';



    if (!empty($_FILES['img']['name']))
        $img = time() . "_" . $_FILES['img']['name'];
        $fileTmpName = $_FILES['img']['tmp_name'];
        $fileType = $_FILES['img']['type'];
        $destination = "../img/" . $img;


        if (strpos($fileType, 'image') === false) 
            $error = "The uploaded file is not an image!!";
        else
            $result = move_uploaded_file($fileTmpName, $destination);

            if ($result)
                 $_POST['img'] =$img ;
                 // tt( $img);
            else
                $error = " Error uploading image to server";
            
        
    else
        $error= "Error getting picture";
    

  $title = trim( $_POST['title']);
  $texton = trim( $_POST['texton']);


    if (strlen($title) <= 2 ) 
      $error = '';
    
    elseif (strlen($texton)<= 5 )  
      $error = '';
    

      else 
    $sql = "INSERT INTO `posts`(`title`, `texton`, `img`) VALUES(?,?,?)";

    $query = $connect->prepare($sql);

    $query->execute([$title,$texton,$img]);



 

//索引

<?php
                     require_once 'DB.php';
                     $sql = "SELECT * FROM `posts`  ORDER BY`id`DESC";
                     $query = $connect->query($sql);
                 

     while ($row = $query->fetch(PDO::FETCH_OBJ)):
    
        ?>
                        <div class="titlePost col-12 col-md-9">
                           <h2>
                          <a href="#"><?=$row->title;?></a>
                           </h2>
                           <div class="imgPost col-12 col-md-4">
                             <img src="/img .<?= $row->img?>;" >
                           </div>
                            <p> <?=$row->texton;?></p>
                        </div>
        
        <?php  endwhile; ?>
    
    
    
    
          <form action="addPost_form.php" method="post" class="row justify-content-center">
                <h2>Add Post</h2>
                <div class="mb-3 col-12 col-md-4 err">
                    <p><?=$error?></p>
                </div>
        
                <div class="w-100"></div>
                <div class="mb-3 col-12 col-md-6">
                  <label for="title">Title</label>
                  <input type="text" name="title" id="title" class="form-control">
                </div>
        
                <div class="w-100"></div>
                <div class="mb-3 col-12 col-md-8">
                  <label for="texton">Сontent</label>
                  <textarea type="text" name="texton" id="texton" class="form-control" ></textarea>
                </div>
        
                <div class="w-100"></div>
                <div class="mb-3 col-12 col-md-4">
                      <input name="img" enctype='multipart/form-data' type="file" class="form-control" id="img">
                  </div>
        
                <div class="w-100"></div>
                <div class="mb-3 col-12 col-md-4">
        
            </div>
                <div class="w-100"></div>
                <div class="mb-3 col-12 col-md-4">
                    <button type="submit" class="btn btn-secondary" name="button-post">Add</button>
        
                </div>
            </form>

【问题讨论】:

你能同时显示你上传图片的表格吗 您尝试过什么来解决问题?你被困在哪里了?数据库中是否存储了正确的数据?标记是否正确生成?只是缺少文件吗? 如果您的图片没有保存在文件夹中,您很可能忘记在表单标签中传递 enctype="mutlipart/form-data" 参数 @NicoHaase 坚持图像未显示在屏幕上的事实。文件传输本身是,我用调试功能检查了它。文件名及其扩展名保存在数据库中。但是输出中没有图像。我将添加一个填充表单 您已将上传的文件移至 '../img/' . $imgName,但随后您的 html 中仅输出了 &lt;img src="&lt;?= $row-&gt;imgName?&gt;;"。那么../img/ 部分去哪儿了? 【参考方案1】:

你不需要使用 ../img;而不是只使用 /img,它会指出你的根目录,然后是 img 文件夹。另一件事确保 $imgName 具有图像扩展名。如果没有,则将图像扩展名与它连接起来。如果您将图像扩展名存储在数据库中以成功读取图像,那将是最好的。如果 image src 直接不打印图片名称和扩展名,可以将其单独存储起来,例如$image = $imgName.'.'.$imgExt,这样就可以了。

【讨论】:

好的,我稍微更改了代码,添加了检查,并在每个阶段使用调试功能检查了所有内容。图像一直到 $row->img。 Аnd 图像的名称及其扩展名显示在此处。有可能整个事情都在进行中。但路径绝对是正确的。选择不多 你应该在 $row->img 之前使用 / 但你正在使用 . 是的,当然。像这样 img;?>" >。我很抱歉,我在这里错过了这一刻,但是,问题仍然存在。这是某种魔法 它正在工作。非常感谢你。显然我没有足够的练习。 $row->img 是否返回带有图像扩展名。您能否检查图像 src 路径,检查图像路径是否正确以及图像是否存在于您的预期文件夹中。在浏览器的新标签页中打开路径,点击鼠标右键查看图片是否正常工作。

以上是关于数据库的图像输出的主要内容,如果未能解决你的问题,请参考以下文章

用VC++ 怎样把图像输出保存成jepg或bmp图像

将多字节数组图像数据合并为一个字节数组数据,并将WriteAllBytes合并为单个图像输出

不同的输入图像大小/分辨率如何影响语义图像分割网络的输出质量?

在 CodeIgniter 中裁剪图像以输出 FPDF

如何在数据库中的所有图像中建模预测?

使用 CNN 算法计算未标记图像的输出