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 - 27 Августа, 2011 - 12:29:11 - перейти к сообщению
Хочу сделать чтобы при старте сайта проверялось, все ли файлы на месте. Решил реализовать это примерно так:
1. Пробегаемся по таблице, считаем сколько строк
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM Structure");  $num_rows = mysql_num_rows($result); //получили колличество записей в таблице

2. Выводим полученные данные
PHP:
скопировать код в буфер обмена
  1. $myrow = mysql_fetch_array($result);
  2. $x=0; //задали старт счетчика
  3. do {echo "".$myrow['Address']."".$myrow['Filename'].".".$myrow['Type_of_File']."<br>";}
  4. while ($x++<$num_rows);

в результате выводится что-то типа

3. Проверяем, существует ли файл, если какой-то файл не найден, рядом с его адресом ставим NotFound
PHP:
скопировать код в буфер обмена
  1. if(file_exists(как сюда придумать переменную)==false) echo "File notfound";

Но. возникло две проблемы:
1. Выводится только адрес и имя первого найденного файла, ровно столько раз сколько записей в таблице (я помню что это как-то очень легко решается, но не могу вспомнить как)
2. Не знаю как и куда запихнуть третий пункт, чтобы он работал.
2. vlom - 27 Августа, 2011 - 14:36:23 - перейти к сообщению
примерно можно так реализовать
PHP:
скопировать код в буфер обмена
  1. while($myrow = mysql_fetch_array($result)){
  2.     echo .$myrow['Address'].$myrow['Filename'].".".$myrow['Type_of_File']."<br>";
  3.     //проверяем существование файла
  4.     $fileExists = file_exists($myrow['Address'].$myrow['Filename'].$myrow['Type_of_File']) ? 'File exists' : 'File notfound';
  5.     echo $fileExists;
  6. }


примерно таким макаром
но в бд лучше не разбивать путь до файла на три части
целесообразнее будет хранить полностью путь до файла
ну или хотя бы разбить на две части, имя файла и путь до папки с файлом
а при необходимости прибегнуть к регулярным выражениям
3. Uchenik - 31 Августа, 2011 - 05:27:52 - перейти к сообщению
Спасибо!
Только теперь возникла парочка других неприятностей:
1. Скрипт в действительности не проверяет существование файлов, потому-что результат первой проверки висит в кэше, хотя если например в БД изменить адрес файла, то скрипт его тоже меняет при выводе, но всё-равно пишет что файл существует.
2. файл с id=1 вообще не проверяется на существование, т.е. фактически отсчёт начинается с 2 id
А вот так :
PHP:
скопировать код в буфер обмена
  1. <?
  2. $notfound='<font color=red>File notfound: ';
  3. $exist='<font color=green>File exist: ';
  4. $result = mysql_query("SELECT * FROM Structure");  $num_rows = mysql_num_rows($result); //получили колличество записей в таблице
  5. $myrow = mysql_fetch_array($result);
  6. while($myrow = mysql_fetch_array($result)){
  7.     //проверяем существование файла
  8.     $fileExists = file_exists($myrow['Address'].$myrow['Filename'].$myrow['Type_of_File']) ? $notfound : $exist ;
  9.     if ($fileExists==$notfound){
  10.     echo "".$myrow['Address'].$myrow['Filename'].".".$myrow['Type_of_File']."<br>";}
  11. }
  12. ?>

Вообще ничего не выводит

 

Powered by ExBB FM 1.0 RC1