Ir para conteúdo

Arquivado

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

josenilson

COMO INATIVAR UM REGISTRO DO SISTEMA MAS MANTÊ -LO NO BANCO DE DADOS

Recommended Posts

@Marhault muito bem pensando.


Então vale a pena manter todo um 'Log' da exclusão, já que se você precisa 'excluir' só q não...

 

Como diria o Linus....

Citar

Talk is cheap. Show me the code.

-Linus Torvalds


 

CREATE DATABASE imasters;
use imasters;
CREATE TABLE blog_imasters(
     id            int(8) PRIMARY KEY AUTO_INCREMENT
    ,nome          varchar(100) not null
    ,excluido      TINYINT(1) default 0
    ,excluido_por  varchar(100)  /* Ou pode ser o _id da tabela referenciado o user que exclui como FOREING KEY*/
    ,excluido_em   DATETIME
);

/*Bora inserir uma galera...*/
INSERT INTO blog_imasters(nome) VALUES ('Beraldo');
INSERT INTO blog_imasters(nome) VALUES ('Gabriel');
INSERT INTO blog_imasters(nome) VALUES ('Wbruno');
INSERT INTO blog_imasters(nome) VALUES ('AndersonMamede');

 

Então basicamente sempre que você quiser trazer os usuários ativos o seguinte comando:

SELECT * FROM blog_imasters where excluido <> 1;

Bora excluir alguém...

Vamos deletar o @AndersonMamede já q ele sumiu do Imasters....

UPDATE blog_imasters set excluido = 1, excluido_por = 'Gabriel', excluido_em = now() where nome = 'AndersonMamede'

 

 

Vamos confirmar....

mysql> SELECT * FROM blog_imasters where excluido <> 1;
+----+---------+----------+--------------+-------------+
| id | nome    | excluido | excluido_por | excluido_em |
+----+---------+----------+--------------+-------------+
|  1 | Beraldo |        0 | NULL         | NULL        |
|  2 | Gabriel |        0 | NULL         | NULL        |
|  3 | Wbruno  |        0 | NULL         | NULL        |
+----+---------+----------+--------------+-------------+

Show, e agora qnd alguem perguntar... (vão perguntar pode confiar... )  QUEM EXCLUIU ?! FOI ERRO NO SISTEMA!

Se já saca o 'log' até com a hora, seg, e usuário.

mysql> SELECT * FROM blog_imasters where excluido  = 1;
+----+----------------+----------+--------------+---------------------+
| id | nome           | excluido | excluido_por | excluido_em         |
+----+----------------+----------+--------------+---------------------+
|  4 | AndersonMamede |        1 | Gabriel      | 2017-02-07 21:46:19 |
+----+----------------+----------+--------------+---------------------+

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem para finalizar o que posso fazer nessa necessidade ?

 

Criei uma coluna na tabela de login para exercitar e ficar mais fácil, 


+----+----------------+----------+--------------+------|
| id | nome           | usuário |senha| nível | status |
+----+----------------+----------+--------------+------|
|  1 | josenilson     |   abc   | 123 | adm   | ATIVO  |
+----+----------------+----------+--------------+------|

 

Se o status do usuário for ATIVO vai logar normalmente no sistema, se for INATIVO

 $errorMsg = "Usuário bloqueado";    

 

minha dificuldade esta em adaptar isso ao script que utilizo para realizar o login. 

 

Uma breve descrição desse script, ele valida se o usuário existe caso isso for TRUE ele valida a senha depois o nível de acesso por final ele monta a sessão e redireciona para a pagina ,   nesse caso como fica  a primeira validação sendo  direto na coluna Status ?  ou seja primeiro validade se o status e ativo e depois percorre o restante do Script caso status for inativo retorna a mensagem de usuário bloqueado e não loga , eu tentei colocando or dentro do sql  or status  = "ativo"  mas nem sei es estou seguindo o certo  só fui ate ai, desculpa ai minha limitação.

 

diante mão obrigado a todos pela atenção. 

 

<?php
session_start();
?>

<?php
ini_set("display_errors", 1);
error_reporting(E_ALL|E_STRICT);

include "conexao.php";
 

 
if(isset($_POST['logar'])){
    $usuario = trim(strip_tags($_POST['usuario']));
    $senha = trim(strip_tags($_POST['senha']));
    $nivel = trim(strip_tags($_POST['nivel']));

	
}
 
unset($_SESSION['usuario'], $_SESSION['senha'], $_SESSION['nivel']);
$errorMsg = "";
 
// faz a verificação somente pelo usuario; a senha e o nível serão feitos mais à frente
$select = "SELECT * FROM login WHERE usuario=:usuario OR status= 'ATIVO' ";

try{
    $result = $conexao->prepare($select);
    $result->bindParam(':usuario', $usuario, PDO::PARAM_STR);
    $result->execute();
    $contar = $result->rowCount();
    
    // se não encontrou resultado, é porque o usuário não existe
    if($contar < 1){
        $errorMsg = "Usuário não existe.";
    }else{
        $dadosBd = $result->fetch(PDO::FETCH_ASSOC);
        
        // verifica se senha e nivel estão corretos, pois na consulta foi verificado apenas o usuário
        if($senha != $dadosBd["senha"]){
            $errorMsg = "Senha incorreta.";
        }else if($nivel != $dadosBd["nivel"]){
            $errorMsg = "Nível incorreto.";
        }
    }
	
    // se $errorMsg estiver vazio é porque não deu erro, então pode criar a sessão normalmente
    if(empty($errorMsg)){
        $_SESSION['usuario'] = $dadosBd['usuario'];
        $_SESSION['nivel'] = $dadosBd['nivel'];
		$_SESSION["sessiontime"] = time() + 1800;
	
		
		header("location: nivel.php");
		
		
		    exit;
		
    }else{
        echo "
            <META HTTP-EQUIV=REFRESH CONTENT='0; URL=index.php'>
            <script>
                alert('".$errorMsg."');
            </script>
        ";
    }
}catch(PDOException $e){
    echo $e;
}

