Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ghlevin

PHP e Javascript - Upload de Arquivo

Recommended Posts

Possuo no site do meu cliente, que eu assumi de outro desenvolvedor, uma seção de cadastro de reuniões e eventos. Nessa seção, preciso implementar um campo de upload de arquivo PDF relacionado ao evento/reunião a ser cadastrado.

Tentei implementar com base em outras seções do site que já haviam sido desenvolvidas e que possuem upload de arquivos também. Mas ainda não consegui fazer funcionar esse upload. Seguem os código abaixo:

HTML

<table>
        <tr>
            <td><b>{label_cadadmin_reunioes_unidade}<span style='color:#E76000'>*</span>:</b> </td>
            <td>                
                <select id="selectUnidade">     
                    <!-- BEGIN BLOCK_UNIDADES -->
                    <option value="{OBJ->ID}">{OBJ->NOME}</option>
                    <!-- END BLOCK_UNIDADES -->
                </select>
            </td>
        </tr>
        <tr>
            <td><b>{label_cadadmin_reunioes_tipoinvestidor}<span style='color:#E76000'>*</span>:</b> </td>
            <td>
                <form>
                    <input type="radio" value="P" name="tipoInvestidor" id="poolOpt">{label_cadadmin_reunioes_poolista}
                    <input type="radio" value="C" name="tipoInvestidor" id="condOpt">{label_cadadmin_reunioes_condomino}
                </form>
            </td>
        </tr>
        <tr>
            <td><b>{label_cadadmin_reunioes_tipoevento}<span style='color:#E76000'>*</span>:</b> </td>
            <td>
                <select id="selectTipoEvento">      
                    <option value="1">{label_cadadmin_reunioes_rcc}</option>
                    <option value="2">{label_cadadmin_reunioes_ago}</option>
                    <option value="4">{label_cadadmin_reunioes_age}</option>
                </select>           
            </td>
        </tr>
        <tr>
            <td><b>{label_cadadmin_reunioes_datainicial}<span style='color:#E76000'>*</span>:</b> </td>
            <td><input id="dataInicialReuniao" class="dadosInputG" type="text" value=""></td>
        </tr>
        <tr>
            <td><b>{label_cadadmin_reunioes_horainicial}:</b> </td>
            <td><input id="horaInicialReuniao" class="dadosInputG" type="text" value=""></td>
        </tr>
        <tr>
            <td><b>Anexar Arquivo:</b> </td>
            <td>
                <span class="retornodadospessoais">
                <input id="anexoReuniao" type="file" size="30" class="dadosTypeFile" name="anexoReuniao">
                </span>
                <iframe name="upload_iframeReuniao" id="upload_iframeReuniao" style="display:none;"></iframe>

            </td>
        </tr>
    </table>
JAVASCRIPT (com as funções abrirModalReunioesEventos e cadastraNovoEvento)[/size]

function abrirModalReunioesEventos(){
var close = $('#lblCancelar').val();
var save = $('#lblSalvar').val();
var dialog_buttonsReuniao = {};  

dialog_buttonsReuniao[close] = function(){ 
    $( this ).dialog( "destroy" );
    //window.location = location.href.split("?")[0]+"?menu=reunioesEventos";

    $("#selectUnidade").val($("#selectUnidade  > option:first-child").val());
    $('#poolOpt').removeAttr('checked');
    $('#condOpt').removeAttr('checked');
    $("#selectTipoEvento").val($("#selectTipoEvento  > option:first-child").val());
    $('#dataInicialReuniao').val('');
    $('#horaInicialReuniao').val('');
    $('#anexoReuniao').val('');
};
dialog_buttonsReuniao[save] = function(){
    cadastroNovoEvento();
};

$('#modalCadastraNovaReuniao').attr('title',$('#lblTitleCadastrarReuniao').val());
$('#modalCadastraNovaReuniao').dialog({
    width: 710,
    modal: true,
    autoOpen: false,
    resizable: false,
    closeOnEscape: true,
    position: 'top',
    buttons: dialog_buttonsReuniao,
    close: function(){
    }
});

$('#horaInicialReuniao').mask('99:99');
//definição da lingua dos datepickers
$.ajax({
      cache:false, 
      url: '[:raiz]cadAdmin/getLang',
      dataType: 'json',
      type: 'POST',
      success: function(data) {
            if(data!='eng'){
                var formato="yy/mm/dd"
            }else{
                var formato="dd/mm/yy"
            }
            $( "#dataInicialReuniao" ).datepicker({ 
                dayNamesMin: [$('#lblDom').val(), $('#lblSeg').val(), $('#lblTer').val(), $('#lblQua').val(), $('#lblQui').val(), $('#lblSex').val(), $('#lblSab').val()],  
                monthNames: [$('#lblJan').val(),$('#lblFev').val(),$('#lblMar').val(),$('#lblAbr').val(),$('#lblMai').val(),$('#lblJun').val(),$('#lblJul').val(),$('#lblAgo').val(),$('#lblSet').val(),$('#lblOut').val(),$('#lblNov').val(),$('#lblDez').val()], 
                dateFormat: "dd/mm/yy" //formato
            });
      }
});
$('#modalCadastraNovaReuniao').dialog('open');
}

