Jump to content
FabianoSouza

Recuperar valores de form multipart

Recommended Posts

Eu uso um form multipart para poder enviar dados e arquivo junto.

Para manipular o arquivo (imagem) uso um script para fazer upload sem uso de componentes. Tudo funciona.
Só ocorre erro quando tento recuperar valores de checkbox e radio se não estiverem marcados.

 

Queria saber se alguém pode ter ideia  onde possa estar o problema.

 

 

Para recuperar o valor dos campos uso dessa forma:

 

	Dim byteCount
	byteCount = Request.TotalBytes
	RequestBin = Request.BinaryRead(byteCount)
	Set UploadRequest = CreateObject("Scripting.Dictionary")
	BuildUploadRequest RequestBin

'Aqui recupero os valores do form
nome = UploadRequest.Item("nome").Item("Value")
dataNascimento = UploadRequest.Item("dataNascimento").Item("Value")

'Aqui ocorre erro se o checkbox do form não estiver marcado
favorito = UploadRequest.Item("favorito").Item("Value")

 

A "biblioteca" que faz o upload é essa (eu uso como um include):

 

<%
' Upload Sem componentes ---------------------------------------
Sub BuildUploadRequest(RequestBin)
on error resume next

PosBeg = 1
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
boundary = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
BoundaryPos = InStrB(1, RequestBin, boundary)

Do Until (BoundaryPos = InStrB(RequestBin, boundary & getByteString("--")))

Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")

Pos = InStrB(BoundaryPos, RequestBin, getByteString("Content-Disposition"))
Pos = InStrB(Pos, RequestBin, getByteString("name="))
PosBeg = Pos + 6
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
Name = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
PosFile = InStrB(BoundaryPos, RequestBin, getByteString("filename="))
PosBound = InStrB(PosEnd, RequestBin, boundary)

If PosFile <> 0 And (PosFile < PosBound) Then
PosBeg = PosFile + 10
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
FileName = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
UploadControl.Add "FileName", FileName
Pos = InStrB(PosEnd, RequestBin, getByteString("Content-Type:"))
PosBeg = Pos + 14
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
ContentType = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
UploadControl.Add "ContentType", ContentType

PosBeg = PosEnd + 4
PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
Value = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
Else
Pos = InStrB(Pos, RequestBin, getByteString(Chr(13)))
PosBeg = Pos + 4
PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
Value = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
End If

UploadControl.Add "Value", Value
UploadRequest.Add Name, UploadControl
BoundaryPos = InStrB(BoundaryPos + LenB(boundary), RequestBin, boundary)
Loop
End Sub

Function getByteString(StringStr)
For i = 1 To Len(StringStr)
Char = Mid(StringStr, i, 1)
getByteString = getByteString & ChrB(AscB(Char))
Next
End Function

Function getString(StringBin)
getString = ""
For intCount = 1 To LenB(StringBin)
getString = getString & Chr(AscB(MidB(StringBin, intCount, 1)))
Next
End Function
Server.ScriptTimeout=900
' Fim upload sem Componentes -----------------------------------------
%>

 

 

Share this post


Link to post
Share on other sites

Olá s3c0.

 

Já testei dessa maneira que sugeriu. Não funcionou.

Se eu usar

favorito = UploadRequest.Item("favorito").Item("checked")

o checkbox precisa estar sempre marcado, senão ocorre erro.

 

Consegui resolver usando isso.

 

  If UploadRequest.Exists("favorito") Then : favorito = 1 : Else : favorito = 0 : End if	

A lógica é:

-Se checkbox "favorito" existir (equivale a estar marcado no HTML) então faça a variável favorito = 1

-Se checkbox "favorito" não existir (equivale a não estar marcado no HTML) então faça a variável favorito = 0

 

Acho essa solução meio gambiarra. Mas resolveu.

 

 

Agora estou enfrentando problema com charset (trunca o texto em palavras com acento).

