Что-то я не пойму, не работает проверка т.е файлы которые загружаются формируют md5 хэш, и этот хэш записывается в mysql в таблицу (поле) path, делаю проверку, но по моему криво, подскажите как правильно сделать? Нужно что бы, если в базе такой хэш есть, то не загружать файл. PHP: $file = $_FILES['uploadfile']['tmp_name']; $filename = $_FILES['uploadfile']['name']; $my_md5 = md5_file($file); $res = mysqli_query($db, "SELECT * FROM `images` ORDER BY `id` DESC ") or die(mysql_error()); $articles = array(); while($row = mysqli_fetch_assoc($res)) { $articles[] = $row; } foreach ($articles as $article): $my_path = $article['path']; endforeach; if(!empty($my_md5) AND $my_md5 != $my_path) { ini_set('memory_limit', '32M'); $maxsize = "5000000"; $extentions = array( "jpg"); $size = filesize ($_FILES['uploadfile']['tmp_name']); $type = strtolower(substr($filename, 1+strrpos($filename,"."))); $new_name = $my_md5.'.'.$type; if($size > $maxsize or $size <= 10000) { echo "Файл больше 5000000 Бит 'максимальный допустимный размер изображения 0,620мб'. Уменьшите размер вашего файла или загрузите другой. <br><a href='' onClick=window.close();>Закрыть окно</a>"; } elseif(!in_array($type,$extentions)) { echo ' <b>Файл имеет недопустимое расширение</b>. Допустимыми являются форматы изображений, видеофайлов, флэш-роликов и текстовых документов. <br>'; } else { if (copy($file, "uploads/".$new_name)) { $res = mysqli_query($db, "INSERT INTO images (path,description) VALUES ('$my_md5','Dwtf.ru юмор без дна')"); echo "success"; } else echo "error"; } }
а где запрос который ищет хэш в таблице? --- Добавлено --- лучше не мешать стиль точек и скобок в одном файле, точки для встраивания в html
сделать запрос в базу где например WHERE `hash` = $hash LIMIT 1 и если получишь 1 результат, значит такой хэш уже есть, если в результате будет ноль строк, значит хеша нет. Так вот если хеша нет до делай INSERT. Делаешь запрос, потом в PHP через if смотришь кол-во результатов, если 0 то делаешь запрос на INSERT.
Сделал запрос такой: PHP: $res = mysqli_query($db, "SELECT * FROM `images` WHERE `path` IN (SELECT `path` FROM `images` GROUP BY `path` HAVING COUNT(`path`) > 1)") or die(mysql_error()); $articles = array(); while($row = mysqli_fetch_assoc($res)) { $articles[] = $row; } foreach ($articles as $article){ $my_path = $article['path']; } if(!empty($my_md5) AND $my_md5 != $my_path) { почему то он через раз работает.
зачем там под запрос? у тебя может быть несколько одинаковых path? Если такого не надо, то можно поле path сделать unique и там не будет дублей path, но проверку делать надо будет всё равно