За последние 24 часа нас посетили 17373 программиста и 1200 роботов. Сейчас ищет 1241 программист ...

достигну цели наводящими воросами

Тема в разделе "PHP для новичков", создана пользователем sidor84, 4 май 2015.

  1. sidor84

    sidor84 Новичок

    С нами с:
    29 мар 2015
    Сообщения:
    17
    Симпатии:
    0
    Привет всем.
    Вопрос такой.
    Когда мы используем обычную форму добавления картинки на сайт, куда файл помещается, и что именно передается в обработчик? т.е.

    есть :
    Код (Text):
    1.  
    2. <form action="obrabotchik.php" method="post">
    3.     <input name="" type="file" />
    4.     <input name="" type="submit" />
    5. </form>

    вопрос2:
    Если у меня 4 поля для добавления фоток... как мне сделать в начале обработчика появлялся массив с этими четырьмя (а точнее от одной до четырех(как пользователь захочет)) картинками? просто в этом обработчике все четыре картинки должны обработаться так как задано.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Советую почитать книги по html, php свежие 2014/2015 года.
    А ещё документацию по PHP https://php.net/manual/ru/

    Вот можно было легко найти через поиск "php загрузка фалов" https://php.net/manual/ru/features.file-upload.post-method.php

    По второму вопросу, покажи какой у тебя массив и что хочешь получить в результате.
     
  3. sidor84

    sidor84 Новичок

    С нами с:
    29 мар 2015
    Сообщения:
    17
    Симпатии:
    0
    цель такая.
    пользователь отправляет от одной до четырех картинок.

    картинки попадают на страницу obrabotchik.php

    вот часть кода которая обрабатывает картинку так ка нужно для сайта:
    Код (Text):
    1.  
    2. if (!isset($_POST['button_add_moderator'])) {exit('Работайте только с формой добавления');}
    3.  
    4. $max_width = 540;
    5. $max_height = 404;
    6.  
    7.  if (empty($_FILES['imgupload1']['name']))
    8.     {
    9. $avatar = "nologo_bb.jpg";
    10. }
    11. elseif($_FILES['imgupload1']['name'] > 6000*20*6000){
    12.         echo "превышен размер файла";
    13.         exit;
    14.          }
    15. else
    16. {
    17. $path_directory = 'bbimg_admin/';
    18.      if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['imgupload1']['name']))
    19.      {         
    20.         $filename = $_FILES['imgupload1']['name'];
    21.         $source = $_FILES['imgupload1']['tmp_name'];   
    22.         $target = $path_directory . $filename;
    23.         move_uploaded_file($source, $target);
    24.  
    25.     if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
    26.    
    27.     $im = imagecreatefromgif($path_directory.$filename) ;
    28.     }
    29.     if(preg_match('/[.](PNG)|(png)$/', $filename)) {
    30.     $im = imagecreatefrompng($path_directory.$filename) ;
    31.     }  
    32.     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
    33.     $im = imagecreatefromjpeg($path_directory.$filename);
    34.     }
    35.     $size = getimagesize($target); // Read the size
    36.           $width = $size[0];
    37.           $height = $size[1];
    38.          
    39.           $x_ratio = $max_width / $width;
    40.           $y_ratio = $max_height / $height;
    41.  
    42.           if( ($width <= $max_width) && ($height <= $max_height) )
    43.           {
    44.                $tn_width = $width;
    45.                $tn_height = $height;
    46.           }
    47.           elseif (($x_ratio * $height) < $max_height)
    48.           {
    49.                $tn_height = ceil($x_ratio * $height);
    50.                $tn_width = $max_width;
    51.           }
    52.           else
    53.           {
    54.                $tn_width = ceil($y_ratio * $width);
    55.                $tn_height = $max_height;
    56.           }
    57.      ini_set('memory_limit', '300M');
    58.      $date=time();
    59.      $src = imagecreatefromjpeg($target);
    60.      $dst = imagecreatetruecolor($tn_width, $tn_height);
    61.      $nimg = imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
    62.      imagejpeg($dst,$path_directory."infor_com_ua-".$date.".jpg");
    63.      $avatar = $path_directory."infor_com_ua-".$date.".jpg";
    64. }
    65. else
    66. {
    67. exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
    68. }
    69. }
    Этот код пропорционально уменьшает картинку до необходимых размеров.

    И я вот что себе думаю, мне нужно в этот обработчик засунуть четыре картинки, что бы они все были обработаны. Как это лучше реализовать?

    то ли это будет массив с четырьмя (или меньше) картинками, и этот массив в цикле через этот код провести, то ли, может из этого кода функцию создать... хз кароче как правильно... натолкните меня на правильные мИсли!)

    потом, после обработки файла, или файлов(если несколько)
    на сервер они загружаются, и в БД прописываются пути, ну соответственно потом выводятся пользователю на страницу.


    Спасибо!
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. sidor84

    sidor84 Новичок

    С нами с:
    29 мар 2015
    Сообщения:
    17
    Симпатии:
    0
    можно подробно. суть то я понимаю, вот только в голову мысли не приходят как это организовать
     
  6. denis01

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

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

    sidor84 Новичок

    С нами с:
    29 мар 2015
    Сообщения:
    17
    Симпатии:
    0
    В общем, доработал передачу файлов в обработчик, а сейчас застрял на самом важном.

    Вот есть массив $arr
    его надо в цикле провести через функцию.
    не могу соориентироваться какие данные функции передать.
    Кому не сложно, помогите все "по полочкам разложить"
    и в цикле запустить. Спасибо
    Код (Text):
    1. $arr = array($pict1,$pict2,$pict3,$pict4);
    2.  
    3. function pict(){
    4. $max_width = 540;
    5. $max_height = 404;
    6.  
    7.  if (empty($_FILES['imgupload1']['name']))
    8.  
    9.     {
    10.  
    11. $avatar = "nologo_bb.jpg";
    12.  
    13. }
    14. elseif($_FILES['imgupload1']['name'] > 6000*20*6000){
    15.         echo "превышен размер файла";
    16.         exit;
    17.          }
    18. else
    19. {
    20. $path_directory = 'bbimg_admin/';
    21.      if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['imgupload1']['name']))
    22.      {         
    23.         $filename = $_FILES['imgupload1']['name'];
    24.         $source = $_FILES['imgupload1']['tmp_name'];   
    25.         $target = $path_directory . $filename;
    26.         move_uploaded_file($source, $target);
    27.     if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
    28.     $im = imagecreatefromgif($path_directory.$filename) ;
    29.     }
    30.     if(preg_match('/[.](PNG)|(png)$/', $filename)) {
    31.     $im = imagecreatefrompng($path_directory.$filename) ;
    32.     }  
    33.     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
    34.     $im = imagecreatefromjpeg($path_directory.$filename);
    35.     }
    36.     $size = getimagesize($target);
    37.           $width = $size[0];
    38.           $height = $size[1];
    39.           $x_ratio = $max_width / $width;
    40.           $y_ratio = $max_height / $height;
    41.  
    42.           if( ($width <= $max_width) && ($height <= $max_height) )
    43.           {
    44.                $tn_width = $width;
    45.                $tn_height = $height;
    46.           }
    47.           elseif (($x_ratio * $height) < $max_height)
    48.           {
    49.                $tn_height = ceil($x_ratio * $height);
    50.                $tn_width = $max_width;
    51.           }
    52.           else
    53.           {
    54.                $tn_width = ceil($y_ratio * $width);
    55.                $tn_height = $max_height;
    56.           }    
    57.      ini_set('memory_limit', '300M');
    58.  
    59.      $date=time();
    60.  
    61.      $src = imagecreatefromjpeg($target);
    62.      $dst = imagecreatetruecolor($tn_width, $tn_height);
    63.      $nimg = imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
    64.      imagejpeg($dst,$path_directory."infor_com_ua-".$date.".jpg");
    65.      $avatar = $path_directory."infor_com_ua-".$date.".jpg";}
    66.      imagedestroy($src);
    67.     imagedestroy($dst);
    68.     unlink ($target);
    69.  
    70.      
    71.      }
    72. }
    73.  
    74. pict();
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Есть удобные библиотеки, чтобы манипулировать изображениями, например
    https://github.com/avalanche123/Imagine

    И вот пример как несколько файлов получить и вывести их тип
    Код (PHP):
    1. <!DOCTYPE HTML>
    2. <html>
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title></title>
    6. </head>
    7. <body>
    8.  
    9.  
    10. <form enctype="multipart/form-data" action="?" method="POST">
    11.     
    12.     Отправить этот файл: <input name="userfiles[]" type="file" multiple>
    13.     <input type="submit" value="Send File" />
    14. </form>
    15. <?php
    16.  
    17. $files_arr = 'userfiles';
    18. $files_type = array(IMAGETYPE_GIF => 'gif', IMAGETYPE_JPEG => 'jpeg', IMAGETYPE_PNG => 'png');
    19.  
    20. function echoFileList($files, $files_type)
    21. {
    22.     foreach ($files["error"] as $key => $error) {
    23.         $img_type = exif_imagetype($files["tmp_name"][$key]);
    24.         if ($error == UPLOAD_ERR_OK && isset($files_type[$img_type]) ) {
    25.             $tmp_name = $files["tmp_name"][$key];
    26.             $name = $files["name"][$key];
    27.             echo "оригинальное имя файла: $name путь временного файла: $tmp_name тип {$files_type[$img_type]}<br>";
    28.         }
    29.     }
    30. }
    31.  
    32. if (isset($_FILES[$files_arr])) {
    33.  
    34.     echoFileList($_FILES[$files_arr], $files_type);
    35.     echo "<pre>";
    36.     var_dump($_FILES);
    37.     echo "</pre>";
    38. }
    39. ?>
    40. </body>
    41. </html>