function cadastroNovoEvento() {
//Pega a data atual
var dataHoje = new Date();
dataHoje.setHours(0); 
dataHoje.setMinutes(0); 
dataHoje.setSeconds(0); 
dataHoje.setMilliseconds(0);    

var ano = ($('#dataInicialReuniao').val()).substr(6,4);
var mes = ($('#dataInicialReuniao').val()).substr(3,2);
var dia = ($('#dataInicialReuniao').val()).substr(0,2);
var dataPrimeiro = new Date(ano,parseInt(mes)-1,dia);
dataPrimeiro.setHours(0); 
dataPrimeiro.setMinutes(0); 
dataPrimeiro.setSeconds(0); 
dataPrimeiro.setMilliseconds(0);

$("#obrigatorio").dialog({
    buttons : {
        Ok : function() {
            $(this).dialog('close');
        }
    },
    modal : true,
    autoOpen : false,
    resizable : false,
    closeOnEscape : false,
    open : function(event, ui) {
        $(".ui-dialog-titlebar-close").hide();
    }
});

$("#criaEventoDataMaior").dialog({
    buttons : {
        Ok : function() {
            $(this).dialog('close');
        }
    },
    modal : true,
    autoOpen : false,
    resizable : false,
    closeOnEscape : false,
    open : function(event, ui) {
        $(".ui-dialog-titlebar-close").hide();
    }
});

//Prepara a data para ser inserida em formato de banco
var datainicial = $('#dataInicialReuniao').val();
var substrdataini = datainicial.split('/');
datainicial = substrdataini[2]+'-'+substrdataini[1]+'-'+substrdataini[0]; //AAAA-MM-DD

//Verifica se a data inicial é menor que a data atual
if (($('#dataInicialReuniao').val()).length != 0) {
    if (dataHoje.getTime() > dataPrimeiro.getTime()) {
        $('#criaEventoDataMaior').dialog('open');
        return false;
    }
}

var horainicial = $('#horaInicialReuniao').val();
var substrhorainicial = horainicial.split(':');

if ($("form :radio").is(":checked") == 0) {
    $('#obrigatorio').dialog('open');
    return false;
} else if (($('#dataInicialReuniao').val()).length == 0) {
    $('#obrigatorio').dialog('open');
    return false;
}

$("#envioEventoOk").dialog( {
    buttons : {
        Ok : function() {
            showLoading();
            window.location = location.href.split("?")[0]+"?menu=reunioesEventos";
            $(this).dialog('close');
        } 
    },
    modal : true,
    autoOpen : false,
    resizable : false,
    closeOnEscape : false,
    open : function(event, ui) {
        $(".ui-dialog-titlebar-close").hide();
    }
});

$("#erroExt").dialog( {
        buttons : {
            Ok : function() {
                $(this).dialog('close');
            } 
        },
        modal : true,
        autoOpen : false,
        resizable : false,
        closeOnEscape : false,
        open : function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
        }
    }); 
    $("#envioDocumentoErrorSize").dialog( {
        buttons : {
            Ok : function() {
                $(this).dialog('close');
            }
        },
        modal : true,
        autoOpen : false,
        resizable : false,
        closeOnEscape : false,
        open : function(event, ui) {
            hideLoading();
            $(".ui-dialog-titlebar-close").hide();
        }
    }); 

    $("#envioDocumentoError").dialog( {
        buttons : {
            Ok : function() {
                $(this).dialog('close');
            } 
        },
        modal : true,
        autoOpen : false,
        resizable : false,
        closeOnEscape : false,
        open : function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
        }
    });

