Aesir 0 Denunciar post Postado Maio 14, 2011 Criei esse script para fazer a seguinte função: Entrar no BD e pegar o nivel do usuario na tabela "cadastro" onde (1=Administrador e 2=Moderador) em seguida checar qual o nivel do usuario e redirecionalo para sua respectiva pagina porém o script não funciona porque? <?php require_once("conexao.php"); $nivel = 'nivel'; switch ( $nivel["nivel"]) { case "1": { $pagina = "admin.php"; break; } case "2": { $pagina = "moderador.php"; break; } default: { $pagina = "login.php"; break; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Annyh 4 Denunciar post Postado Maio 14, 2011 a variável $nivel ta pegando o 'nivel' da onde? formulario? então tem que ser assim: $nivel = $_POST['nivel']; // metodo post $nivel = $_GET['nivel']; // metodo get sacou? Compartilhar este post Link para o post Compartilhar em outros sites
Nandel 1 Denunciar post Postado Maio 14, 2011 olha seu erro $nivel = 'nivel'; aqui voce declara como $nivel não é uma array. depois voce usa $nivel["nivel"]. então o resultado sempre sera $pagina = "login.php". o sistema funciona, o caso é que esta mal trabalhado. Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Maio 15, 2011 Porque você não estudou absolutamente nada e já quis faze-lo. Compartilhar este post Link para o post Compartilhar em outros sites
Aesir 0 Denunciar post Postado Maio 15, 2011 Fiz desse jeito agora porém o script não pega o "nivel" na tabela porque? CREATE TABLE `cadastro` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , [color="#FF0000"]`nivel` enum('1','2') NOT NULL default '2',[/color] `email` VARCHAR( 200 ) NOT NULL , `login` VARCHAR( 200 ) NOT NULL , `senha` VARCHAR( 200 ) NOT NULL , `repitasenha` VARCHAR( 200 ) NOT NULL ) ENGINE = MYISAM ; <?php require_once("conexao.php"); $nivel = $_POST['nivel']; $paga = "admin.php"; $pagb = "moderador.php"; $pagc = "login.php"; if ( $nivel == 1) { header("Location: $paga"); break; } else { if( $nivel == 2) { header("Location: $pagb"); break; } else{ header("Location: $pagc"); break; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 15, 2011 <!doctype html> <html> <head> <meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" /> </head> <body> <fieldset> <form method="post"> <label for="login">Login</label> <input type="text" name="login" size="35" /> <label for="senha">Senha</label> <input type="password" name="senha" size="35" /> <input type="submit" name="doLogin" value="Fazer Login" /> </form> </fieldset> <?php if(isset($_POST['doLogin'])){ $PDO = new PDO( 'mysql:host=localhost;dbname=seu banco', 'root', 'sua senha' ); $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); $PDO->setAttribute( PDO::ATTR_TIMEOUT, 5 ); $SQLUsers = $PDO->prepare( 'SELECT * FROM `cadastro` WHERE `login` = :login AND `senha` = :senha' ); $SQLUsers->bindParam( ':login', $_POST['login'], PDO::PARAM_STR ); $SQLUsers->bindParam( ':senha', $_POST['senha'], PDO::PARAM_STR ); $SQLUsers->execute(); if( $SQLUsers->rowCount() == 1 ){ $Data = $SQLUsers->fetch( PDO::FETCH_ASSOC ); switch( $Data['nivel'] ){ /** * Se o nível for 1, redireciona para admin.php */ case 1: echo '<meta http-equiv="refresh" content="0;admin.php" />'; #header("Location: admin.php"); break; /** * Se o nível for 2, redireciona para moderador.php */ case 2: echo '<meta http-equiv="refresh" content="0;moderador.php" />'; #header("Location: moderador.php"); break; /** * default como membro, caso não for nenhum * dos níveis .. */ default: echo '<meta http-equiv="refresh" content="0;membro.php" />'; #header("Location: membro.php"); break; } } } ?> </body> </html> ... Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Maio 15, 2011 Ao invés do case porque não um array e um concat na index do array relativa ao nivel? define('DEFAULT', 0); $arr = array( 1 => 'admin', 2 => 'moderador', DEFAULT => 'membro'); //... header(sprintf('Location: %s.php', $arr[$nivel])); Fora isso,estuda. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 15, 2011 @eibon, boa ídeia, assim não seria necessário mudar o switch toda hora .. Enfim, sem falar da estrutura da tabela dele, que tá uma porcaria =) :joia: Compartilhar este post Link para o post Compartilhar em outros sites
Aesir 0 Denunciar post Postado Maio 15, 2011 @Andrey Knupp Seu script esta com erro nessa linha: $PDO = new PDO( 'mysql:host=localhost;dbname=cadastro', 'root', '' ); E não é as informações que eu coloquei do meu host. Tentei fazer assim agora e nada :ermm: <?php require_once("conexao.php"); $nivel = $_POST['nivel']; $paga = "admin.php"; $pagb = "moderador.php"; $pagc = "login.php"; if ( $_SESSION["nivel"] == 1 ) { header("Location: $paga"); } else { if( $_SESSION["nivel"] == 2) { header("Location: $pagb"); } else{ header("Location: $pagc"); } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 15, 2011 Qual o erro ? Compartilhar este post Link para o post Compartilhar em outros sites
Aesir 0 Denunciar post Postado Maio 16, 2011 ~> Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\Arquivos de programas\EasyPHP5.3.0\www\sys\checando.php:18 Stack trace: #0 C:\Arquivos de programas\EasyPHP5.3.0\www\sys\checando.php(18): PDO->__construct('mysql:host=loca...', 'root', '') #1 {main} thrown in C:\Arquivos de programas\EasyPHP5.3.0\www\sys\checando.php on line 18 Depois do visitante logar ele vai pra pagina checando.php pra ver qual o nivel dele na tabela e redirecionalo Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 16, 2011 Eca, EasyPHP... :huh: Vá no php.ini, procure por: ;extension=php_pdo_mysql_libmysql.dll Troque para: extension=php_pdo_mysql_libmysql.dll Salve, reinicie o Apache.. execute o script novamente Compartilhar este post Link para o post Compartilhar em outros sites
Aesir 0 Denunciar post Postado Maio 16, 2011 Funcionou :joia: :clap: Obrigado pela ajuda Andrey Knupp. Vo estudar + PHP pra ampliar meus conhecimentos. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Maio 16, 2011 @Andrey Knupp Como você já especifica... $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); Não é necessário definir novamente $Data = $SQLUsers->fetch( ); Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 16, 2011 @Kratos Zohr, isso não é um metodo de busca, é e necessário usar sim o fetch em ambos metodos pois no setAttribute, você so espesifica que você quer os fetch com resultSet com array sem índice, então você força um outro FETCH_ASSOC, para remover as chaves.. Compartilhar este post Link para o post Compartilhar em outros sites
Aesir 0 Denunciar post Postado Maio 16, 2011 @Andrey Knupp Tem como você tirar essa parte de login no seu codigo? Porque no caso ele tera que fazer o login 2 vezes e a pagina checando.php é só pra verificar o nivel do visitante e redirecionalo somente Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Maio 16, 2011 Pra que ?, essa pagina já autentica e redireciona ué , se o login estiver errado, ele não tem nen que ir pra outra pagina .. Compartilhar este post Link para o post Compartilhar em outros sites
Aesir 0 Denunciar post Postado Maio 16, 2011 Mas seu codigo é seguro pra usar em um site? E pra bloquiar se um moderador tentar após logar entrar na pagina do admin.php? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Maio 16, 2011 @Kratos Zohr, isso não é um metodo de busca, é e necessário usar sim o fetch em ambos metodos pois no setAttribute, você so espesifica que você quer os fetch com resultSet com array sem índice, então você força um outro FETCH_ASSOC, para remover as chaves.. Sua explicação ficou meio confusa <_< Testei das duas formas e o resultado é sempre o mesmo <?php var_dump( $SQLUsers->fetch( PDO::FETCH_ASSOC ) ); var_dump( $SQLUsers->fetch( ) ); ?> Compartilhar este post Link para o post Compartilhar em outros sites