Ir para conteúdo

POWERED BY:

Arquivado

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

Aesir

Porque não funciona

Recommended Posts

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

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

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

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

<!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

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

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

~>

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

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

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

@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

@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

@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

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

@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

×

Informação importante

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