Ir para conteúdo
fazeredo2002

Lista de checkbox usando Split

Recommended Posts

Bom dia a todos...

 

Estou com um projeto que, aparentemente, era simples e acabou se tornando uma dor de cabeça, que confesso está tirando o meu sono. Mas tenho certeza que com a ajuda de vocês seja possível resolvê-lo.

 

Vamos ao que interessa:

 

Segue uma estrutura de banco de dados como exemplo:

  • Tabelas (tbl_Cliente, tbl_Marcas)
  1. tbl_Cliente: id (auto-numeração), Nome (texto), MarcasAtivas (texto longo).
  2. tbl_Marcas: id (auto-numeração), Marca (texto).

 

Na página de inserção dos Dados segue o seguinte:

tbl_Marcas

ID

MARCAS

1

Volks

2

Ford

3

Chevrolet

4

Volvo

5

Fiat

 

tbl_Clientes

ID

CLIENTE

MARCASATIVAS

1

Teste1

1,3,5

2

Teste2

2,4

 

 

 

Agora vem o problema!

 

Preciso exibir todos as Marcas da tbl_Marcas e checkeed as marcas selecionada na tbl_Cliente.

Exemplo para o cliente Teste1:

Id: 1

Cliente: Teste1

MarcasAtivas: 

×

Volks

 

Ford

×

Chevrolet

 

Volvo

×

Fiat

 

Segue o código que estou usando até o momento:

<%
if rsClientes("MarcasAtivas") <> "" then
Dim texto, arrayTexto, i
Dim rs, sql, conexao
texto = (rsClientes.Fields.Item("MarcasAtivas").Value)
arrayTexto = Split(texto,",")

	set conexao = server.CreateObject("adodb.connection")
	set rs = server.CreateObject("adodb.recordset")
	
	localbd = MM_cnSystemBackstage_STRING
	conexao.open localbd

For i = 0 to Ubound(arrayTexto)

sql = "select id, MarcaAtivas from tbl_Marcas where id = "&arrayTexto(i)&""

rs.open(sql), conexao
Fabrica = rs("Fabrica")

response.Write("<input type='checkbox' name='txt_MarcasInternas' id="&arrayTexto(i)&" checked disabled='disabled'><label for="&arrayTexto(i)&"> "&Fabrica&"<br></label>")

rs.close()

next
end if

conexao.close()
set conexao = nothing
%>

Da forma descrita acima, só exibe as marcas selecionadas e não todas as marcas juntas.

Me ajude aí... please!

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá a modelagem do banco não está adequada o ideal seria ter uma tabela intermediária entre clientes e marcas... fazendo um muitos-para-muitos... mas da para resolver ... mas você quer montar um combo com as marcas ativas e por cliente ? seria por AJAX?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 14/03/2018 at 18:15, Gustavo Emygdio Barboza disse:

Olá a modelagem do banco não está adequada o ideal seria ter uma tabela intermediária entre clientes e marcas... fazendo um muitos-para-muitos... mas da para resolver ... mas você quer montar um combo com as marcas ativas e por cliente ? seria por AJAX?

Boa noite amigos!

 

Resolvi desta forma:

 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="Connections/cnSystemBackstage.asp" -->
<%
Dim conexao, rsClientes, rsMarcas, localbd, sqlClientes, sqlMarcas
   
   Set conexao = Server.CreateObject ("ADODB.Connection")
   Set rsClientes = Server.CreateObject ("ADODB.RecordSet")
   Set rsMarcas = Server.CreateObject ("ADODB.RecordSet")
   localbd = MM_cnSystemBackstage_STRING
   
   Conexao.open localbd
   sqlClientes = "Select *from tbl_Clientes"
   sqlMarcas = "Select *from tbl_Marcas"
   
   rsClientes.open(sqlClientes), conexao
   rsMarcas.open(sqlMarcas), conexao
   
   
if rsClientes("MarcasAtivas") <> "" then

While NOT rsMarcas.EOF

Dim texto, arrayTexto, i, x, id_marca
texto = rsClientes("MarcasAtivas")
arrayTexto = Split(texto,",")

x=0
For i = 0 to Ubound(arrayTexto)
id_Marca = arrayTexto(i)
id_Marca = int(id_Marca)

if rsMarca("id") = id_Marca then
response.Write("<input type='checkbox' name='txt_Marcas' id='txt_Marcas' checked='checked' /><label for='txt_Marcas'> Marca = "&rsMarca("Fabrica")&"</p>")
x=x+1
end if
next
if x=0 then
response.Write("<input type='checkbox' name='txt_Marcas' id='txt_Marcas' /><label for='txt_Marcas'> Marca = "&rsMarca("Fabrica")&"</p>")
end if

rsMarca.MoveNext()
wend

rsClientes.close()
set rsClientes = nothing

rsMarcas.close()
set rsMarcas = nothing

