[resolvido] Ajuda Com Select Case - ASP - Fórum Script Brasil
[resolvido] Ajuda Com Select Case
Asked by Fabiano Furquim,
Criei um sistema de login onde são verificados varios paramentros para q o usuário possa acessar o conteúdo exclusovo.
Bom até ai tudo bem consegui, ele verifica td certinho, então pensei em usar um select case para redirecionar o usuário deiratamente para sua àrea dependo do seu cadastro, fiz o select e ele não direciona para a pagina.
Abaixo Segue código utilizado.:
Dim user, pass, pag, stt
stt = "A"
pag = "1"
Dim conObj
Set conObj = Server.CreateObject("ADODB.Connection")
conObj.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("charged.mdb") & ";"
Dim sql, modu
sql = "SELECT * FROM users WHERE user='" & user & "' AND pass='" & pass & "' AND situacao='"& stt &"' AND pag='" & pag &"'"
modu = "SELECT curso FROM users WHERE user='" & user & "' AND pass='" & pass & "' AND situacao='"& stt &"' AND pag='" & pag &"'"
' O código acima verifica se exite o usuario e a senha e se a situação e o pagamento estão em dia
Set rs = conObj.Execute(sql)
End If 'Se todas as condições forem obdecidas então o usuário sera logado e direcionado para pag
If login = true Then
Session("nxhvezzduzyslpkadmzlhnvozyoudgcuisj") = true
Session("dynamicUserId") = Session.SessionID
Select Case modu
case "adm" 'Administrador Site
Response.Redirect("..\authent\admin.asp")
case "mec" 'Mecânica
Response.Redirect("..\authent\mecanica.asp")
case "mct" 'Mecatrônica
Response.Redirect("..\authent\mecatronica.asp")
case "ele" 'Eltrônica
Response.Redirect("..\authent\eletronica.asp")
case "inf" 'Informática
Response.Redirect("..\authent\informatica.asp")
case "pro" 'Professores
Response.Redirect("..\authent\professores.asp")
case else 'Secretaria
Response.Redirect("..\authent\secretaria.asp")
Será q alguém poderia dar uma opinião sobre o q estou fazendo de errado, pois não consegui enchergar o erro...
Guest Ajudando por gostar de ajudar
Olá Fabiano Furquim.
Sua case não está funcionando por que não está claro o critério utilizado, em seu caso só foi nomeado fixamente o nome da case, anulando toda e qualquer referência a verificação do usuário.
Select Case (Critério, por exemplo usa session)
No exemplo 1 sua case está procurando uma string que seja equivalente a modu, ela não existe em sua case, e sim como nome de referência, um erro onde você acreditou que é simplesmente que seria o nome da case em si.Este foi seu erro.
No exemplo 2 temos a forma correta de usar case em seu caso, você está classificando por tipo de usuário, desta forma você deveria classificar a ordem da case como tal, isto foi feito corretamente, porem você errou em informar qual fonte de dados seria, por não conhecer está técnica você acreditou que houvesse um simples nome para referência (modu) poderia fazer a verificação partindo de uma string SQL, não funciona assim, você deve ter este dado e coloca-lo em uma session ou diretamente (NomeSQL(campo)), desta forma você teria sua avaliação e redirecionamento de forma correta. Dou-lhe um exemplo de como ficaria nas duas formas:
Forma com session:
Select Case (Session("dynamicUserId"))
Forma com SQL string:
Select Case (SQLSetNome("Campo_da_tabela"))
Espero ter ajudado você, boa sorte, gostaria de dar um conselho para você sobre programação; o grande segredo não é inventar e sim criar novas idéias conhecendo profundamente a tecnologia, desta forma você irá criar novos scripts para suas aplicações que serão exclusivos para seus trabalhos. Uma forma inteligente de aumentar sua renda, força ai, saber não é uma questão de estudar horas e sim de aproveitar as horas da melhor forma possível e produtivamente.
Não posso simplesmente igualar a variavél Modu ao q sera retornado de um select para depois usar o Select Case?
dim curso
curso = "select curso from users Where user='" & user &"' AND pass='" & pass &"' AND pag='"pago"'"
onde as variavéis User e pass são fornecidas na hora do login e a variável pag tem de ser a mesma sempre ou seja só tera acesso quem esta com o pagamento em dia, para depois eu veirficar qual seria a pagina apropriada para o usuário??
Edited August 29, 2007 by Fabiano Furquim
Não Fabiano.
O que você quer fazer é após está avaliação, ou seja, você cria uma string SQL que verifica todas estas informações, avaliando como validas ou não, em casos de validas você deve criar uma informação genérica de indique todos os critérios de avaliação feita pela string SQL, dou-lhe um exemplo:
Sua referência em sua case é o tipo de usuário:
Adm(Administrador Site), mec(Mecânica), mct(Mecatrônica), ele(Eltrônica), inf(Informática), pro(Professores), case else(Secretaria)
Neste caso você deve criar estas informações a partir do resultado se sua string SQL, caso todos os critérios de sua string SQL forem aprovados na avaliação, você dever criar uma session com a informação de tipo de usuário de acordo com a ordem de critério acima, exemplo após a avaliação de sua string SQL aprovando o acesso:
O usuário é um administrador do site, neste caso a case dele é "Adm" você deve criar um campo no banco de dados indicando o tipo de usuário desta forma; campo nome "tipo_de_usuario" dado "Adm". Desta forma você tem uma informação fixa relacionada ao usuário em caso.
Sua session:
Ela seria desta forma, Session("Tipo_usuario") = conObj("tipo_de_usuario")
A chamada seria desta forma em sua case:
Select Case (Session("Tipo_usuario"))
Sendo que o valor da case é "adm" e este critério existe em sua case, redirecionando para a url indicada.
Na verdade Fabiano case é uma espécie de porteiro eletrônico, ele não é solicitado pelo nome e sim por uma informação, ao informar que você é um usuário do tipo administrador (adm) ele pega está informação e ira procurar em qual case se pode encontrar a ocorrência caso encontre ela é executada, caso não encontre a case else será executada.
Sem uma informação de entrada é praticamente impossível executar os critérios das cases.
Pode deixar agora entendi o q estava fazendo de errado...
Muito Obrigado por me explicar onde eu estava errando..
Até a proxima e continue assim sempre apoiando..
Estou com um outro problema q acho agora ser mais simlpe de resolver... Fiz o q você me disse, consegui recuperar o conteúdo do bco de dados porem o select não esta redirecionando corretamente para a pagina q deveria ir..
já fiz um response.write e o conteúdo da Session esta de acordo com o q esta no bco....
Será q mais uma vez você poderia me ajudar?
Abaixo segue meu cod completo.:
'Session("Tipo_usuario") = conObj("curso")
Dim sql, modu, sem, cur
sem = "SELECT sem FROM users WHERE user='" & user & "' AND pass='" & pass & "' AND situacao='"& stt &"' AND pag='" & pag &"'"
'Captura o Semestre do usuario e senha digitados acima somente se estiver em dia com os pagamentos
modu = "SELECT modu FROM users WHERE user='" & user & "' AND pass='" & pass & "' AND situacao='"& stt &"' AND pag='" & pag &"'"
'Captura o Módulo do usuario e senha digitados acima somente se estiver em dia com os pagamentos
cur = "SELECT curso FROM users WHERE user='" & user & "' AND pass='" & pass & "'"
'Captura o curso do usuario e senha digitados digitados
Session("semestre") = sem 'Cria sessão semestre para testar em outra pagina
Session("Modulo") = modu 'Cria sessão Módulo para testar em outra pagina
Session("cur")= cur
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim ResPes 'Pega a informação no bco de dados
set ResPes = conObj.Execute(cur)
Session("tipo_usuario")=ResPes("curso")
Session("log") = true
Session("dynamiclog") = Session.SessionID
Select Case (Session("Tipo_Usuario"))
Response.Redirect("..\authent\online.asp")
Response.Redirect("..\authent\pag_mecanica.asp")
case "sec" 'Secretaria
Ele não da erro, mas sempre abre a pagina de erro.asp, onde o usuário é jogado quando a senha, usuário ou outro critério esta fora do padrão...