检查目录中的文件名是否作为数据库中的值存在

时间:2016-01-14 04:33:20

标签: php mysql

我在目录中有一堆.png,其名称与数据库中的值相同。我想检查数据库中是否存在文件名(不包含' .png')。

目前我正在使用此代码显示数据库中的标记

<?php
  $result = mysql_query("SELECT `country` FROM `countries`");
  while($row = mysql_fetch_array($result)) {;
?>
  <img src="images/countries/<?php echo $row['country']?>.png" />
<?php }; ?>

由于该列中只有3个国家/地区,因此显示为: enter image description here

我想显示数据库中没有的标志,但是然后是灰度。

我想到了这段代码来获取目录中的所有标志

<?php
  $directory = "images/countries/";
  $images = glob($directory . "*.png");

  foreach($images as $image)
  {
    echo '<image src="'.$image.'" class="flaginactive"/>'; //show all flags as inactive
    echo basename($image, '.png'); //get file name with .png
  }
?>

但不知何故,我陷入困境,无法在if声明中得到它们。

有人可以告诉我如何以最佳方式解决这个问题。我知道我正在使用旧的mySQL函数。

3 个答案:

答案 0 :(得分:2)

有很多方法可以实现这一目标。我将介绍一个。

首先将数据库中的名称加载到数组中。然后检查数组中目录的枚举文件名是否存在,以确定元素的类。

如果在数据库中找不到目录中的文件,则元素显示为非活动状态。

<?php

  $directory = "images/countries/";

  //Lets save all the file names in the database to an array 
  $dbImages = array();

  $result = mysql_query("SELECT `country` FROM `countries`");
  while($row = mysql_fetch_array($result)) {

     array_push($dbImages, $directory . $row['country'] . '.png'); 

  }



  //Lets go through all the files in the directory and see if they are in the $dbImages array    
  $images = glob($directory . "*.png");

  foreach($images as $image)
  {
    //Decide the class attribute based on the existence of the file name in $dbImages array

    if (in_array($image, $dbImages))
       $classAttribute = '';
    else
       $classAttribute = 'class="flaginactive"' 

    echo '<image src="'.$image.'" ' . $classAttribute . ' />'; 

  }


?>

答案 1 :(得分:-1)

你可以像这样使用file_exists()函数

<?php
         $directory = "images/countries/";
         $images = glob($directory . "*.png");

       foreach($images as $image)
       {
          if(file_exists($_SERVER['DOCUMENT_ROOT'] . $directory . $image . '.png')) //Files exists goes here
         {
            echo '<image src="'.$image.'" class="flaginactive"/>';            //show all flags as inactive
            echo basename($image, '.png'); //get file name with .png
           }
       }
?>

答案 2 :(得分:-1)

循环遍历数据库中的标志并将它们存储在数组中。然后在循环遍历目录中的标志时,检查文件是否在数组中。 (假设目录中的文件在数据库中具有相同的名称,对于您的情况似乎并非如此。我的答案需要进行一些调整。)

<?php
$result = mysql_query("SELECT `country` FROM `countries`");

$selectedFlags = array();

while($row = mysql_fetch_array($result)) {
  $selectedFlags[] = $row['country'];
}

$directory = "images/countries/";
$images = glob($directory . "*.png");

foreach($images as $image) {
  echo '<image src="'.$image . '"';
  if (!in_array($image, $selectedFlags))
    echo ' class="flaginactive"';
  echo ' />';
  // not sure why the next line is here since your sample image didn't have it but I'll leave it in
  echo basename($image, '.png'); //get file name with .png
}
?>

P.S。在大括号(;)之后你不需要用分号({