var ext = $('#anexoReuniao').val().split('.').pop().toLowerCase();
var info = new Array();
info[0] = $('#lblInfoEv0').val();
info[1] = $('#lblInfoEv1').val();
info[2] = $('#lblInfoEv2').val();
info[3] = $('#lblInfoEv3').val();
info[4] = $('#lblInfo0').val();
info[5] = $('#lblInfoEv5').val();
info[6] = $('#lblInfoEv6').val();
info[7] = $('#lblInfoEv7').val();
info[8] = $('#lblInfoEv8').val();
info[9] = $('#lblInfoEv9').val();
info[10] = $('#lblInfoEv10').val();
info[11] = $('#lblInfoEv11').val();
info[12] = $('#lblInfoEv12').val();
info[13] = $('#lblInfoEv13').val();
info[14] = $('#lblInfoEv14').val();
info[15] = $('#lblInfoEv15').val();
info[16] = $('#lblInfoEv16').val();
info[17] = $('#lblInfoEv17').val();

$.ajax({
      async:true,
      cache:false, 
      url: '[:raiz]cadAdmin/cadastraNovoEvento',
      dataType: 'json',
      data: ({
          idunidade: $('#selectUnidade').val(),
          tipoinvestidor: $("input[name='tipoInvestidor']:checked").val(),
          tipoevento: $('#selectTipoEvento').val(),
          datainicial: datainicial,
          horainicial: $('#horaInicialReuniao').val(),
          anexoReuniao: $('#anexoReuniao').val()
      }),
      type: 'POST',
      success: function(data) {
          $("#envioEventoOk").dialog('open');
          $.ajax({
              async:true,
              cache:false, 
              url: '[:raiz]cadAdmin/enviaEmailEvento',
              dataType: 'json',
              data: ({
                  idunidade: $('#selectUnidade').val(),
                  tipoinvestidor: $("input[name='tipoInvestidor']:checked").val(),
                  tipoevento: $('#selectTipoEvento').val(),
                  datainicial: datainicial,
                  horainicial: $('#horaInicialReuniao').val(),
                  info: info
              }),
              type: 'POST',
              success: function(data) { 
              },
              error: function(data) {
              }
          });
      }
});
} 
CONTROLLER (função cadastraNovoEvento, chamado no Javascript)[/size]

public function cadastraNovoEvento() {
    //Puxa dados da função cadastroNovoEvento() no js
    $idunidade = $_POST['idunidade'];
    $tipoinvestidor = $_POST['tipoinvestidor'];
    $tipoevento = $_POST['tipoevento'];
    $datainicial = $_POST['datainicial'];
    $horainicial = $_POST['horainicial'];

    // TODO 18/11 - Novo teste de upload de PDF
    $anexo = $_FILES['anexoReuniao']['name']; // TODO Campo novo de cadastro no banco
    $erro = $_FILES['anexoReuniao']['error']; //Detecta erros no upload / Retorna 1 se o tamanho da imagem for maior do que é permitido pelo server
    $size = $_FILES['anexoReuniao']['size'];
    if ($erro != '1' AND $size < 4194304){
        $name = utf8_decode(str_replace("&","",$_FILES['anexoReuniao']['name']));

        $namefile = 'anexosreunioeseeventos/'.$name/*.'.'.$ext*/;

        $file_folder = Config::retorna('application', 'filepath_anexosreunioeseeventos');           

        move_uploaded_file($_FILES['anexoReuniao']['tmp_name'], $file_folder.'/'.$name);

        $name = utf8_encode($name);

        $namefile = 'anexosreunioeseeventos/'.$name/*.'.'.$ext*/;

        CadAdmin::salvaNovoEvento($idunidade, $tipoinvestidor, $tipoevento, $datainicial, $horainicial, $anexo, $namefile/*, $descricao*/);         

        echo '<p>0</p>';
    } else {            
        echo '<p>1</p>';
    }

    echo json_encode(1);
} 
MODEL (função SalvaNovoEvento chamada no Controller):[/size]

