Ir para conteúdo

POWERED BY:

Arquivado

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

natalia

[Resolvido] Recuperar dados de formulário do tipo multipart/form-

Recommended Posts

Oi pessoal, estou com um probleminha em meu formulário.

 

Eu tenho uma lista de cargos dentro de um select multiple, mas não consigo recuprar os itens selecioandos porque o formulário é do tipo enctype="multipart/form-data". Eu selecione vários cargos, mas só consigo recuperar apenas 1 dos itens selecionados.

 

Como devo fazer? Não quero usar checkbox pois são muitas opções de cargos.

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem que fazer uma "gambiarra" em javascript. Dá prafazer usando jquery, fica mais simples. O problema ocorre porque ao clicar no botão para submeter, os valores selecionados são perdidos, o que se faz é manipular a seleção após o clique. Seu problema não está no form mas sim no select

<script>
 function selecionarTodos(opt){
 if (opt.length > 0){
 for (i = 0 ; i < opt.length ; i++){
 opt[i].selected = true;
 }
 return true;
 }
 return false;
 }

function validarEditar(frm){
selecionarTodos(lojaSelecionada.options);
document.getElementById(frm).submit();
}
</script>
<body>
<form name="frmEditar" id="frmEditar">
<select name="lojaSelecionada" id="lojaSelecionada" multiple size="6">
 <option value="12" >Loja 2</option>
 <option value="13" >Loja 3</option>
</select>
<input type="button" onclick="validarEditar('frmEditar');" name="btnSalvar" id="btnSalvar" value="Salvar" />
</form>
</body>

Compartilhar este post


Link para o post
Compartilhar em outros sites

certa vez, precisei fazer um form de pesquisa bem grande mesmo, e reparei k alguns users, naun fazia a multipla escolha, e para isso, eu disponibilizei para ele, um dropdown k se caso tivesse, dependendo da escolha ele automaticamente preencheria o outro combo, mas o k deve se fazer é recuperar os dados, dá um split nele para pegar os valores, ou como citado acima com javascript.

 

dá uma olhada neste link, pode te ajudar

 

olha este exemplo:

 

<<%
Dim intNumberSelected 
Dim strSelectedTeams 
Dim arrSelectedTeams
Dim I              
	

intNumberSelected = Request.Form("teams").Count
	
If intNumberSelected = 0 Then
	%>
	Escolha seus times favoritos (segure a tecla CTRL para selecionar mais de um):<BR>
	
	<FORM ACTION="multiple_selection.asp" METHOD="post">

	
		<SELECT NAME="teams" MULTIPLE SIZE="10">
			<OPTION>Anaheim Angels</OPTION>
			<OPTION>Atlanta Braves</OPTION>
			<OPTION>Arizona Diamondbacks</OPTION>
			<OPTION>Baltimore Orioles</OPTION>
			<OPTION>Boston Red Sox</OPTION>
			<OPTION>Chicago Cubs</OPTION>
			<OPTION>Chicago White Sox</OPTION>
			<OPTION>Cincinnati Reds</OPTION>
			<OPTION>Cleveland Indians</OPTION>
			<OPTION>Colorado Rockies</OPTION>
			<OPTION>Detroit Tigers</OPTION>
			<OPTION>Florida Marlins</OPTION>
			<OPTION>Houston Astros</OPTION>
			<OPTION>Kansas City Royals</OPTION>
			<OPTION>Los Angeles Dodgers</OPTION>
			<OPTION>Milwaukee Brewers</OPTION>
			<OPTION>Minnesota Twins</OPTION>
			<OPTION>Montreal Expos</OPTION>
			<OPTION>New York Mets</OPTION>
			<OPTION>New York Yankees</OPTION>
			<OPTION>Oakland Athletics</OPTION>
			<OPTION>Philadelphia Phillies</OPTION>
			<OPTION>Pittsburgh Pirates</OPTION>
			<OPTION>San Diego Padres</OPTION>
			<OPTION>San Francisco Giants</OPTION>
			<OPTION>Seattle Mariners</OPTION>
			<OPTION>St. Louis Cardinals</OPTION>
			<OPTION>Tampa Bay Devil Rays</OPTION>
			<OPTION>Texas Rangers</OPTION>
			<OPTION>Toronto Blue Jays</OPTION>
		</SELECT>

		<BR>

		<INPUT type="submit" value="enviar">

	</FORM>
	<%
Else
	
	arrSelectedTeams = Split(strSelectedTeams, ", ", -1, 1)


	'
	'ReDim arrSelectedTeams(intNumberSelected - 1)
	'
	'For I = 1 To intNumberSelected
	'	arrSelectedTeams(I - 1) = Request.Form("teams")(I)
	'Next 'I
	'

	%>
	<P>você selecionou <B><%= intNumberSelected %></B> team(s).</P>

	<P>Request.Form("teams") retornou</P>
	<P><FONT SIZE="-1"><B><%= strSelectedTeams %></B></FONT></P>

	<P>Você pode facilmente converter isso em um array usando o comando split. O conteúdo dessa matriz são mostrados na tabela abaixo:</P>
	
	<TABLE BORDER="1">
		<TR>
			<TH>Array Element <FONT COLOR="#FF0000">*</FONT></TH>
			<TH>Value</TH>
		</TR>
		<%
	
		For I = LBound(arrSelectedTeams) To UBound(arrSelectedTeams)
			%>
			<TR>
				<TD><%= I %></TD>
				<TD><%= arrSelectedTeams(I) %></TD>
			</TR>
			<%
		Next 'I
		%>
	</TABLE>
	
	<P><FONT COLOR="#FF0000">*</FONT> Lembre-se que matrizes de VBScript iniciar a contagem de 0. Assim, uma matriz de 10 item será executado 0-9!</P>
	<%


	'Dim Item
	'For Each Item in Request.Form
	'	Response.Write Request.Form.Key(Item) & ": "
	'	Response.Write Request.Form.Item(Item) & " "
	'	Response.Write Request.Form.Item(Item).Count & "<BR>"
	'Next
