За последние 24 часа нас посетил 16871 программист и 1641 робот. Сейчас ищут 954 программиста ...

Проверка хэш файла и mysql

Тема в разделе "PHP для новичков", создана пользователем EvilScorpion, 16 окт 2016.

  1. EvilScorpion

    EvilScorpion Новичок

    С нами с:
    15 окт 2016
    Сообщения:
    44
    Симпатии:
    1
    Что-то я не пойму, не работает проверка т.е файлы которые загружаются формируют md5 хэш, и этот хэш записывается в mysql в таблицу (поле) path, делаю проверку, но по моему криво, подскажите как правильно сделать?
    Нужно что бы, если в базе такой хэш есть, то не загружать файл.

    PHP:
    1. $file = $_FILES['uploadfile']['tmp_name'];
    2. $filename = $_FILES['uploadfile']['name'];
    3. $my_md5 = md5_file($file);
    4. $res = mysqli_query($db, "SELECT * FROM `images` ORDER BY `id` DESC ")  or die(mysql_error());
    5.                
    6. $articles = array();
    7. while($row = mysqli_fetch_assoc($res))
    8. {
    9.     $articles[] = $row;
    10.    
    11. }
    12. foreach ($articles as $article):
    13. $my_path = $article['path'];
    14. endforeach;
    15. if(!empty($my_md5) AND $my_md5 != $my_path)
    16. {
    17.   ini_set('memory_limit', '32M');
    18.   $maxsize = "5000000";
    19.   $extentions = array( "jpg");
    20.   $size = filesize ($_FILES['uploadfile']['tmp_name']);
    21.   $type = strtolower(substr($filename, 1+strrpos($filename,".")));
    22.   $new_name = $my_md5.'.'.$type;
    23.   if($size > $maxsize or $size <= 10000)
    24.   {
    25.      echo "Файл больше 5000000 Бит 'максимальный допустимный размер изображения 0,620мб'. Уменьшите размер вашего файла или загрузите другой. <br><a href='' onClick=window.close();>Закрыть окно</a>";
    26.   }
    27.   elseif(!in_array($type,$extentions))
    28.   {
    29.     echo ' <b>Файл имеет недопустимое расширение</b>. Допустимыми являются форматы изображений, видеофайлов, флэш-роликов и текстовых документов. <br>';
    30.   }
    31.   else
    32.      
    33.   {
    34.     if (copy($file, "uploads/".$new_name)) {
    35.    
    36.     $res = mysqli_query($db, "INSERT INTO images (path,description) VALUES ('$my_md5','Dwtf.ru юмор без дна')");
    37.       echo "success";
    38.     }
    39.     else echo "error";
    40.    
    41.   }
    42.    
    43. }
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    а где запрос который ищет хэш в таблице?
    --- Добавлено ---
    лучше не мешать стиль точек и скобок в одном файле, точки для встраивания в html
     
  3. EvilScorpion

    EvilScorpion Новичок

    С нами с:
    15 окт 2016
    Сообщения:
    44
    Симпатии:
    1
    Так вот я и спрашиваю как реализовывать...

    на счет точек foreach исправил, спасибо.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    сделать запрос в базу где например WHERE `hash` = $hash LIMIT 1 и если получишь 1 результат, значит такой хэш уже есть, если в результате будет ноль строк, значит хеша нет.
    Так вот если хеша нет до делай INSERT.
    Делаешь запрос, потом в PHP через if смотришь кол-во результатов, если 0 то делаешь запрос на INSERT.
     
  5. EvilScorpion

    EvilScorpion Новичок

    С нами с:
    15 окт 2016
    Сообщения:
    44
    Симпатии:
    1
    Сделал запрос такой:

    PHP:
    1. $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());
    2.  
    3.  
    4. $articles = array();
    5. while($row = mysqli_fetch_assoc($res))
    6. {
    7.     $articles[] = $row;
    8.    
    9. }
    10.  foreach ($articles as $article){
    11. $my_path = $article['path'];
    12. }
    13.  
    14.  
    15. if(!empty($my_md5) AND $my_md5 != $my_path)
    16. {
    почему то он через раз работает.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    зачем там под запрос? у тебя может быть несколько одинаковых path? Если такого не надо, то можно поле path сделать unique и там не будет дублей path, но проверку делать надо будет всё равно