Painel de administração com PHP + OOP - Aula 11

Aviso importante!

Eu sei que você não quer ver propagandas, porém o conteúdo gratuito só está aqui graças a publicidade. Considere desativar o AdBlock para esse site.

Sejam todos bem vindos à mais uma aula do curso de criação de um painel administrativo utilizando PHP e orientação a objetos. Nesta aula vamos criar a tela de alteração de usuários, restringindo o acesso à esta operação somente aos administradores ou então ao próprio usuário caso ele queira alterar seus dados. Em seguida faremos a criação das funções necessárias para alterar os dados no banco e validar o email para evitar registros duplicados na tabela.

Mais posts desta série

Este post faz parte de uma série, confira tudo que já foi publicado sobre o mesmo assunto.

Sobre o autor

Ricardo Bernardi

Sou técnico em hardware e desenvolvedor web, e sobre estes dois assuntos comecei a compartilhar aulas e artigos, tornando-me blogueiro em 2008. Em 2010 esse hobby virou profissão, e desde então tenho buscado melhorar e profissionalizar cada vez mais os projetos que mantenho na web.

Comentários

Atualmente temos 23 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.

  • luiz comentou em

    Ve se alguém pode me ajudar...

    quando vou alterar o cadastro de um usuário funciona normalmente quando eu altero o nome ou o email.
    Mas quando vou alterar o administrador ou ativo ele me da erro Access denied for user '####'@'localhost' (using password: NO)...

    estranho isso... Pode me ajudar?

    Responder
  • Rodynunes comentou em

    Olá Ricardo,é com muita satisfação que venho acompanhando este curso e breve me tornarei um sócio de seu blog, minha dúvida acredito ser simples mas como sou novato nisso gostaria de uma ajuda. Meu código esta todo revisado e perfeitamente igual ao seu, minha dúvida é a seguinte:
    Meus formulário de alteração não está imprimindo os nomes dentro dos campos, o que pode ser?

    Grato pela atenção

    Rodney

    Responder
  • Socorrooooooo...!!! não consigo fazer com que o usuario veja somente a lista dele, pois é mostrado tudo que nem do administrador!

    Como faço para que o usuario veja apenas os dados dele.

    please!!! =^.^=

    Responder
  • Alisson comentou em

    Olá Ricardo parabéns pelo trabalho.
    Estou com a seguinte dúvida estou tentando fazer a parte de atualizações mas me deparo com o seguinte erro, quando o usuario altera a senha ele atualiza toda a tabala, o campo senha pega o novo valor e os demais passam a ser vazios

    código fonte excluído

    Pq isso ocorre e não consigo fazer como vc ensinou?

    Responder
  • Ramon comentou em

    Fiz tudo revisei tudo umas 3 vezes assisti os primeiros videos mais nada =/

    1°- Com usuario normal ainda consigo alterar dados igual admin

    case 'incluir':
    		echo '<h2>Cadastro de Usurios</h2>';
    		if (isset($_POST['cadastrar'])):
    			$user = new usuarios(array(
    				'nome'=>$_POST['nome'],
    				'email'=>$_POST['email'],
    				'login'=>$_POST['login'],
    				'senha'=>codificaSenha($_POST['senha']),
    				'administrador'=>($_POST['adm']=='on') ? 's' : 'n',
    			));
    			if ($user->existeRegistro('login',$_POST['login'])):
    				printMSG('Este login j est cadastrado, escolha outro nome de usurio.','erro');
    				$duplicado = TRUE;
    			endif;
    			if ($user->existeRegistro('email',$_POST['email'])):
    				printMSG('Este email j est cadastrado, escolha outro endereo.','erro');
    				$duplicado = TRUE;
    			endif;
    			if ($duplicado!= TRUE):
    				$user->inserir($user);
    				if ($user->linhasafetadas==1):
    					printMSG('Dados inseridos com sucesso. <a href="'.ADMURL.'?m=usuarios&t=listar">Exibir cadastros</a>');
    					unset($POST);
    				endif;
    			endif;			
    		endif;
    		?>

    2°-2°- caso o usuário não seja administrador eu não mostro os campos de Ativo e de Administrador, que no seu caso você deixa desabilitado, mas ai surge um problema.
    se eu entrar com um usuário que não é administrador do sistema e clicar em editar o seu perfil e depois clicar em salvar, mesmo sem alterar exatamente nada, ele seta o Ativo como 'n' (desabilitado)

    case 'editar':
    		echo '<h2>Edio de usurios</h2>';
    		$sessao = new sessao();
    		if (isAdmin()==TRUE || $sessao->getVar('iduser')==$_GET['id']):
    			if (isset($_GET['id'])):
    				$id = $_GET['id'];
    				if (isset($_POST['editar'])):
    					$user = new usuarios(array(
    						'nome'=>$_POST['nome'],
    						'email'=>$_POST['email'],
    						'ativo'=>($_POST['ativo']=='on') ? 's' : 'n',
    						'administrador'=>($_POST['adm']=='on') ? 's' : 'n',
    					));

    Min ajuda por favor n sei mais oq fazer =/

    Responder
  • Sandro Fortkamp comentou em

    Ola ricardo,

    venho acompanhando suas aulas e também digitando para treinar, quando cheguei na 11 aula, quando clico no botão editar, vai para formulário para edição, mas não traz o registro, fiz conforme no site, o resto está funcionando, cadastro OK, login OK, só essa parte que não consegui achar o erro.

    Responder
  • Olá a todos, eu gostaria de saber um pequeno motivo para um erro no código, gostaria de saber se é de compatibilidade do meu PHP, utilizo o 5.4 e me ocorre o seguinte erro na função isAdmin()

    Object of class stdClass could not be converted into a string

    e a linha cai com

    $resid = $sessao->getVar('iduser');

    e nã entendi o porque já que

    $user = new usuarios();

    funciona normalmente. '-' Alguém pode me iluminar?

    Responder
      • Deixe especificar, eu criei o objeto do tipo sessao, mas eu não consigo transformar o objeto

        $resid = $sessao->getVar('idlogado');

        Porque quando tento passá-lo para o código do mysql me aparece o tal erro.
        Eu especifiquei em cima que as strings do objeto do tipo Usuários são convertidas normalmente, já as do tipo sessão me mostra tal, seria incompatibilidade? Li algo e vi que poderia ser, mas me resta a dúvida pois testei em downgrades e continuou.

        Responder
        • Você precisa ver como está enviando os dados para o MySQL, se for um campo do tipo texto terá que mandar os dados entre apóstrofes para que funcione corretamente.

          Responder
  • Junior Eberhardt comentou em

    falai Ricardo, tudo beleza?

    então, tentei fazer o módulo para alteração de senha do usuário, e obtive sucesso, claro que deram alguns problemas, como não salvar a senha, erro no script, mas depois da terceira tentativa consegui, tudo funciona perfeito, e só o usuário pode alterar sua própria senha, assim como você mostrou na edição de usuários, e claro o administrador tem todos os privilégios...

    não tenho como agradecer o aprendizado.

    muito obrigado...

    Responder
  • Junior Eberhardt comentou em

    muito boa essa vídeo aula, ta ficando cada vez melhor...

    só uma dúvida Ricardo:

    no meu sistema, caso o usuário não seja administrador eu não mostro os campos de Ativo e de Administrador, que no seu caso você deixa desabilitado, mas ai surge um problema.

    se eu entrar com um usuário que não é administrador do sistema e clicar em editar o seu perfil e depois clicar em salvar, mesmo sem alterar exatamente nada, ele seta o Ativo como 'n' (desabilitado), já que no código você definiu assim:

    $user = new usuarios(array(
       'nome' => $_POST['nome'],
       'email' => $_POST['email'],
       'ativo' => ($_POST['ativo'] == 'on') ? 's' : 'n',
       'administrador' => ($_POST['adm'] == 'on') ? 's' : 'n'
    ));

    gostaria de saber como contornar esta situação...

    tentei várias formas, mas não obtive sucesso...

    será que tu pode me ajudar?

    valeu Ricardo

    Responder
    • Vejo duas possibilidades:
      1 - Colocas os dados necessários para a alteração em campos ocultos quando o usuário não for administrador para que mesmo não aparecendo as informações estejam presentes.
      2 - Tirar os campos "ativo" e "administrador" do objeto quando o usuário que está alterando não for administrador, o que tornaria o sistema mais seguro.

      Responder
      • Junior Eberhardt comentou em

        e como eu faria se fosse a segunda opção, achei mais interessante.

        penso assim:

        if (isAdmin()) : //  administrador
          $user = new usuarios(array(
           'nome' => $_POST['nome'],
           'email' => $_POST['email'],
           'ativo' => ($_POST['ativo'] == 'on') ? 's' : 'n',
           'administrador' => ($_POST['adm'] == 'on') ? 's' : 'n'
          ));
        else : // no  administrador
          $user = new usuarios(array(
           'nome' => $_POST['nome'],
           'email' => $_POST['email']
          ));
        endif;

        seria assim?

        obrigado

        Responder
        • Junior Eberhardt comentou em

          Ricardo, testei aqui como eu escrevi acima, e deu certo, mas se você tiver uma maneira mais "correta" ou "lógica", eu ficarei grato em aprender..

          obrigado.

          Responder
  • Murilo Henrique comentou em

    Olá, muito boa a aula, pena que eu ja tinha feito, mais serviu pra me mostrar uma forma simplificada de uma verificação que eu tinha feito, Valeu continue sempre no fazendo grandes aulas. Abraço.

    Responder

Deixe seu comentário