Já coloquei isso no topo da página e não resolveu :-( 
Se puder ajudar isso ficarei muuuuuito agradecido hehehe

Response.AddHeader "Content-Type", "text/html;charset=UTF-8" 'caractéres em PT-BR
Response.ContentType = "text/html"
Response.CharSet = "UTF-8"

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By vbnovak
      Pessoal, tudo bem?
       
      Eu infelizmente sou uma pessoa muito newbie no Access, e extremamente enferrujada no VBA, e eu tenho que criar um banco de dados para importar várias planilhas de Mês/Ano (Ex.: 012018; 022018) sempre do mesmo modelo/molde/afins, e no fim, gerar um relatório com as informações importadas. O modelo relatório e o modelo tabela estão prontos, entretanto, não sei como criar o formulário que faça:
       
      1º: Clicar no botão procurar arquivo;
      2º: Solicite o Mes/Ano do arquivo que será importado;
      3º: Abra a API do Windows de localizar arquivo;
      4º: Ao selecionar e importar o arquivo, dê baixa na tabela definida.
       
      A tabela e o arquivo tem todos as mesmas colunas, entretanto, eu inseri a coluna MesAno na tabela que deverá ser inserida conforme a pergunta que foi solicitada no formulário. Pois o relatório será gerado de acordo com essa coluna.
    • By Alesson Mendes
      Fala galera,
      Sou novato em Desenvolvimento Web, e estou precisando fazer uma inserção de dados sem atualizar a pagina.
      Preciso alterar varios valores de uma tabela, portanto fiz um table e dentro dele coloquei um form nos campos que desejo editar.
      O problema que quero utilizar a funçao onblur para fazer o submit a cada alteração. Consegui fazer isto definindo a rota no formulário e criando uma função javascript onblur.
      Porém ele manda para meu php, onde insere os dados mas redireciona a rota.
      vi em varios outros foruns, mas nao consegui implementar o AJAX no meu projeto.
      Conseguem me dar uma mão na no codigo, como utilizo o AJAX com o laravel.
      Muito obrigado
       
       
      <script type="text/javascript">
          $(document).ready(function(){
              $("#prest").on('blur', function() { //evento de sair de foco do edit
                  
                  var valor = $('#prest').val();
               $('#form').submit();//efetua submit no formulario
              });
                 
          });
      </script>
       
       
       
      <table>
                  <thead>
                      <tr>
                          <th>Cotação</th>
                          <th>Codigo</th>
                          <th>Descrição</th>
                          <th>Cod Barras</th>
                          <th>Qtde Cotação</th>
                      </tr>
                  </thead>
                  <tbody>
                      @foreach($registros as $registro)
                      <tr>
                          <td>{{ $registro->prod_codigo }}</td>
                          <td>{{ $registro->prod_descricao }}</td>
                          <td>{{ $registro->prod_barras}}</td>
                          <td>{{ $registro->prod_qtde}}</td>
                          <td>
                              <form action="{{ route('preco.incluir' , $registro->id) }}" method="post" class="" id="form" name="form" enctype="multipart/form-data">
                                  {{csrf_field()}}
                                  <input type="hidden" name="_method" value="put">
                                  <input type="text" name="prest" id="prest" value="" >
                              </form>
                          </td>
                      </tr>
                      @endforeach
                              </tbody>
                          </table>
    • By andrelimaverde
      Pessoal preciso de uma ajuda, desde já agradeço à todos.
      "Site teste, estudos..."
      Tenho um formulário com 3 etapas, ele está trabalhando em php normalmente e salvando os dados preenchidos em .txt (para testes apenas).
      Vamos lá, nas 3 etapas o form está com action="1.php" (2.php,  3.php) e method="post". [Não vou colocar muito código para simplificar, pois é um formulário básico fácil de entender]
      Exemplo:  Pagina 1 - envia para action '1.php'
      Nome: 
      Telefone:
      <input type="submit" value="Continuar">
      (
       O arquivo 1.php armazena os dados e redireciona => header( 'Location:Pagina2.php' ) ;   
       Assim como os outros php's
      )
      Pagina 2 - action 2.php armazena os dados e redireciona => header( 'Location:Pagina3.php' ) ; 
      Cidade:
      Endereço:
      <input type="submit" value="Continuar">
       
      A questão está na 3ª página
      Página 3 -
      Email:
      (Preciso que após preencher o campo da página 3 no caso "Email:",  ao clicar no botão, neste caso não sei se seria um submit ou button. O formulário não redirecionar para pagina 4, ao clicar ele enviar e salvar normalmente, mas aparecer um novo input na mesma pagina por Exemplo:"Twitter:"  ) 
      No caso preciso que ele não redirecione , gostaria de colocar um gif de carregando por 15 segundos por exemplo como se estivesse processando as informações... e em seguida ele apresentar o novo input do "Twitter:" , onde ai sim enviaria normalmente...
    • By jenner.filho
      Olá a todos,
       
      Estou com o seguinte problema no meu site,
      Tenho um campo de formulário que envia todos os dados digitados para meu e-mail e nesse mesmo site tenho um arquivo que faz conexão com meu banco de dados e envia os dados digitados pelo usuário para um tabela que posso usar futuramente para um marketing mail.
       
      O problema é, quando o html faz o envio das informações do site, toda informação que vai para o banco de dados vai em branco.
       
      Tem alguma forma de fazer com que não se perca as informações do metodo POST após o submit?
       
       
      FORMULÁRIO HTML
       
      <form action="" method="post" role="form" class="contactForm">
                      <div class="form-group">
                        <input type="text" name="name" class="form-control" id="name" placeholder="Nome" data-rule="minlen:4" data-msg="Informe pelo menos 4 caractéres" />
                        <div class="validation"></div>
                      </div>
                      <div class="form-group">
                        <input type="email" class="form-control" name="email" id="email" placeholder="Email" data-rule="email" data-msg="Por favor, insira um e-mail válido" />
                        <div class="validation"></div>
                      </div>
                      <div class="form-group">
                        <input type="text" class="form-control" name="subject" id="subject" placeholder="Título" data-rule="minlen:4" data-msg="Informe pelo menos 8 caractéres" />
                        <div class="validation"></div>
                      </div>
                      <div class="form-group">
                        <textarea class="form-control" name="message" rows="5" data-rule="required" data-msg="Please write something for us" placeholder="Mensagem"></textarea>
                        <div class="validation"></div>
                      </div>
                      <button type="submit" value="Send" class="btn btn-send">Enviar</button>
                    </form>

      SCRIPT PHP QUE ENVIA PARA MEU E-MAIL
       
      <?php

      // Variaveis para guardar as informações do formulário
      $destinatario = "jenner@aureatecnologia.com.br";
      $nome = $_POST['name'];
      $email = $_POST['email'];
      $mensagem = $_POST['message'];
      $assunto = $_POST['subject'];
          
      // Corpo do e-mail
      mail (
          "$destinatario", "$assunto", "
          
          E-mail enviado pelo site com as seguintes informacoes
          Nome: $nome
          Assunto: $assunto
          --
          Mensagem: $mensagem",
          "De: $email"
      );
      // Mensagem de confirmação de envio
      echo "Mensagem Enviada"
      ?>

      SCRIPT QUE ENVIA AS INFORMAÇÕES PARA MEU BANCO DE DADOS

       
      <?php
              include('conexao.php');
              
          $nome = $_POST['name'];
          $email = $_POST['email'];
      // Guarda informações no banco de dados
          $msg_decore="INSERT INTO contato(nome, email, data) values('$nome', '$email', NOW())";
          $resultado_msg_decore= mysqli_query($conexao, $msg_decore)
          
      ?>
    • By Luiz Henrique Mendes Tisco
      Boa tarde! Eu estou iniciando em delphi, sou bem novato. Porém estava querendo fazer com que ao pressionar um botão no form1 ele abrisse o form2 com uma informação calculada no label. Porém estou com problema na questão de fazer esses formulario se interligarem. Desde Já Agradeço. Talvez até chamando uma procedure do form1 para responder no form2
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.