10
I have a problem and I can not solve, I’m trying to upload via ajax
and php
, I already got some tips here by SO
, But I’m still in trouble, and I know the big chance that I’m doing something stupid is huge.
I’ll try to show.
I have a form that is configured like this:
<form enctype="multipart/form-data" class="form-horizontal" id="frmDoc" method="POST">
<!-- CONTEÚDO -->
The code that should send the information is like this:
$(document).ready(function(){ $(function () { // Validation $("#frmDoc").validate({ // Do not change code below errorPlacement: function (error, element) { error.insertAfter(element.parent()); }, submitHandler: function (form) { var data = new FormData(form[0]); // console.log(data); $.ajax({ type: 'POST', url: 'ajax/pDocsNormativos.php', data: data, dataType: 'json', cache: false, contentType: false, processData: false, beforeSend: function () { $("#msgInsert").html('×AVISO! Enviando...'); }, success: function (response) { if (response.codigo == "1") { $("#msgInsert").html('×AVISO!' + response.mensagem + ''); } else { $("#msgInsert").html('×ATENÇÃO! ' + response.mensagem + ''); } // $('#frmDoc').each (function(){ // this.reset(); // }); }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr, ajaxOptions, thrownError); $("#msgInsert").html('×ATENÇÃO! Ocorreu um erro ao tentar enviar o Documento. Contate o suporte técnico.'); } }); return false; } }); }); });
And in PHP I have this:
// VARIÁVEL DE CONTROLE $retorno = array(); // FUNÇÃO PARA CONVERTER DATAS function parseDate($date, $outputFormat = 'd/m/Y'){ $formats = array( 'd/m/Y', 'd/m/Y H', 'd/m/Y H:i', 'd/m/Y H:i:s', 'Y-m-d', 'Y-m-d H', 'Y-m-d H:i', 'Y-m-d H:i:s', ); foreach($formats as $format){ $dateObj = DateTime::createFromFormat($format, $date); if($dateObj !== false){ break; } } if($dateObj === false){ throw new Exception('Data invalida:' . $date); } return $dateObj->format($outputFormat); } // DIRETÓRIO $diretorio = 'upload/'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { // DADOS DO FORMULÁRIO $TipoDoc = $_POST['TipoDoc']; $Divisao = $_POST['Divisao']; $Area = $_POST['AreaBusca']; $Pasta = $_POST['Pasta']; $Data = $_POST['Data']; $Numero = $_POST['Numero']; $Revisao = $_POST['Revisao']; $Titulo = $_POST['Titulo']; $Link = $Pasta; $NomePasta = $Pasta; $NomePasta = substr($NomePasta, 13); $NomePasta = rtrim($NomePasta,'/'); // VALIDAÇÕES DE PREENCHIMENTO if ($TipoDoc == 0): $retorno = array('codigo' => 0, 'mensagem' => ' Selecione um Tipo de Documento'); echo json_encode($retorno); exit(); endif; if ($Divisao == 0): $retorno = array('codigo' => 0, 'mensagem' => ' Selecione uma Divisão'); echo json_encode($retorno); exit(); endif; if ($Area == 0): $retorno = array('codigo' => 0, 'mensagem' => ' Selecione uma Área'); echo json_encode($retorno); exit(); endif; if (empty($Data)): $retorno = array('codigo' => 0, 'mensagem' => ' Preencha a Data do cadastro'); echo json_encode($retorno); exit(); endif; if (empty($Numero)): $retorno = array('codigo' => 0, 'mensagem' => ' Preencha o campo Número'); echo json_encode($retorno); exit(); endif; if (empty($Titulo)): $retorno = array('codigo' => 0, 'mensagem' => ' Preencha o campo Título'); echo json_encode($retorno); exit(); endif; if(!isset($_FILES['Arquivo'])): $retorno = array('codigo' => 0, 'mensagem' => ' Informe o arquivo para Upload'); echo json_encode($retorno); exit(); endif; // CONVERTENDO DATAS PARA BD $Data = parseDate($Data, "Y-m-d"); $name = $_FILES['fileUpload']['name']; $tmpName = $_FILES['fileUpload']['tmp_name']; $error = $_FILES['fileUpload']['error']; $size = $_FILES['fileUpload']['size']; $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); switch ($error) { case UPLOAD_ERR_OK: $valid = true; //validate file extensions if ( !in_array($ext, array('pdf')) ) { $valid = false; $retorno = array('codigo' => 1, 'mensagem' => 'Extensao de arquivo invalida '); echo json_encode($retorno); exit(); } //validate file size if ( $size/1024/1024 > 2 ) { $valid = false; $retorno = array('codigo' => 1, 'mensagem' => 'Tamanho do arquivo e superior a tamanho maximo permitido'); echo json_encode($retorno); exit(); } //upload file if ($valid) { $targetPath = dirname( __FILE__ ) .'/'. $diretorio . '/'. $name; move_uploaded_file($tmpName,$targetPath); // INSERE DADOS $arrayDados = array('DataEmissao' => $Data, 'IdDivisao' => $Divisao, 'IdArea' => $Area, 'Numero' => $Numero, 'Titulo' => $Titulo, 'Link' => $Link, 'Tipo' => $TipoDoc, 'Status' => 1, 'Revisao' => $Revisao, 'Pasta' => $NomePasta); $retorno = $crud->insert($arrayDados); // Se inserido com sucesso código 1, senão retorna mensagem de erro if ($retorno): $retorno = array('codigo' => 1, 'mensagem' => ' Documento Normativo inserido com sucesso'); echo json_encode($retorno); exit(); else: $retorno = array('codigo' => '0', 'mensagem' => $TipoDoc); echo json_encode($retorno); exit(); endif; } break; case UPLOAD_ERR_INI_SIZE: $retorno = array('codigo' => 1, 'mensagem' => 'O arquivo enviado excede a directiva upload_max_filesize em php.ini.'); echo json_encode($retorno); break; case UPLOAD_ERR_PARTIAL: $retorno = array('codigo' => 1, 'mensagem' => 'O arquivo foi enviado parcialmente.'); echo json_encode($retorno); break; case UPLOAD_ERR_NO_FILE: $retorno = array('codigo' => 1, 'mensagem' => 'Nenhum arquivo foi tranferido.'); echo json_encode($retorno); break; case UPLOAD_ERR_NO_TMP_DIR: $retorno = array('codigo' => 1, 'mensagem' => 'Faltando uma pasta temporaria. Introduzida no PHP 4.3.10 e PHP 5.0.3.'); echo json_encode($retorno); break; case UPLOAD_ERR_CANT_WRITE: $retorno = array('codigo' => 1, 'mensagem' => 'Falha ao gravar arquivo em disco. Introduzido no PHP 5.1.0.'); echo json_encode($retorno); break; default: $retorno = array('codigo' => 1, 'mensagem' => 'Erro desconhecido'); echo json_encode($retorno); break; } } else { //Envia um erro acaso o usuário tente acessar o script por outros métodos $retorno = array('codigo' => 1, 'mensagem' => 'Método HTTP não suportado para esta ação'); echo json_encode($retorno); exit(); } header('Content-Type: application/json'); echo json_encode($retorno);
I am unable to send the form fields, because my console gives me the following message, I will post an image not to complicate too much, see:
Following the suggestion, I’m sharing the html
of form
:
<div class="widget-body">
<form enctype="multipart/form-data" class="form-horizontal" id="frmDoc" method="POST">
<fieldset>
<legend>Adicionar Instrução Normativa</legend>
<div class="form-group">
<label class="col-md-2 control-label" for="select-2">Tipo Doc</label>
<div class="col-md-10">
<select class="form-control" id="TipoDoc" name="TipoDoc">
<option value="0">Tipo Documento</option>
<option value="1">Instrução Normativa</option>
<option value="2">Circular Transitória</option>
<option value="3">Manual Operacional</option>
<option value="4">Missão</option>
<option value="5">Visão</option>
<option value="6">Princípios e Valores</option>
<option value="7">Código de Ética</option>
<option value="8">Regulamento Interno</option>
<option value="9">Organograma</option>
<option value="10">Estatuto Social</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="select-1">Divisão</label>
<div class="col-md-10">
<select class="form-control" name="Divisao" id="Divisao" onchange="buscaDadosArea()">
<option value="0">Divisão</option>
<?php foreach ($ResDivisao as $Divisao) { ?>
<option value="<?php echo $Divisao->IdDivisao ?>"><?php echo $Divisao->Nome ?></option>
<?php } ?>
</select>
</div>
</div>
<!-- RESULTADO DA BUSCA PELA DIVISÃO -->
<div class="form-group" id="Area"> </div>
<!-- RESULTADO DA BUSCA PELA ÁREA -->
<div class="form-group" id="Pasta"> </div>
<div class="form-group">
<label class="col-md-2 control-label">Data</label>
<div class="col-md-10">
<input type="text" class="form-control datepicker" data-lang="pt-BR" data-RTL="false" value="" name="Data" id="Data" data-dateformat="dd/mm/yy">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Numero</label>
<div class="col-md-10">
<input name="Numero" type="text" class="form-control" id="Numero" placeholder="Número" />
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Revisão</label>
<div class="col-md-10">
<input name="Revisao" type="text" class="form-control" id="Revisao" placeholder="Revisão" />
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Título</label>
<div class="col-md-10">
<input name="Titulo" type="text" class="form-control" id="Titulo" placeholder="Título" />
</div>
</div>
<legend>Selecione o PDF</legend>
<div class="form-group">
<label class="col-md-2 control-label">Arquivo</label>
<div class="col-md-10">
<input type="file" class="btn btn-default" id="fileUpload" name="fileUpload">
<p class="help-block"> Extensão permitida <strong>PDF</strong>. </p>
</div>
</div>
</fieldset>
<div class="form-actions">
<div class="row">
<div class="col-md-12">
<button class="btn btn-primary" type="submit"> <i class="fa fa-save"></i> Gravar </button>
</div>
</div>
</div>
</form>
<div id="msgInsert" style="padding: 10px;">
<!-- Mensagens -->
</div>
</div>
Shares the
html
of<form/>
. Because php is not finding the indexes in the post Tipodoc, Divisao, ...– Carlos Fernandes
What library are you using to validate the form?
– Carlos Fernandes