?>

<?php

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ou você pode fazer na query, mas ai não sabe se não existe ou se não tá ativo:
$select = "SELECT * FROM login WHERE usuario=:usuario AND status= 'ATIVO' ";
e:
$errorMsg = "Usuário não existe. Ou não está ativo";

 

ou, se você quiser diferenciar usuário de não existe de usuário não ativo, ai você deve fazer:

 

$select = "SELECT * FROM login WHERE usuario=:usuario ";
//perceba que não coloquei a coluna status no WHERE

try{
    $result = $conexao->prepare($select);
    $result->bindParam(':usuario', $usuario, PDO::PARAM_STR);
    $result->execute();
    $contar = $result->rowCount();
    
    // se não encontrou resultado, é porque o usuário não existe
    if($contar < 1){
        $errorMsg = "Usuário não existe.";
    }else{
        $dadosBd = $result->fetch(PDO::FETCH_ASSOC);
        
        if ($dadosBd["status"] != 'ATIVO') {
           $errorMsg = "Usuário inativo.";
        }
        // verifica se senha e nivel estão corretos, pois na consulta foi verificado apenas o usuário
        else if($senha != $dadosBd["senha"]){
            $errorMsg = "Senha incorreta.";
        }else if($nivel != $dadosBd["nivel"]){
            $errorMsg = "Nível incorreto.";
        }
    }
   ....
	

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito simples, ao invés do OR que significa OU, você utiliza o AND.

 

$select = "SELECT * FROM login WHERE usuario=:usuario AND status= 'ATIVO'";

Dessa maneira, se o usuário existir, e se for ATIVO, ele continua.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal estou com um problema aqui, não estou conseguindo identificar.

 

Apos editar o código como o Willian me ensinou funciona mas ao realizar uma update  tipo para testar se realmente esta dando certo a questão do Status do usuário o bendito código esta alterando o campo senha no banco de dados inserindo 2 espaços junto com a senha, 

 

exemplo eu altero o status para inativo, ai deslogo e testou retorna que o usuário esta inativo blz, ai logo com outro usuário de acesso adm e mudo  o status daquele usuário de deste para ativo, ai quando deslogo e vou testar ele me diz que a senha esta incorreta, eu nem altero a senha só o status, quando vou verificar no banco de dados a senha ta  ficando o que já consta como senha exemplo 123 + 2 espaço juntos.  espero ter sido claro.  bom abaixo esta o script que altera, e a função que realizada a alteração, 

 

identifiquei uma parte do problema, quando eu altero o status para inativo ou ativo, o update faz isso na senha altera o status para ativo, ou inativo, mas ele meio de automático altera o campo senha, deixando a senha mais 2 espaços gravados, se eu alterar somente o status direto na base de dados funciona perfeitamente. 

 

/---------------INICIO DA ----FUNÇÃO ALTERAR-------------------

if (isset ($_POST['Alterar'])):
$nome = filter_input(INPUT_POST,"nome",FILTER_SANITIZE_STRING);
$usuario = filter_input(INPUT_POST,"usuario",FILTER_SANITIZE_STRING);
$senha = filter_input(INPUT_POST,"senha",FILTER_SANITIZE_STRING);
$nivel = filter_input(INPUT_POST,"nivel",FILTER_SANITIZE_STRING);
$status = filter_input(INPUT_POST,"status",FILTER_SANITIZE_STRING);

if (update ($nome, $usuario, $senha, $nivel, $status, $_GET['idlogin'])):

	
//echo "Cadastro Alterado com sucesso";

header("Location: index.php");

else:
echo "erro ao atualizar dados";

endif;
endif;

//---------------IFIM---DA ----FUNÇÃO ALTERAR-------------------

 

function update($nome, $usuario, $senha, $nivel, $status, $idlogin){
	$pdo = conectar();
	
	try {
    $update = $pdo->prepare("UPDATE login SET nome= ?, usuario= ?, senha= ?, nivel= ?, status= ?  WHERE idlogin= ?");
	$update->bindValue(1, $nome);
	$update->bindValue(2, $usuario);
	$update->bindValue(3, $senha);
	$update->bindValue(4, $nivel);
	$update->bindValue(5, $status);
	$update->bindValue(6, $idlogin);
	$update->execute();
	
	
	
	
	if ($update->rowCount() == 1){
		return true;		
	}else{
		
		return false;	
	}
	

	
	} catch(PDOException $erro) {
		echo "ERRO AO REALIZAR UPDATE" . $erro->getMessage();
   
	}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais como assim produção ?! :sweat_smile:

 

Você resolveu o seu problema número 1 ? resolveu o segundo problema de logar apenas usuários ativos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Alaerte Gabriel disse:

Mais como assim produção ?! :sweat_smile:

 

Você resolveu o seu problema número 1 ? resolveu o segundo problema de logar apenas usuários ativos ?

sim, esse passo ai deu certo 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então encerra o post ué se não vira 'chat' e atrapalha na indexação/organização de perguntas e resposta.

E abra o novo tópico para pergunta diferente 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, gabrieldarezzo disse:

Então encerra o post ué se não vira 'chat' e atrapalha na indexação/organização de perguntas e resposta.

E abra o novo tópico para pergunta diferente 

Onde eu encerro ele, ?  não estou acostumando com essa nova forma do Fórum. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

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