Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка наличия скина
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Проверка наличия скина

Страниц (1): [1]
 

1. Uchenik - 03 Октября, 2011 - 09:13:34 - перейти к сообщению
Подскажите как сделать чтобы сканировалась папка со скинами и сравнивалась со скинами, которые указаны в БД, если какого-то нет, то добавить скин в БД.
Я пока сделал как-то так
PHP:
скопировать код в буфер обмена
  1.         function checkdir(){
  2.  $dir = $_SERVER['DOCUMENT_ROOT']."/templates/"; // папка которую будем сканировать
  3.  $data = opendir ($dir); // считываем содержимое папки $dir
  4.  while ($one = readdir ($data)) // собираем массив из результата сканирования
  5.  {
  6.  if($one != '.' && $one != '..') // если это содержимое дирректории
  7.  {
  8.  $files[] = $one;
  9.  }
  10.  }
  11. closedir ($data);
  12. print_r($files); //выводим массив с папками, вложенными в папку $dir.
  13.         }
2. illy - 03 Октября, 2011 - 10:26:26 - перейти к сообщению
надо в массив всё загнать и делать проверку if(!in_array()) добавить
3. LIME - 03 Октября, 2011 - 10:38:46 - перейти к сообщению
хорошо бы конечно одним запросом сделать но пока не соображу как
разве что хранимую процедуру замастырить
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  function checkdir(){
  3.  $dir = $_SERVER['DOCUMENT_ROOT']."/templates/"; // папка которую будем сканировать
  4.  $data = opendir ($dir); // считываем содержимое папки $dir
  5.  $res=mysqli_connect($server,$user,$qwerty,$DB_name)) OR die ('Не удалось подключение к БД');
  6.  while ($one = readdir ($data)) // собираем массив из результата сканирования
  7.  {
  8.  if($one != '.' && $one != '..') // если это содержимое дирректории
  9.  {
  10.         $query="SELECT skin FROM table WHERE skin=$one";
  11.         $result=mysqli_query($res,$query) OR die ('He удалось добавление');
  12.         if (mysqli_num_rows($result)==0) {
  13.                 $query="INSERT INTO table VALUES($one)";
  14.                 $result=mysqli_query($res,$query) OR die ('He удалось добавление');
  15.         }
  16.  }
  17.  }
  18.  mysqli_close($res);
  19. closedir ($data);
  20.     }
  21. ?>
  22.  
4. Uchenik - 03 Октября, 2011 - 11:08:55 - перейти к сообщению
LIME
Я не совсем понял
PHP:
скопировать код в буфер обмена
  1. if (mysqli_num_rows($result)>0) {
  2.                 $query="INSERT INTO table VALUES($one)";


И почему-то у меня не работает.
PHP:
скопировать код в буфер обмена
  1. function checkdir(){
  2.  $dir = $_SERVER['DOCUMENT_ROOT']."/templates/"; // папка которую будем сканировать
  3.  $data = opendir ($dir); // считываем содержимое папки $dir
  4.  $res = mysqli_connect('localhost','root','','Acep') OR die ('Не удалось подключение к БД');
  5.  while ($one = readdir ($data)) // собираем массив из результата сканирования
  6.  {
  7.  if($one != '.' && $one != '..') // если это содержимое дирректории
  8.  {
  9.         $query="SELECT `ID` FROM `acep_Skins` WHERE `Name`={$one}";
  10.         $result=mysqli_query($res,$query) OR die ('He удалось выполнить запрос');
  11.         if (mysqli_num_rows($result)==0) {
  12.                 $query="INSERT INTO acep_Skins VALUES($one)";
  13.                 $result=mysqli_query($res,$query) OR die ('He удалось добавление');
  14.         }
  15.  }
  16.  }
  17.  mysqli_close($res);
  18. closedir ($data);
  19.     }

Ругается что не удаётся выполнить запрос
5. LIME - 03 Октября, 2011 - 11:14:43 - перейти к сообщению
INSERT INTO acep_Skins (name) VALUES ($one)
(Добавление)
хорошо бы ктото написал как одним запросом сделать
очень интересно
6. Uchenik - 03 Октября, 2011 - 11:17:57 - перейти к сообщению
$query="SELECT `ID` FROM `acep_Skins` WHERE `Name`={$one}";
Тот же эффект, я кстати просмотрел значения $one, она не видит скины, точнее сказать она видит только первый, который дефолт, а остальные не видит.
7. Uchenik - 04 Октября, 2011 - 07:50:12 - перейти к сообщению
Я попробовал даже вот так
PHP:
скопировать код в буфер обмена
  1. function get_directory_list($path)
  2. {
  3.    if(is_dir($path)){
  4.        $dh = opendir($path);
  5.        while (false !== ($dir = readdir($dh))) {
  6.            if (is_dir($path . $dir) && $dir !== '.' && $dir !== '..') {
  7.                print "<br>".$dir;
  8.                            $q="Select ID,Name from `acep_Skins` where Name='{$dir}'";
  9.                            $r=mysql_query($q);
  10.                            $m=mysql_fetch_array($r);
  11.                            if (empty($m['Name'])){$q2="Insert Into acep_Skins (Name) values('$dir')";}
  12.                            get_directory_list($dir);
  13.            }  
  14.        }
  15.        closedir($dh);
  16.    }  
  17. }

PHP:
скопировать код в буфер обмена
  1. <?$path = $_SERVER['DOCUMENT_ROOT']."/templates/";
  2. get_directory_list($path);?>

Результата никакого, в каталоге лежат 3 скина, а в БД прописан только 1, тот который по дефолту.

 

Powered by ExBB FM 1.0 RC1