Код (Text): if(isset($_GET['delfoto'])) {$result = mysql_query ("DELETE FROM upload_file WHERE id_file_name='$_GET[delfoto]'"); header("location: test.php?foto=view"); exit;} Этот запрос удаляет строчку с именем фото из бд.Подскажите как прикрутить сюда удаление файла с таким же именем из папки.
Что-то такое состряпал,но думаю,что это х...ня .... не пашет (( Код (Text): $result= mysql_query("SELECT file_name FROM upload_file ");while($file_db = mysql_fetch_array($result)) $file=scandir($fotodir); if ($file!=$file_db) unlink("$fotodir/$file");
ну как бэ это приведет к тому что вся база будет сравниваться со всей ФС после каждого удаления. накладно. плюс вы получаете что есть в базе и смотрите чего нет в ФС. вы так никогда ничего не удалите потому что у вас файл есть а записи для него нет. кто виноват и что делать? сначала получаете имя файла, если оно хранится в бд, потом удаляете его физически и в случае удачи - удаляете из бд.
А зачем тут scandir? Она возвращает список имен файлов. Вызывать её в цикле вообще нет смысла. Раз есть известное имя файла, то можно просто вызывать unlink.
Спасибо за подсказку igordata,Ganzal,YSandro.Нашел решение. Код (Text): if(isset($_GET['delfoto'])) {$del= mysql_query("SELECT file_name FROM upload_file WHERE id_file_name='$_GET[delfoto]'"); $myrow = mysql_fetch_array ($del);unlink("$fotodir/$myrow[file_name]"); $result = mysql_query ("DELETE FROM upload_file WHERE id_file_name='$_GET[delfoto]'"); header("location: test.php?foto=view"); exit;}
В скрипте стоит Код (Text): foreach ($_POST as $key => $value) { $_POST[$key] = mysql_real_escape_string($value);} //This stops SQL Injection in POST vars foreach ($_GET as $key => $value) { $_GET[$key] = mysql_real_escape_string($value); } //This stops SQL Injection in GET vars и плюс файлы переименовываются.
nixx, скажи, пожалуйста, с чего это ты вдруг в цикле все пост и гет запросы очищаешь? Добавлено спустя 26 секунд: Просто я уже в 5 раз такое встречаю, не понимаю зачем все данные эскейпить, половина из них же могут даже не участвовать в общении с базой...
Я не о том спрашиваю... Но раз речь зашла о мануале, то там указано что данное расширение устарело. Добавлено спустя 19 секунд: Я спрашиваю зачем цикл? Фильтруй то что будет использоваться базой... Такой цикл я встречал неоднократно, вот и возникло ощущение что все вы читали один и тот же мануал, но какой вот что интересно...
В мануале на php.net про mysql_real_escape_string не нашел [deprecated] ??? С другой стороны воткнул цикл и спи спокойно )) Если не нравится цикл ,вот есть нейтральный вариант Код (Text): function safe($value){ return mysql_real_escape_string($value); } $name = safe($_POST["name"]); Для id например достаточно Код (Text): $id=isset($_GET($id)) ? intval(Sid) : ;
Не нашел слово deprecated??? Добавлено спустя 4 минуты 31 секунду: Для этого надо читать мануал на английском языке http://php[dot]net/manual/en/function.mysql-real-escape-string.php Добавлено спустя 17 секунд: Лишние итерации, не хороший стиль, не люблю такой код.