conexao.close()
set conexao = nothing
%>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi mais simples que imaginei ... mas é isso ai... trabalhar com asp tem que ser criativo... rs... já o .NET tem recurso para tudo que acaba nos moldando fazendo agente seguir a mesma reta... o problema do ASP clássico é pegar projetos de outros para continuar... pois o estilo desenvolvimento pode mudar muito...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por SeveroSoft
      Fala mentes brilhantes, como vocês estão? bem?
       
      Bom, hoje precisava de uma ajudinha de vocês, espero que consigam me dar uma força .
       
       
      Sistema:
      Estou desenvolvendo um sistema de atendimento em mesas de um restaurante.
      Para isso adicionei 1 select options que chama a tabela CATEGORIAS (SEGUE A IMAGEM)


      Ao selecionar a categoria (Por exemplo "Pizzas") Carrega as opções no outro Select Options abaixo que se chama produtos.

       
      Até ai tudo bem... Oque preciso agora é fazer com que ao SELECIONAR A OPÇÃO PIZZA mostre apenas os CHECKBOX que estão relacionados ao produto (Tem na tabela um campo chamado id_modificadores, que if o id_prod (Na tabela modificadores) == id_modificadores (Na tabela produtos) {
      }
      CÓDIGO QUE INFORMA OS MODIFICADORES.
      <?php while($reg3 = $query3->fetch_array()) { ?> <?php $nome_mod = $reg3["nome_mod"]; $nome_opt_mod = $reg3["nome_opcao_mod"]; $preco_mod = $reg3["preco_mod"]; $arrays = explode(',', $nome_opt_mod); $arrays_preco = explode(',', $preco_mod); echo "<br> <div class='col-sm-6'> <div class='card'> <h5 class='card-header'>$nome_mod</h5> <div class='card-body' name='id_modificadores' id='id_modificadores'> "; foreach($arrays as $valores) { echo "<div class='form-check'> <span type='hidden' class='switch switch-sm'><input type='checkbox' name='modificador[]' class='form-check-input' id='$valores' value='$valores'> <label for='$valores'><h5 class='card-title'>$valores</h5></label><br></div>"; } echo " </div> </div><br> </div>"; } ?> Aparentemente não entendo nada de AJAX, e o sistema que usei nos select options foi do CELKE, mas não funciona para checkbox. Lembrando que estes checkbox passam por um EXPLODE para se separarem pois eles vão para o banco de dados por ','.
       
      Desde-já agradeço a todos e tenham uma ótima semana. 
      Aguardo ansiosamente por esse HELP. 
       
      Atenciosamente Lucas Severo
       
    • Por Eddy Fernandes
      Olá galera,
       
      Estou desenvolvendo uma página com um form disparado para um link externo, mas antes preciso salvar os dados em um banco de dados. Não manjo muito de Javascript, então sou grato pela ajuda de quem puder ajudar. O código está assim:
       
      Página do form:
      <form action="URL-pra-onde-vao-os-dados-do-form" method="post" onSubmit="javascript:return Valida(this)"> Na mesma página do Form:
      <script language="JavaScript"> function Valida(form) { var formulario = document.getElementById('id-do-form-aqui'); <% set BD=server.createobject("adodb.connection") BD.open MM_global_STRING Dim rsATV : Set rsATV = Server.CreateObject("adodb.recordset") rsATV.Open "usuarios",BD,3,3 'Tentativa de correção de acentuação no BD bem sucedida. 'Response.CharSet = "windows-1250" 'Session.LCID = 1046'PADRÃO BRASILEIRO rsATV.AddNew rsATV("us_nome_real") = Request.Form("FNAME") rsATV("us_email") = Request.Form("EMAIL") rsATV("us_nome") = Request.Form("USUARIO") rsATV("us_senha") = Request.Form("SENHA") rsATV("us_confirme_senha") = Request.Form("CONFIRMESENHA") rsATV.Update rsATV.Close %> formulario.submit(); return false }; end function </script>  
      Os Form é enviado, o novo registro no banco é criado, mas sem os dados do form, ou seja, um registro em branco.
       
      Desde já agradeço a ajuda.
       
       
    • Por onedev
      Olá Pessoal,

      qual a forma mais segura de filtrar um upload asp de arquivos para somente imagens?

      Tentei reconhecer a extensão do arquivo e limitar apenas upload de arquivo .gif/.jpg e também filtrar pelo tipo de arquivo. Porém algum mal intencionado pode simplesmente renomear um arquivo malicioso para .gif, fazer o upload e depois acessar o arquivo para executa-lo. Alguém conhece ou recomenda algum filtro eficiente?

      Utilize os seguintes recursos:
      For Each File in Upload.Files 
         If File.ContentType <> "image/gif" Then 
            Resposta = "Arquivo enviado nao e um formato valido de imagem." 
            File.Delete 
         End If 
      Next
       
      For Each File in Upload.Files 
         If UCase(Right(File.Path, 3)) <> "gif" Then 
            Resposta = "Arquivo enviado nao e um formato valido de imagem." 
            File.Delete 
         End If 
      Next
       
    • Por netocazuza
      Estou trabalhando num formulário de cadastro onde aparece o número da certidão de nascimento. Como já devem saber, existe o antigo formato de certidões, com nome do cartório, termo, livro e folha (4 campos), e um formato novo de campo único, com 32 dígitos, onde estão implícitas todas essas informações. Coloquei no meu formulário apenas um campo de texto para colocar esses 32 dígitos da nova certidão, e apenas um checkbox chamado certidão antiga, que quando clicado (checado) irá fazer aparecer os quatro campos para preenchimento com os dados das certidões antigas. Pensei em colocar hidden no campo, e através de um if, mudar para text quando checado. Mesmo pra essa idéia simples, não consigo achar a sintaxe. Alguém tem uma solução pra esse problema?
    • Por dezoldan
      Quero obter e passar para uma outra página um valor da coluna do listView. Os campos do ListView: ID: 01; Nome: Daniel; Campo: campo; <%# Eval("campo").ToString() == "nada consta" ? "nada consta" : Eval("campo") + "<a href='Promocao.aspx'> ... + infos</a>"%>  
      Quando usuário clicar em "... + infos" quero pegar o "ID" e o "Nome" e levar pra outra página.
×

Informação importante

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