проблема с while и два sql запроса

unhappy

Новичок
проблема с while и два sql запроса

Здравствуйте, помогите пожалуйста мне.Я делаю фотоальбом и столкнулся с такой проблемой: есть бд(mysql) , есть таблица, в этой таблице есть поле с названием картинок, также есть папка с картинками. Мне нужно, чтобы скрипт просмотрел папку с картинками и сравнил названия этих картинок с названиями из бд. Вот что у меня получилось:
PHP:
$dir = opendir('images/');
 while($catalog2=mysql_fetch_array($id_catalog_query) && ($e=readdir($dir)!==false)){
  if($e=='.' || $e=='..') {continue;}
if($catalog2['name'] == $e){
echo $catalog2['name'].' - '.$e.'<BR>';}}
Почему так не работает?

И еще:
почему не считает общее кол-во строк в таблице и не выводится название каталога(сам запрос находится не в цикле)?
Можно ли эти два запроса записать как один?
PHP:
$id_catalog_query=mysql_query('SELECT * FROM my_photo WHERE id_catalog='.$id_cat.'');
$cattitle=mysql_query('SELECT count(my_photo.name) AS cn, catalogs.catalog_name FROM catalogs, my_photo WHERE id_catalog='.$id_cat.'');
$cattitleShow=mysql_fetch_array($cattitle); 
echo '<center>'.$cattitleShow['catalog_name'].'<sup>'.$cattitleShow['cn'].'</sup>
Спасибо.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
phpfaq.ru/debug/

чтобы скрипт просмотрел папку с картинками и сравнил названия этих картинок с названиями из бд
А зачем каждый раз перечитывать директорию?
в цикле...

-~{}~ 27.07.07 00:05:

почему не считает общее кол-во строк в таблице и не выводится название каталога(сам запрос находится не в цикле)?
Для COUNT нужен GROUP BY

-~{}~ 27.07.07 00:07:

http://phpfaq.ru/all#start_newbie

-~{}~ 27.07.07 00:09:

Почему так не работает?
Скрипт постоянно в цикле нарывается на
Скрипт
while($catalog2=mysql_fetch_array($id_catalog_query) && ($e=readdir($dir)!==false)){
if($e=='.' || $e=='..') {continue;}
 

phprus

Moderator
Команда форума
unhappy
while($catalog2=mysql_fetch_array($id_catalog_query) && ($e=readdir($dir)!==false))
$catalog2=mysql_fetch_array($id_catalog_query) Это выражение всегда истинно, по этому его надо заменить на: ($catalog2=mysql_fetch_array($id_catalog_query) ) !== false

Mr_Max
Скрипт постоянно в цикле нарывается на
if($e=='.' || $e=='..') {continue;}
Почему постоянно? Только когда $e равна точке или двум точкам.
 

Фанат

oncle terrible
Команда форума
unhappy
у тебя очень смешной способ перебора каталога.
при нем файлы в каталоге обязаны лежать в том же порядке, в каком они лежат в базе данных.
а это совсем не обязательно.
а при любом смещении скрипт у тебя начнет выдавать что угодно, но тольконе то, что нужно.

если тебе надо передать два множества, то это только двумя циклами.
поэтому сначала получаешь все файлы в массив.
потом, внутри цикла баоты с базой, перебираешь этот массив до конца. каждый раз.
только тогда у тебя будут точные результаты.
 

Trianon

Новичок
Автор оригинала: unhappy
Мне нужно, чтобы скрипт просмотрел папку с картинками и сравнил названия этих картинок с названиями из бд.
По-моему, это оправдано лишь в том случае, если скрипт имеет служебную цель - средство администратора галереи для поиска и устранения несоответствий таблицы и каталога.

Для обычного скрипта достаточно просто вывести содержимое таблицы.
Если так охота отслеживать инконсистентности - можно сформировать динамические ссылки фотографий на элементы таблицы, проверять существование файла перед редиректом на фотографию (или при неудаче - на удаление записи в таблице).
 

unhappy

Новичок
Фaнат, сделал вроде так как ты сказал, но не работает =(
PHP:
$c1=0;
$dir = opendir('images/');
$xfiles=array();
while(($e=readdir($dir))!==false){
if($e=='.' || $e=='..') {continue;}
$xfiles[]=$e;
}
while($catalog2=mysql_fetch_array($id_catalog_query)){
if($catalog2['name'] != $xfiles[$c1]){continue;}
else{
echo $catalog2['name'].' - '.$xfiles[$c1].'<BR>';
$c1++;
}}
 

Фанат

oncle terrible
Команда форума
Mr_Max
сто раз говорил.
НЕЛЬЗЯ давать встроенные функции людям, которые не могут реализовать их функционал алгоритмическими средствами.
Нельзя давать калькулятор человеку, который не выучил таблицу умножения

-~{}~ 27.07.07 23:00:

unhappy
НИЧНЕГО похожего на то, что я сказал, у тебя нет.
внутри цикла работы с базой перебираешь этот массив до конца. каждый раз
 

unhappy

Новичок
Мне нужно открыть папку и сверить названия из бд и названия картинок в папке, если они совподают, сделать превьюшку...у меня проблема в том, что ПЕРЕМЕННОЙ $IMAGE не передается из цикла значение $v, как сделать, чтобы оно передовалось? Жду ответа как соловей лета :). Спасибо.
PHP:
if($id_catalog_query){

   if (isset($IMAGE))

   {

   $filename_img = "images/$IMAGE";

   $big_img = ImageCreateFromJPEG($filename_img);

   $small_img = ImageCreatetruecolor(101,101);

   $sizee = GetImageSize($filename_img);

   imageCreateTrueColor($sizee[0],$sizee[1]);

   ImageCopyResized($small_img, $big_img, 0, 0, 0, 0, 101, 101, $sizee[0], $sizee[1]);

   ImageJPEG($small_img);

   }

 else

 {

$dir = opendir('images/');

$xfiles=array();

while(($e=readdir($dir))!==false){

if($e=='.' || $e=='..') {continue;}

$xfiles[]=$e;

}

while($catalog2=mysql_fetch_array($id_catalog_query)){

foreach($xfiles as $k=>$v){

if($catalog2['name']==$v){

echo 'img src=admin.php?IMAGE='.$v.' ';

}

}

}

}}}
 

Фанат

oncle terrible
Команда форума
какого хрена здесь делает блок if($id_catalog_query){}
какое он имеет отношение к вопросу "ПЕРЕМЕННОЙ $IMAGE не передается из цикла значение $v"?!

и какой вообще смысл ты вкладываешь в это "переменной не передается из цикла значение?"
 
Сверху