繁体   English   中英

PHP从目录显示与数据库中选定ID有关的图像

[英]PHP Show images from directory that pertains to a selected ID from DB

我将车辆信息存储在数据库中,其中包括图像文件名。 用户可以选择一次上传多个文件,这些文件名存储在一行中。 例如,我上载了一辆新车,一辆福特车,并且有三张该车的图像。 当我点击保存时,图像将保存在预定义目录中,文件名将存储在数据库中。 DB中的文件名用*分隔。

这是将信息保存到数据库的代码:

if (isset($_POST['submit'])) {

//Get form data
$stock_number = $_POST['stock_number'];
$vin_number = $_POST['vin_number'];
$make = $_POST['make'];
$model = $_POST['model'];
$colour = $_POST['colour'];
$milage = $_POST['milage'];
$year = $_POST['year'];
$price = $_POST['price'];
$description = $_POST['description'];

extract($_POST);

if (isset($_FILES['images']['name'])) {
    $file_name_all = '';

    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $tmpFilePath = $_FILES['images']['tmp_name'][$i];

        if ($tmpFilePath != '') {
            $path = 'uploaded_images/';
            $name = $_FILES['images']['name'][$i];
            $size = $_FILES['images']['size'][$i];

            list($txt, $ext) = explode('.', $name);
            $file = time().substr(str_replace(' ', '_', $txt), 0);
            $info = pathinfo($file);
            $filename = $file . '.' . $ext;

            if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $path.$filename)) {
                $file_name_all .= $filename . '*';
            }
        }

        $filepath = rtrim($file_name_all, '*');
    }

        $sql = "
               INSERT INTO vehicles
               (stock_number, vin_number, make, model, colour, milage, year, price, description, images_path)
               VALUES
               ('$stock_number', '$vin_number', '$make', '$model', '$colour', '$milage', '$year', '$price', '$description', '$filepath')
            ";
        $result = mysqli_query($conn, $sql);


} else {
    $filepath = '';
}

if ($result) {
    header('Location: manage_vehicles.php');
}

}

一切都很好。

问题在于:当我从数据库中选择要显示的信息时,我需要显示仅与该记录有关的图像,而与之无关。 尽管显示了所选记录的正确信息,它仍显示所有图像。 例如,如果我选择之前添加的福特,它将显示正确的信息,但显示所有记录的所有图像。

这是用于选择信息(特别是图像)的代码:

$id = $_GET['id'];

$sql = "SELECT * FROM vehicles WHERE id='$id'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {

        $row['make'];

        $dir = "uploaded_images/";

        $file = $row['images_path'];

        if ($opendir = opendir($dir)) {
           while (($file = readdir($opendir)) !== false) {
               if ($file != '.' && $file != '..') {
                  echo "<img class='images' src='$dir/$file'>";
              }
          }
       }
  }
}

您正在覆盖$ file变量。 试试下面的代码

$id = $_GET['id'];

$sql = "SELECT * FROM vehicles WHERE id='$id'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {

        $row['make'];
        $dir = "uploaded_images/";

        $filePath= $row['images_path'];
        $fileArray = explode("*",$filePath); //split the filepath
        foreach($fileArray as $file)
        {
          if(file_exists($dir.$file)) //check if file exist
          {
            echo "<img class='images' src='$dir/$file'>";
          }
        }
     }
  }

PS该代码未经测试!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM