работа с картинками (закачка, удаление, проверка)

ivan52

d-i-d grafix
работа с картинками (закачка, удаление, проверка)

есть проблема
сделал аплоад файлов (картинки в директории храняться) и добавление линков на них в базу

и пытаюсь сделать проверку - для возможности удаления файлов (если ссылка на картинку есть в базе, то удалить невозможно, если нет - то возможно!)

дело в том что при обращении к базе - если линк в базе находит, то все ок! если же РЕЗУЛЬТ из базы пустой - то ничего не делает?!

и также если картинка уже есть в директории - проверка на совпадение имен (тоже не получается сделать)
помогите - где почитать или на что посмотреть
 

ivan52

d-i-d grafix
в принципе да!

Originally posted by Dmitry22
Объясни подробнее:

кто и что не делает?

ты спрашиваешь как сделать проверку на наличие данной записи в базе? или что?
сначала я загружаю все картинки в <select>
где человек может выбрать нужную картинку, просмотреть превью и потом произвести действие над картинкой

все картинки хранятся в директории
а ссылки на них в базе - и потом каждая картинка привязывается к нужному юзеру значению

задача1 - чтобы человек управлял картинками
и если есть запись в базе о какой-либо картинке, то при попытке удалить саму картинку, должно вываливаться предупреждение, что есть запись в базе и удалить не могу - а если все чисто, то спокойно удалять

задача2 - проверять название картики при закачке и если такое уже есть в диреткории - писать об этом и потом если надо отменять закачку или писать поверх!

вот что делаю при проверке на удаление картинки
при этом если запись в базе есть все ок, если нет - пустота!

if(isset($img_del))
{

$result = mysql_db_query("$db","select * from $tablename where icon = '$imgsel'");

if ($result){ echo "Не могу удалить! мешает база";
} else {unlink ($file)}

unset ($img_del);
}
 

Dmitry22

Guest
$result = mysql_db_query("$db","select * from $tablename where icon = '$imgsel'");
$num=mysql_num_rows($result);//вернет кол-во строк соответствующих запросу

if ($num<1)
{
unlink(…);
} else
{
echo ‘Не могу удалить…’;
};

Проверить наличие файла в директории можно с помощью функции file_exists(); …подбронее смотри в мане
Имя файла при закачке можно узнать из массива $_FILES … подбробнее в мане.

Хотя я советовал бы присваивать каждому файлу свой уникальный идентификатор и сохранять его под уникальным именем. Так будет проще и тебе и юзерам.
 

lucas

Guest
Dmitry22

Ну вы, батенька, и пишете.

PHP:
$result = mysql_db_query("$db","select * from $tablename where icon = '$imgsel'");
$num=mysql_num_rows($result);//вернет кол-во строк соответствующих запросу
=>

PHP:
mysql_select_db($db) ;
$num = array_shift(mysql_fetch_row(mysql_query('SELECT COUNT(*) FROM ' . $tablename . ' WHERE icon = ' . intval($imgsel)))) ;
1.
Замечание: Функция mysql_db_query() устарела с выходом PHP 4.0.6. Не используйте её. Используйте комбинацию из mysql_select_db() м mysql_query().
(c) manual

2. Заботимся о SQL-injection.

3. Никогда не используем mysql_num_rows() для простого подсчета строк выборки.
 

Frol

Новичок
Dmitry22
после того, как вы офигенно лажанулись в своем ответе -- слово "почему" звучит странно.
в случае с mysql_num_rows мы просим у MySQL _все_ записи и потом только их количество.
в случае с запросом с COUNT(*) мы просим MySQL вернуть _только_ количество строк.
 

Frol

Новичок
кстати, у ivan52 еще "лучше" вариант :)
картинка будет удалена только при ошибке
 

Lav

Guest
Автор оригинала: Frol
в случае с mysql_num_rows мы просим у MySQL _все_ записи и потом только их количество.
в случае с запросом с COUNT(*) мы просим MySQL вернуть _только_ количество строк.
В случае, если мы всё равно будем работать со всеми записями, а их количество нам нужно для каких-нибудь посторонних целей (например, банального вывода), использование mysql_num_rows становится не только оправдано, но и выгодно.
 
Сверху