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 duarte.php
      Boa noite, pessoal, estou fazendo meu tcc (nível técnico kkk) e preciso de ajuda com uma conexão com o banco.
       
      Fiz um formulário para consultar empréstimos em uma biblioteca através do rm (id) e exibir os dados que estão cadastrados neste rm. 
      Estou com dificuldades para que os dados sejam puxados e exibidos na página. 
       
      Esta é a parte que pede o RM no html
      <h4 class="title">Insira o seu RM: </h4> <input type="text" name="rm" class="form-control" required/>  
      Este é o código php
      <?php $rm = $_POST['rm']; include("conecta.php"); $busca = mysql_query("SELECT * FROM tb_locador WHERE rm='$rm'"); $dado = mysql_fetch_array($busca); $nome = $dado['nome']; $ano = $dado['ano']; $curso = $dado['curso']; $tel = $dado['tel']; echo "RM: " . $rm . "<br>"; echo "Nome do locador: ".$nome. "<br>"; echo "Curso do locador: ".$curso. "<br>"; echo "Ano de início do curso: ".$ano. "<br>"; echo "Telefone do locador: ".$tel. "<br>"; ?> Até então, o único dado exibido é o RM, como faço para exibir o nome, curso, ano e telefone? 
       
    • By ROGERIO AMERICA
      Boa tarde. Possuo 1 bd com tabela principal empresa=(não editável), atendente=(não editável), consultor=(não editável), operadoras=(não editável), e a "agenda" que é editável. Criei uma página www onde eu mostraria os dados empresa juntamente com campos "agenda" para trabalhar com as informações disponíveis e coletadas para gerar dados na agenda. Gostaria que pudessem me ajudar ou indicar uma forma onde eu possa unir todos dados envolvidos nessa agenda conforme figuras.
      O código abaixo mostra os dados do cliente:
      <form> <input type="text" size="5" name="id_empresa" value="<?php echo $empresa['id_empresa']; ?>"><br></br> <input type="text" size="12" name="cnpj" value="<?php echo $empresa['cnpj']; ?>"> <input type="text" size="53" name="empresa" value="<?php echo $empresa['empresa']; ?>"><br></br> <input type="text" size="33" name="endereço" value="<?php echo $empresa['endereço']; ?>"> <input type="text" size="3" name="nº" value="<?php echo $empresa['nº']; ?>"> <input type="text" size="24" name="complemento" value="<?php echo $empresa['complemento']; ?>"><br></br> <input type="text" size="23" name="bairro" value="<?php echo $empresa['bairro']; ?>"> <input type="text" size="22" name="cidade" value="<?php echo $empresa['cidade']; ?>"> <input type="text" size="3" name="uf" value="<?php echo $empresa['uf']; ?>"> <input type="text" size="7" name="cep" value="<?php echo $empresa['cep']; ?>"><br></br> <input type="text" size="35" name="admin" value="<?php echo $empresa['contato']; ?>"> <input type="text" size="11" name="fone1 " value="<?php echo $empresa['fone1']; ?>"> <input type="text" size="11" name="fone2" value="<?php echo $empresa['fone2']; ?>"><br></br> <input type="text" size="40" name="email" value="<?php echo $empresa['email']; ?>"> <input type="text" size="3" name="linhas ativas" value="<?php echo $empresa['linhas ativas']; ?>"> <input type="text" size="8" name="vencimento" value="<?php echo $empresa['vencimento']; ?>"> </form> O código abaixo mostra os campos editáveis:
      $tem plano = $_POST["tem plano"]; $qtde de linhas = $_POST["qtde de linhas"]; $fatura media = $_POST["fatura media"]; $visita = $_POST["visita"]; $data = $_POST["data"]; $hora = $_POST["hora"]; $tipo de visita = $_POST["tipo de visita"]; $resenha = $_POST["resenha"];
           
          $string_sql = "INSERT INTO agenda (plano,qtde de linhas,fatura media,visita,data, hora,tipo de visita, resenha ) VALUES (null,'$plano','$qtde de linhas','$fatura','$visita','$data','$hora','$tipo de visita','$resenha')"; //String com consulta SQL da inserção
           
          mysql_query($string_sql,$conexao); //Realiza a consulta
           
       
      if(mysql_affected_rows() == 1){ //verifica se foi afetada alguma linha, nesse caso inserida alguma linha echo "<p>Cadastro feito com sucesso</p>"; echo '<a href="empresa.php">Voltar para formulário de cadastro</a>'; //Apenas um link para retornar para o formulário de cadastro } else { echo "Erro, não possível inserir no banco de dados"; } mysql_close($conexao); //fecha conexão com banco de dados ?> abaixo temos a premissa de funcionamento: 
       

      e abaixo temos a suposta tela de trabalho:"ainda esta sem CSS" 

      Como fazer para o form alimentar a tabela agenda sendo que 1 parte dos dados é só para visualização e a outra é editável e ao salvar, ir para próxima empresa? Obs: Estou querendo implementar isso pois descobri que a empresa de CRM que eu pagava estava vendendo Mailing para concorrentes. (era pago)
       
    • 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...
×

Important Information

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