За последние 24 часа нас посетили 17552 программиста и 1722 робота. Сейчас ищут 1870 программистов ...

Как загрузить и обработать несколько изображений?

Тема в разделе "PHP для новичков", создана пользователем Tures, 3 фев 2013.

  1. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    "в районе итерации" - в любом удобном для вас месте тела обсуждаемого цикла.
    итерация это выполнение тела цикла.
    до объявления цикла - объявляете переменную, внутри цикла - ее инкремент.
     
  2. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    Извеняюсь, но столкнулся с такой ошибкой, что если в кнопку вставить любое событие JS, то форма не отправляется, а страница просто обновляется, причем никаких действий не происходит.
    Код (Text):
    1. <input type="submit" <? if( isset( $_POST['createmark'] ) && 'Нанести текст' == $_POST['createmark'] && isset( $_FILES['imgfile'] ) )
    2. { ?>id="submitos" value="Ждите 30 секунд" disabled="true" <? } ?> name="createmark" id="createmark" value="Нанести текст" onclick="JavaScript:this.disabled=true; document.imageUpload.submit(); return false;"/>
     
  3. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    логику вот этого бреда можно?
     
  4. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    ладно. при нажатии кнопки - она должна деактивироваться, чтобы избежать повторной отправки.
    Дело в том что она дективируется, но форма не отправляется и ничего не происходит, а страница просто обновляется.
     
  5. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    и все правильно работает. вы просто не правильно делаете.
    пхп выполняется на стороне сервера. вы наверное об этом не знали. в браузер выдается результат работы кода, а самого кода не выдается. но вы от этом не догадывались написав такую конструкцию. и когда будет удовлетворено условие в пхп - браузер получит удивительный фарш, в котором у элемента будет два уникальных идентификатора и два значения.

    онклик. он как бы будет джаваскриптом выполняться и поэтому не нужно писать протокол.
    теперь давайте по логике действия пробежимся.
    на нажатии сделать кнопку неактивной - допустим
    выполнить отправку imageUpload - а браузер видит форму?
    возвратить ложь = не выполнять стандартного действия элемента для клика. допустим.

    как это будет работать? кнопка станет неактивной, форма (если браузер ее видит) отправится, пхп нарисует ужасную конструкцию и вернет страницу в которой кнопка будет неактивной. все логично. что я делаю не так?
     
  6. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    Просто без онклика все работает прекрасно, но если вставить онклик, то вот такой баг.
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    onClick="this.disabled=true; document.imageUpload.submit();"
    первое нажатие заблокирует кнопку и отправит форму.
    если форма "длинная" то пользователь будет видеть заблокированную кнопку. у нее не существует onClick и она НЕ отправляет форму, потому что она заблокирована. работает.
    что я делаю не так?
     
  8. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    Ясно, а как тогда сделать это, чтобы работало?
     
  9. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а чо, не работает?
     
  10. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    у меня работает. что я делаю не так?
     
  12. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    Дело в том, что если любое событие вставить - онклик или онсабмит, то изображения не обработаются.(
     
  13. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    хорошо. раз у меня работает и вы не можете мне помочь сломать, давайте развернем. что вы делаете не так?
     
  14. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    Не знаю, вроде все правильно прописано, имена форм совпадают.....
    Код (Text):
    1.  
    2. <form name="imageUpload" id="imageUpload" action="index.php" method="post" enctype="multipart/form-data">
    3.             <div style="max-width: 800px;">
    4. <table width="100%" id="table1" style="left: 0;" cellpadding="0" cellspacing="0" padding="0"><tbody><tr>
    5. <td width="25%">
    6. Фотографии
    7. <div style="font-size: 0.7em;">До 30 файлов</div>
    8. </td>
    9. <td>
    10. <input type="file" name="imgfile[]" multiple id="imgfile-">
    11. </td>
    12. </tr><tr>
    13. <td width="25%">
    14. Текст
    15. </td>
    16. <td>
    17. <input style="width: 457px" type="text" name="usertext" value="© "><select style="margin-left: 20px; width: 100px;" name="usertextcolor" size="1">
    18.                                 <option value="white">Белый</option>                                    
    19.                                 <option value="black">Черный</option>                                    
    20.                                 </select>
    21. </td>
    22. </tr>
    23. <tr>
    24. <td colspan="2" style="padding-bottom: 25px; text-align:center" width="100%">
    25. <input type="submit" <? if( isset( $_POST['createmark'] ) && 'Нанести текст' == $_POST['createmark'] && isset( $_FILES['imgfile'] ) )
    26. { ?>id="submitos" value="Ждите 30 секунд" disabled="true" <? } ?> onClick="this.disabled=true; document.imageUpload.submit();" name="createmark" id="createmark" value="Нанести текст" />
    27. </td>
    28.  
    29. </tr></tbody></table>
    30. </div>                
    31.             </fieldset>
    32.              
    33.             <h3></h3>        </form>
    34. <? $ip=md5($_SERVER['REMOTE_ADDR']); if( isset( $_POST['createmark'] ) && 'Нанести текст' == $_POST['createmark'] && isset( $_FILES['imgfile'] ) )
    35. { ?>
    36. <script type="text/javascript">
    37. setTimeout(function(){
    38.     document.getElementById('submitos').value = 'Нанести текст';
    39.     document.getElementById('submitos').disabled = false;
    40. }, 30 * 1000);
    41. </script>
    42. <div id="ddarch" style="margin-left: 15px;"><a href="<? echo 'uploads/photos_'.date('hi').$ip.'.zip'; ?>" style="border-bottom-style:dashed;">Сохранить все фотографии в ЗИП-архиве</a></div> <? } ?>
    43. <?php
    44. if( isset( $_POST['createmark'] ) && 'Нанести текст' == $_POST['createmark'] && isset( $_FILES['imgfile'] ) )
    45. {   $processed_images = '';
    46.     for( $i = 0; $i < $upload_files_cnt; $i++ )
    47.     {   //Если с картинкой все ок.
    48.         echo "";
    49.        
    50.         // имя оригинального файла, ...
    51.         $name = isset( $_FILES['imgfile']['name'][ $i ] ) ? trim( $_FILES['imgfile']['name'][ $i ] ) : '';
    52.         // ... тип, ...
    53.         $mime = isset( $_FILES['imgfile']['type'][ $i ] ) ? trim( $_FILES['imgfile']['type'][ $i ] ) : '';
    54.         // ... размер, ...
    55.         $size = isset( $_FILES['imgfile']['size'][ $i ] ) ? doubleval( $_FILES['imgfile']['size'][ $i ] ) : 0;
    56.         // ... и путь к временной копии загруженного файла
    57.         $temp = isset( $_FILES['imgfile']['tmp_name'][ $i ] ) ? trim( $_FILES['imgfile']['tmp_name'][ $i ] ) : '';
    58.        
    59.         // путь, куда переместим файл
    60.         $temp2 = $upload_path . $name;
    61.         // путь к обработанному файлу
    62.         $new_name = $upload_path .time().$i. '.jpg';
    63.        
    64.         if( strlen( $name ) && in_array( $mime, $valid_formats ) && $size <= $file_size_limit )
    65.         {
    66.             // сюда попадаем, если файл в текущей итерации прошел проверку имени, типа и размера
    67.            
    68.             if( @ move_uploaded_file( $temp, $temp2 ) )
    69.             {   $ip=md5($_SERVER['REMOTE_ADDR']);
    70.                 // сюда попадаем, если файл успешно перемещен из временного хранилища в $upload_path
    71.                 // собака перед именем функции - для подавления возможных ошибок
    72.                 $zip = new ZipArchive(); //Создаём объект для работы с ZIP-архивами
    73.                 $zip->open('uploads/photos_'.date('hi').$ip.'.zip', ZIPARCHIVE::CREATE); //Открываем (создаём) архив
    74.                 // тут вызов watermark_text( $temp2, $new_name )
    75.                 // добавляем водяной знак: watermark_text() - для текста, watermark_image() - для изображения
    76.                 if(watermark_text($temp2, $new_name))
    77.                     if(!empty($new_name)){
    78.                                         $processed_images = $i;
    79.                                         $zip->addFile($new_name, 'photo_'.$i.'.jpg');
    80.                     $zip->close(); //Завершаем работу с архивом
    81.                     echo '<img id="img-'.$i.'" style="max-width:785px; padding: 15;" src="'.$new_name.'" />';   }          
    82.                 else
    83.                     echo '<h3>Не получилось!</h3>';
    84.             }
    85.         }
    86.        
    87.  
    88.         else
    89.         {
    90.             //echo 'Максимальный размер файла 17МБ, поддерживаемые форматы JPEG, BMP, PNG.';
    91.         }
    92.        
    93.     } // for( i = 0 ...
    94. }
    95. else // if( isset && submit ) .. else ..
    96. {
    97. ?>
    98. <?php
    99. } // if( isset && submit ) .. else ..
    100. ?>
    101. <? if($processed_images<=0){print'<style>#ddarch{display:none;}</style>';} ?>
     
  15. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вы когда выкладываете код - будьте любезны информировать меня об окружении. я вот вижу помимо каши, логика которой стремиться к отрицательной бесконечности, еще и не объявленные объекты.
    я написал как делать не надо - вы сделали ровно наоборот. вы не питаетесь разобраться. вы добавляете функционал в алгоритм методом высоконаучного тыка. "вроде как это сюда надо". а потом неделю сидите на форуме ждете когда за вас напишут нормальную программу.
    сформулируйте всю желаемую логику скрипта. я хочу знать к каким приправам в этой каше еще готовиться.

    Добавлено спустя 35 минут 25 секунд:
    я выполнил за вас вашу работу - я добился работоспособности вашего скрипта. есть еще куча косяков, но это связано с отсутствием логики в алгоритме. но поверхностную задачу - загрузить несколько изображений, обработать, показать, дать скачать - я выполнил.
     
  16. Tures

    Tures Активный пользователь

    С нами с:
    3 фев 2013
    Сообщения:
    40
    Симпатии:
    0
    Да нет, я просто думал что отправка формы на стороне скрипта.
     
  17. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вы не поняли. я вот сейчас посидел и написал нормальный скрипт. но вам его просто так не буду давать. потому что вы тогда ничему не научитесь. сахар в чай кладут а не чай в сахарницу наливают. пока таких очевидных для других, но логичных для вас ляпов будет много - скрипт не допишется.