За последние 24 часа нас посетили 22473 программиста и 1027 роботов. Сейчас ищут 660 программистов ...

Загрузка документов в base64

Тема в разделе "PHP для новичков", создана пользователем Lexxbry, 21 дек 2018.

  1. Lexxbry

    Lexxbry Новичок

    С нами с:
    30 дек 2017
    Сообщения:
    48
    Симпатии:
    0
    Добрый день дамы и господа

    есть вот такая формочка
    PHP:
    1. <?php
    2. /**
    3. * @package Joomla.Administrator
    4. * @subpackage com_tickets
    5. *
    6. * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
    7. * @license GNU General Public License version 2 or later; see LICENSE.txt
    8. */
    9. // No direct access to this file
    10. defined('_JEXEC') or die;
    11.  
    12. JHtml::_('behavior.tabstate');
    13. JHtml::_('behavior.keepalive');
    14. JHtml::_('behavior.calendar');
    15. JHtml::_('behavior.formvalidation');
    16. JHtml::_('formbehavior.chosen', 'select');
    17.  
    18. //JHtml::_('behavior.modal', 'a.modal_jform_contenthistory');
    19.  
    20.  
    21.  
    22.  
    23. ?>
    24.  
    25. <script type="text/javascript">
    26.     Joomla.submitbutton = function(task) {
    27.         if (task == 'item.cancel' || document.formvalidator.isValid(document.id('adminForm'))) {
    28.             <?php //echo $this->form->getField('fulltext')->save(); ?>
    29.             Joomla.submitform(task);
    30.         } else {
    31.             alert('<?php echo $this->escape(JText::_('JGLOBAL_VALIDATION_FORM_FAILED'));?>');
    32.         }
    33.     }
    34. </script>
    35.  
    36.  
    37.  
    38. <div class="edit item-page<?php echo $this->pageclass_sfx; ?>">
    39.  
    40.     <form action="<?php echo JRoute::_('index.php?option=com_tickets&a_id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate" >
    41.         <fieldset>
    42.             <legend><?php echo JText::_('Создать тикет'); ?></legend>
    43.  
    44.             <?php echo $this->form->getInput('id'); ?>
    45.  
    46.             <div class="formelm" style="display:none;">
    47.            
    48.             <?php echo $this->form->getInput('catid'); ?>
    49.             </div>
    50.  
    51.             <div class="formelm">
    52.             <?php echo $this->form->getLabel('title'); ?>
    53.             <?php echo $this->form->getInput('title'); ?>
    54.             </div>
    55.  
    56.             <div class="formelm">
    57.             <?php echo $this->form->getLabel('introtext'); ?>
    58.             <?php echo $this->form->getInput('introtext'); ?>
    59.             </div>
    60.            
    61.            
    62.            
    63.     </fieldset>
    64.  
    65.  
    66.     <div class="formelm-buttons">
    67.         <button type="button" onclick="Joomla.submitbutton('item.save')" class="btn btn-primary">
    68.             <?php echo JText::_('JSAVE') ?>
    69.         </button>
    70.         <button type="button" onclick="Joomla.submitbutton('item.cancel')" class="btn btn-primary">
    71.             <?php echo JText::_('JCANCEL') ?>
    72.         </button>
    73.     </div>
    74.  
    75.     <fieldset>
    76.  
    77.         <input type="hidden" name="task" value="" />
    78.         <input type="hidden" name="return" value="<?php echo $this->return_page;?>" />
    79.  
    80.         <?php echo JHtml::_( 'form.token' ); ?>
    81.     </fieldset>
    82.  
    83.     </form>
    84. </div>
    данные передаются в БД
    надо прикрутить поле для загрузки файлов

    делаю так
    добавляю к form enctype="multipart/form-data"
    и добавляю само поле
    PHP:
    1. <div class="formelm">
    2.    
    3.       <label>Прикрепить файлы (Выберите несколько):</label>
    4.       <input type="file" name="files"  multiple="multiple" />
    5.  
    6.             </div>
    поле появляется и при клике дает выбирать файлы,
    но не могу понять как передать их в базу да еще и в base64

    кто знает подскажите
     
  2. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Прочитать содержимое файла. Конвертнуть в base_64. И сохранить строку в базу.
     
  3. Lexxbry

    Lexxbry Новичок

    С нами с:
    30 дек 2017
    Сообщения:
    48
    Симпатии:
    0
    это кстати и так понятно
    не могу понять где файл обработчик, что бы прописать туда передачу
    PHP:
    1. <form action="<?php echo JRoute::_('index.php?option=com_tickets&a_id='.(int) $this->item->id); ?>"
    как понять что за файл
     
  4. Lexxbry

    Lexxbry Новичок

    С нами с:
    30 дек 2017
    Сообщения:
    48
    Симпатии:
    0
    как вариант вынести загрузку файлов второй формой со своим обработчиком и передавать в него айди из первой, но это получается не комильфо. человеку надо нажимать две кнопки- отправку файлов и отправку заявки
    плюс скорее всего при отправки файлов страница перезагрузится, а вещать аякс не очень хочется
     
  5. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Посмотри в роутере. Там должно быть прописано по идее.
     
  6. Lexxbry

    Lexxbry Новичок

    С нами с:
    30 дек 2017
    Сообщения:
    48
    Симпатии:
    0
    я близок уже к решению свое задачи
    нашел скрипт аякс загрузки документов в папку
    вот код обработчика
    PHP:
    1. <?php
    2.  
    3. // A list of permitted file extensions
    4. $allowed = array('png', 'jpg', 'gif','zip' , 'doc' , 'docx' , 'xls' , 'xlsx' , 'pdf');
    5.  
    6. if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){
    7.  
    8.     $extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
    9.  
    10.     if(!in_array(strtolower($extension), $allowed)){
    11.         echo '{"status":"error"}';
    12.         exit;
    13.     }
    14.  
    15.     if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
    16.         echo '{"status":"success"}';
    17.         exit;
    18.     }
    19. }
    20.  
    21. echo '{"status":"error"}';
    тут все ясно что он грузит файлики в папку и работает замечательно

    а как сделать что бы он грузил в бд
    таблица есть
    #_ticket_files
    в ней поля
    id - text
    file - blob