public function salvaNovoEvento($idunidade, $tipoinvestidor, $tipoevento, $datainicial, $horainicial, $anexo, $namefile) {      
    //COLOCA NO BANCO
    $id_usuario = Login::retornaIdUser();

    if ($horainicial==''){
        $sql = "INSERT INTO evento(id_unidade, data_ini, tipo_evento, ind_tipo_investidor, id_usuario, caminho_anexo, nome_anexo) VALUES ";
        $sql .= "($idunidade, '$datainicial', $tipoevento, '$tipoinvestidor', $id_usuario, '$namefile', '$anexo')";
    }else {
        $sql = "INSERT INTO evento(id_unidade, data_ini, hora_ini, tipo_evento, ind_tipo_investidor, id_usuario, caminho_anexo, nome_anexo) VALUES ";
        $sql .= "($idunidade, '$datainicial', '$horainicial',  $tipoevento, '$tipoinvestidor', $id_usuario, '$namefile', '$anexo')";
    }
    System::element('db')->query($sql);
}
Acredito que faltaria algum ajuste na parte do Javascript. Alguém sabe o que pode ser?[/size]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em sugestão feita em outro site, mudei no view e ficou assim:

<div class="cadastraNovaReuniao" id="modalCadastraNovaReuniao" style='display:none'>
	<div style="width:60%">
		<form id="formReuniao" action="/cadAdmin/cadastraNovoEvento" method="POST" enctype="multipart/form-data">
			<div class="camposdadosreunioes"><b>{label_cadadmin_reunioes_unidade}<span style='color:#E76000'>*</span>:</b> 
				<span class="retornodadospessoaisselects">				
					<select id="selectUnidade">		
						<!-- BEGIN BLOCK_UNIDADES -->
						<option value="{OBJ->ID}">{OBJ->NOME}</option>
						<!-- END BLOCK_UNIDADES -->
					</select>
				</span>
			</div>
			<div class="camposdadosreunioes"><b>{label_cadadmin_reunioes_tipoinvestidor}<span style='color:#E76000'>*</span>:</b> 
				<span>
					<form>
					  	<input type="radio" value="P" name="tipoInvestidor" id="poolOpt">{label_cadadmin_reunioes_poolista}
						<input type="radio" value="C" name="tipoInvestidor" id="condOpt">{label_cadadmin_reunioes_condomino}
					</form>
				</span>
			</div>
			<div class="camposdadosreunioes"><b>{label_cadadmin_reunioes_tipoevento}<span style='color:#E76000'>*</span>:</b> 
				<span class="retornodadospessoaisselects">
					<select id="selectTipoEvento">		
						<option value="1">{label_cadadmin_reunioes_rcc}</option>
						<option value="2">{label_cadadmin_reunioes_ago}</option>
						<option value="4">{label_cadadmin_reunioes_age}</option>
					</select>			
				</span>
			</div>
			<div><b>{label_cadadmin_reunioes_datainicial}<span style='color:#E76000'>*</span>:</b> 
				<span><input id="dataInicialReuniao" class="dadosInputG" type="text" value=""></span>
			</div>
			<div><b>{label_cadadmin_reunioes_horainicial}:</b> 
				<span><input id="horaInicialReuniao" class="dadosInputG" type="text" value=""></span>
			</div>
			<div><b>Anexar Arquivo:</b> 
				<span>
					<span class="retornodadospessoais">
					<input id="anexoReuniao" type="file" size="30" class="dadosTypeFile" name="anexoReuniao">
					</span>
					<iframe name="upload_iframeReuniao" id="upload_iframeReuniao" style="display:none;"></iframe>
				</span>
			</div>
		</form>
	</div>
</div>

Até aí tudo bem. Mas as alterações no javascript sugeridas e que não deram certo foram:

 

1) Antes de $ajax, colocar:

var formData = new FormData($("#formReuniao")[0]);

2) Dentro do ajax, no campo data:

$.ajax({
    // .... seu código
    data: formData
    // .... seu código
});

O que mais eu poderia tentar? Ou o que mais eu poderia colocar de código aproveitando essas sugestões?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.