End If
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar explicar melhor. Os valores selecionados não estão sendo perdidos, eu acho.

No formulário normal, todos os itens selecionados são recuperados. Mas no formulário do tipo multipart/form-data não. Se eu seleciono 3 cargos, só um vem.

O problema tá nessa linha:

 

CodCargo = UploadRequest.Item("CodCargo").Item("Value")

 

Para recuperar os dados eu utilizo a linha acima, e funciona normalmente. Mas para o select multiple não. Tem que ser diferente, mas não sei como.

 

Vou postar um trecho do código:

<!-- #include file = "Scripts/Funcoes.asp" -->


<%
	' Chamando Funções, que fazem o Upload funcionar
	byteCount = Request.TotalBytes
	RequestBin = Request.BinaryRead(byteCount)
	Set UploadRequest = CreateObject("Scripting.Dictionary")
	BuildUploadRequest RequestBin
	
	' Recuperando os Dados Digitados ----------------------
	CodCargo = UploadRequest.Item("CodCargo").Item("Value")

	tipo_arquivo = UploadRequest.Item("Arquivo").Item("ContentType")
	caminho_arquivo = UploadRequest.Item("Arquivo").Item("FileName")
	nome_arquivo = Right(caminho_arquivo,Len(caminho_arquivo)-InstrRev(caminho_arquivo,"\"))
	arquivo = UploadRequest.Item("Arquivo").Item("Value")
	
	' pasta onde os arquivos serao guardados
	pasta = Server.MapPath("Arquivos")
	nome_arquivo = Senha&nome_arquivo
	nome_arquivo_banco = "\"&nome_arquivo
	
	
	' Fazendo o Upload do arquivo selecionado
	If arquivo <> "" Then
		Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
		Set MyFile = ScriptObject.CreateTextFile(pasta & nome_arquivo_banco)
		For i = 1 to LenB(arquivo)
			MyFile.Write chr(AscB(MidB(arquivo,i,1)))
		Next
		MyFile.Close
	End If
%>

Até testei os 2 exemplos que vcs enviaram, o primeiro não funcionou e o segundo ocorre o mesmo problema, só um cargo é recuperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah tá

 

tens que fazer um For Each no item pois ele armazena um conjunto de valores

Acho que assim deve funcionar

For Each valor In UploadRequest.Item("CodCargo")
response.write valor.Item("Value") & "<br>"
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa o exemplo k colokei acima ele recupera todos os itens selecionados no SELECT MULTIPLE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu usei mas não dá certo. Para formulário com enctype="multipart/form-data" ele não funciona.

Meu formulário faz upload, então eu recupero os dados assim:

CodCargo = UploadRequest.Item("CodCargo").Item("Value") e não com request.form. É aqui que está o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas apenas os itens selecionados da select multiple, você pode até armazenar em session e depois usar

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que ocorre se você fizer assim:

 

For Each valor In UploadRequest.Item("CodCargo")
response.write valor & "<br>"
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode usar a funcaun em js e armazenar os itens selecionados em uma var e depois recuperar no ASP...

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz tempo que não mexo com upload sem componente. Mas me veio na mente uma "solução" em forma de POG.

 

ao clicar no check você varre todos da coleção, via javascript, e pega os values dos checados e joga num input do tipo hidden(separando-os com virgula). No request você faz desse hidden que terá todos os values dos cheks

 

///EDIT

Enquanto salvava minha ideia(post) abri o link que você achou e a logica é a mesma hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi a lógica, mas não manjo de javascript. Então fiz um teste assim, mas não funcionou.

<script language="JavaScript" type="text/javascript">
<!--
function Carrega() 
{
vConta = 0   

vCombo = document.formulario.Combo; 

for(i=0;i<vCombo.options.length;i++)
    {
      if(vCombo.options[i].selected==true)
      {
        vConta = vConta + 1
        if(vConta==1){
          document.getElementById("campo_hidden").value +=vCombo.options[i].value;
        }
        else{
          document.getElementById("campo_hidden").value +=","+vCombo.options[i].value;
        }
      }
}
//-->
</script>

        
        <FORM name="formulario" ACTION="teste3.asp" METHOD="post" enctype="multipart/form-data" onSubmit="Carrega();">
			<input type="hidden" name="campo_hidden">
        
                <SELECT NAME="Combo" MULTIPLE SIZE="10">
                        <OPTION value="1">Cargo 1</OPTION>
                        <OPTION value="2">Cargo 2</OPTION>
                        <OPTION value="3">Cargo 3</OPTION>
                        <OPTION value="4">Cargo 4</OPTION>
                        <OPTION value="5">Cargo 5</OPTION>
                </SELECT><BR>
                
               <input type="file" name="Arquivo"><BR>

               <INPUT type="submit" value="enviar">

        </FORM>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora funcionou. Faltava uma "}" no código.

 

Obrigada a todos pela ajuda.

 

Para quem precisar tá aqui:

<script language="JavaScript" type="text/javascript">
<!--
function Carrega() 
{
vConta = 0   

vCombo = document.FormCurriculo.Combo; 

for(i=0;i<vCombo.options.length;i++)
    {
      if(vCombo.options[i].selected==true)
      {
        vConta = vConta + 1
        if(vConta==1){
          document.getElementById("campo_hidden").value +=vCombo.options[i].value;
        }
        else{
          document.getElementById("campo_hidden").value +=","+vCombo.options[i].value;
        }
      }
	  }
}
//-->
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, kker coisa pasta ae...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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