Ir para conteúdo

Arquivado

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

josenilson

Consulta SQL + PDO

Recommended Posts

Olá para todos!

 

estou criando uma pagina bem simples de login autenticando pelo banco de dados, estou utilizando como conexão o PDO

ate ai tudo bem uso como padrão para me conectar ao banco o seguinte algorítimo.

 

$pdo = new PDO('mysql:host=localhost;dbname=nome do banco de dados', "root","" );

 

o que estou com dificuldade para fazer é o seguinte:

tenho um formulário HTML esse form manda os dados via post para uma determinada pagina exemplo verifica.php

nesta pagina estou com o seguinte algorítimo.

 

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<?php
$login = $_POST['login'];
$senha = $_POST['senha'];
include "conexao.php";
$pdo = new PDO('mysql:host=localhost;dbname=sistema', "root","" );
if($conn == $login){
echo "
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=formulario_login.html'>
<script type=\"text/javascript\">
alert(\"O nome de usuario nao corresponde.\");
</script>";
}else{
if($senha != $senha){//confere senha
echo "
<META HTTP-EQUIV=REFRESH CONTENT='0; URL=formulario_login.html'>
<script type=\"text/javascript\">
alert(\"A senha não corresponde.\");
</script>";
}else{
session_start();
$_SESSION['login_usuario'] = $login;
$_SESSION['senha_usuario'] = $senha;
header('Location: desktop.php');
}
}
?>
Como notado no algorítimo só tem a parte de conexão com o banco, oque estou tentando fazer é, quando o usuário inserir dos dados no formulário seja feita uma verificação de que os dados realmente existem no banco como uma condição
se (dados confere )ok prossiga se não mensagem de aviso, algo desse tipo, porem não sei como se constrói o consulta sql query com o pdo para realizar essa verificação.
deis de já agradeço por me ajudar se possível peço que como exemplo mostre a resolução aplicada nesse código que criei pois sou iniciante em php e com o script já familiar sera melhor interpretado .
aff josenilson pereira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com essa função:

 

você só procisa criar uma pasta com o nome:

 

login.class.php;

 

e chamar a função;

 

<?php class Login extends BD{
private $prefixo = 'media_';
private $tabela = 'usuarios';
private $email;
private $senha;
public function setUsuario($mail){
$this->usuario = $mail;
}
private function getEmail(){
return $this->email;
}
private function setSenha($pass){
$this->senha = $pass;
}
private function getSenha(){
return $this->senha;
}
private function validar(){
$strSQL = "SELECT * FROM ".$this->tabela." WHERE email_log = ? AND senha_log = ?";
$stmt = self::conn()->prepare($strSQL);
$stmt->execute(array($this->getEmail(), $this->getSenha()));
return ($stmt->rowCount() > 0) ? true : false;
}
public function logar(){
if($this->validar()){
$atualizar = self::conn()->prepare("UPDATE ".$this->tabela."SET data_log = NOW() WHERE email = ? AND senha = ?");
$atualizar->execute(array($this->getEmail(), $this->getSenha()));
$_SESSION[$this->prefixo.'emailLog'] = $this->getEmail();
$_SESSION[$this->prefixo.'senhaLog'] = $this->getSenha();
return true;
}else{
return FALSE;
}
}
public function isLogado(){
if(isset($_SESSION[$this->prefixo.'emailLog'], $_SESSION[$this->prefixo.'senhaLog'])){
return true;
}else{
return FALSE;
}
}
public function deslogar(){
if($this->isLogado()){
unset($_SESSION[$this->prefixo.'emailLog']);
unset($_SESSION[$this->prefixo.'senhaLog']);
return TRUE;
}else{
return false;
}
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu quase esquice isso também é necessário:

 

if(isset($_POST['acao']) && $_POST['acao'] == 'logar'){
$usuario = strip_tags(filter_input(INPUT_POST, 'usuario'));
$senha = strip_tags(filter_input(INPUT_POST, 'senha'));
if($usuario == '' || $senha == ''){echo '<script>alert("Preencha todos os campos")</script>';}else{
$login->setUsuario($usuario);
$login->setSenha($senha);
if($login->logar()){
if($login->isLogado()){
$strSql1 = "SELECT * FROM usuarios WHERE usuario_log = ? AND senha_log = ?";
$stmt1 = BD::conn()->prepare($strSql1);
$stmt1->execute(array($_SESSION['cli_usuarioLog'],$_SESSION['cli_senhaLog']));
$categ =$stmt1->fetchObject();
echo '<script>alert("Login efetuado!"); location.href="'.PATH.'/cliente/"</script>';
}else{
echo '<script>alert("Usuario não encontrado!"); location.href="'.PATH.'/"</script>';
}
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom agradeço muito a ajuda e a atenção que esta dando gedmilson

porem como estou iniciando em php isso tá me deixando confuso poderia explicar mostrando isso aplicado no meu script.

se possível agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mm_edilson
      Colegas, boa tarde. Estou criando um sisteminha de login, e estou na parte de recuperação de senha. Escrevi o código para o usuário digitar o e-mail cadastrado e solicitar a redefinição. Então, ele recebe um link único no e-mail dele e, por meio desse link, abre a página de criar nova senha. 
      Tudo funciona. O cadastro, o login, e a alteração de senha. Exceto por um problema. Quando faço uma recuperação de senha, e retorno para a página de login, ele dá a nova senha como inválida. Aí, se eu fechar o navegador e abrir de novo, e digitar a nova senha, ele entra normalmente. E não funciona ctrl+F5. Tem que fechar e abrir.
      Não faço ideia do que pode estar causando isso. 
      Vou postar meu código:

      Página de Login:
       
      <?php include_once 'connect.php'; ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Login</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> </head> <body> <section class="content"> <div class="contato"> <h2>Login</h2> Por favor, entre com o e-mail e a senha cadastrados.<br><br> <form name="cad_usu" class="form" method=post> <input class="field" type="email" name="email" placeholder="E-mail" required> <input class="field" type="password" name="senha" placeholder="Senha" required> <input class="field2" type="submit" name="SendLogin" value="Entrar no Sistema"> <input class="field2" type="reset" value="Limpar Formulário"> <center><a href="recuperar_senha.php"><font size="2">Esqueci a senha</font></a></center> </form> </div> </section> <?php if(!isset($_POST['SendLogin'])){exit;} $dados = filter_input_array(INPUT_POST,FILTER_DEFAULT); $query_usuario = "SELECT * FROM usuario WHERE email =:email LIMIT 1"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->bindParam(':email', $dados['email']); $result_usuario->execute(); $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); if($row_usuario && (password_verify($dados['senha'], $row_usuario['senha']))) { $_SESSION['id'] = $row_usuario['id']; $_SESSION['nome'] = $row_usuario['nome']; $_SESSION['situacoe_id'] = $row_usuario['situacoe_id']; $_SESSION['niveis_acesso_id'] = $row_usuario['niveis_acesso_id']; header("Location: painel.php");} else { echo "<div class=content><p style='color: red'> Erro: Usuário e/ou senha inválidos!</p>";} ?> </body> </html>  
      Página que faz a alteração da Senha:
       
      <?php include_once 'connect.php'; ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Recuperação de Senha</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> <script> function confereSenha(){ const senha = document.querySelector('input[name=senha]'); const confirma_senha = document.querySelector('input[name=confirma_senha'); if (confirma_senha.value === senha.value) { confirma_senha.setCustomValidity(''); } else { confirma_senha.setCustomValidity('As senhas digitadas não conferem! Elas precisam ser iguais.'); } } </script> </head> <body> <section class="content"> <div class="contato"> <center><h2>Recuperação de Senha</h2></center> <br><br> <?php $user = $_GET['utilizador']; $hash = $_GET['confirmacao']; $query_recupera = "SELECT * FROM recuperacao"; $result_recupera = $conn->prepare($query_recupera); $result_recupera->execute(); $row_recupera = $result_recupera->fetch(PDO::FETCH_ASSOC); $user_cadastrado = $row_recupera['email_usu']; $hash_cadastrado = $row_recupera['confirmacao']; $query_usuario = "SELECT * FROM usuario WHERE email = '$user'"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->execute(); $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); $id_user = $row_usuario['id']; $modified = date('Y-m-d H:i:s'); echo $id_user; if(!empty($_POST)){ if($user == $user_cadastrado && $hash == $hash_cadastrado){ $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT); $sql = "UPDATE usuario SET senha =:senha, modified =:modified WHERE id =:id"; $statement = $conn->prepare($sql); $statement->bindParam(':senha', password_hash($dados['senha'], PASSWORD_DEFAULT)); $statement->bindParam(':modified', $modified); $statement->bindParam(':id', $id_user); if($statement->execute()){ echo "<p style='color: green;'>Senha alterada com sucesso!</p>"; echo "<p><a href='login.php'>Voltar ao Login></a></p>"; } else { echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>"; } } else { echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>"; } } else { echo ""; } ?> <form name="cad_usu" class="form" method="POST" action=""> <input class="field" type="password" name="senha" placeholder="Senha" required onchange='confereSenha();'> <input class="field" type="password" name="confirma_senha" placeholder="Confirmar Senha" required onchange='confereSenha();'> <input class="field2" type="submit" name="AlteraSenha" value="Alterar Senha"> <input class="field2" type="reset" value="Limpar Formulário"> </form> </div> </section> </div> </body> </html>  
      E por fim, a página que solicita a alteração da senha: 
      <?php include_once 'connect.php'; ?> <html> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Login</title> <style> body{font-family: Arial, Helvetica, sans-serif} .content{display:flex;justify-content: center} .contato{width:100%; max-width: 500px;} .form{display: flex; flex-direction: column} .field{padding:10px; margin-bottom:15px; border:1px solid #DDD; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2{padding:10px; margin-bottom:15px; border:1px solid #ADD8E6; background-color:#ADD8E6; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px} .field2:hover{padding:10px; margin-bottom:15px; border:1px solid #87CEFA; background-color:#87CEFA; border-radius: 5px; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight:bold;} </style> </head> <body> <section class="content"> <div class="contato"> <h2>Recuperação de Senha</h2> Por favor, digite o e-mail cadastrado.<br><br> <form name="cad_usu" class="form" method=post> <input class="field" type="email" name="email_usu" placeholder="E-mail" required> <input class="field2" type="submit" name="Recuperar" value="Recuperar Senha"> <center><a href="login.php"><font size="2">Voltar ao Login</font></a></center> </form> </div> </section> <?php if(!isset($_POST['Recuperar'])){exit;} $dados = filter_input_array(INPUT_POST,FILTER_DEFAULT); $query_usuario = "SELECT email FROM usuario WHERE email =:email LIMIT 1"; $result_usuario = $conn->prepare($query_usuario); $result_usuario->bindParam(':email', $dados['email_usu']); $result_usuario->execute(); $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC); if($row_usuario) { //se o e-mail for localizado, acontece isso: //gera a chave de confirmação $utilizador = $dados['email_usu']; $chave = sha1(uniqid( mt_rand(), true)); //salva a chave no banco de dados $query_salva_usu = "INSERT INTO recuperacao (email_usu, confirmacao) VALUES (:email_usu, :confirmacao)"; $salva_usu = $conn->prepare($query_salva_usu); $salva_usu->bindParam(':email_usu', $dados['email_usu'], PDO::PARAM_STR); $salva_usu->bindParam(':confirmacao', $chave, PDO::PARAM_STR); $salva_usu->execute(); if($salva_usu->rowCount()){ $link = "http://www.sgi.dev.br/recuperar.php?utilizador=$utilizador&confirmacao=$chave"; if(mail($utilizador, 'Recuperação de Senha', 'Olá, '.$utilizador.'. Recebemos uma solicitação de recuperação de senha do site SGI - Sistema de Gestão de Igrejas. Se foi você, por favor, clique no link a seguir e crie uma nova senha: '.$link.' Se você não se lembra de ter solicitado essa alteração, por favor, desconsidere este e-mail. ')) echo "<center><p style='color: green;'>Um link de confirmação foi enviado para '.$utilizador.'. <br>Por favor, abra-o e confirme sua solicitação. Se não o encontrar na caixa de entrada, gentileza verificar a caixa de spam.</center></p>"; }else{ echo "<p style='color: #ff0000;'>Erro. Não foi possível recuperar a senha. Entre em contato com o administrador do sistema!</p>"; } } else { //se o e-mail não for localizado, acontece isso: echo "<div class=content><p style='color: red'> Erro: email não encontrado!</p>"; } ?> </body> </html>  
    • Por Luiz Henrique
      Olá,
       
      Preciso fazer uma inserção no DB de registros referente a pagamentos, quando for no crédito será realizado o insert com sua respectiva data de compensação e valor da parcela exemplo:
       3 parcelas de 100.00 e cada registro em seu devido mês:
      INSERT INTO tabela (valor, data) VALUES (100, 2022-08-17),(100, 2022-09-17),(100, 2022-10-17) É mais eficiente fazer da forma acima ou colocar 3 INSERT?
      Ou existe forma melhor de fazer isso?
       
      Obrigado.,
       
    • Por mm_edilson
      Boa tarde, amigos. Estou criando um sistema de login com PHP e PDO, mas não consigo achar um erro. Ao abrir a página de cadastro, retorna "esta página não está funcionando". Já vasculhei o código de cima a baixo várias vezes, e não consigo encontrar o erro. Se puderem ajudar, fico muito grato.
       
      Minha página de cadastro:
      <?php require_once 'classes/usuarios.php'; $u = new Usuario; ?> <htm lang="pt-br"> <head> <meta charset="utf-8"> <title>SGI - CADASTRO DE USUÁRIO</title> <link rel="stylesheet" href="css/stilo.css"> <body> <div id="corpo-form"> <h1>SGI - LOGIN</h1> <form method="POST"> <input type="text" name="nome" placeholder="Nome Completo" maxlengtht="75"> <input type="email" name="email" placeholder="Usuário" maxlength="50"> <input type="password" name="senha" placeholder="Senha" maxlength="12"> <input type="password" name="confsenha" placeholder="Confirmar Senha" maxlength="12"> <input type="submit" value="INSERIR"> </form> </div> <?php if(isset($_POST['nome'])) { $nome = addslashes($_POST['nome']); $email = addslashes($_POST['email']); $senha = addslashes($_POST['senha']); $confsenha = addslashes($_POST['confsenha']); if(!empty($nome) && !empty($email) && !empty($senha) && !empty($confsenha)) { $u->conectar("****","localhost","***","***"); if($u->msgErro == "") { if($senha == $confsenha){ if($u->cadastrar($nome,$email,$senha)) { echo "Cadastro realizado com sucesso!"; } else { echo "Email já cadastrado no sistema!"; } } else { echo "Senhas digitadas não correspondem."; } } else { echo "Erro:" .$u->msgErro; } } else { echo "Por favor, preencha todos os campos."; } } ?> </body> </head> </html>  
      E aqui a classe usuários
       
      <?php Class Usuario { private $pdo; public $msgErro = ""; public function conectar($nome, $host, $usuario, $senha) { global $pdo; try { $pdo = new PDO("mysql:dbname=".$nome.";host=.$host,$usuario,$senha); } catch (PDOException $e) { $msgErro = $e->getMessage(); } public function cadastrar($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified) { global $pdo; $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e"); $sqk->bindValue(":e",$email); $sql->execute(); if($sql->rowCount() > 0) { return false; } else { $sql = $pdo->prepare("INSERT TO usuarios ($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified) VALUES(:n, :e, :p, :s, :n, :c, :m)"); $sqk->bindValue(":n",$nome); $sqk->bindValue(":e",$email); $sqk->bindValue(":p",md5($senha)); $sqk->bindValue(":s",$situacoe_id); $sqk->bindValue(":n",$niveis_acesso_id); $sqk->bindValue(":c",$created); $sqk->bindValue(":m",$modified); $sql->execute(); return true; } } public function logar($email, $senha) { global $pdo; $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e AND senha = :p"); $sql->bindValue(":e",$email); $sql->bindValue(":p"md5($senha)); $sql->execute(); if($sql->rowCont() > 0) { $dado = $sql->fetch(); session_start(); $_SESSION['id'] = $dado['id']; return true; } else { return false; } } } ?>  
      Se alguém puder ajudar, e conseguir identificar onde está o erro, fico muito, muito agradecido. Abraços
       
       
       
    • Por Marcones Borges
      Olá, estou precisando de uma ajuda...
       
      Tenho duas tabelas
      ministros
      entradas
       
      Preciso exibir a lista dos ministros que não contam no relatório gerado em entradas.
       
      Fiz assim a combinação.
       

      $sql = "SELECT ministro.id, ministro.area, entrada.beneficiario, entrada.id_benificiario, entrada.id_benificiario, entrada.tipo_lancamento FROM ministro INNER JOIN entrada ON ministro.id = entrada.id_benificiario WHERE ministro.area = entrada.area_beneficiario AND ministro.nome = entrada.beneficiario AND entrada.id_benificiario='[{$id_exer}' AND entrada.tipo_lancamento='ministro'  "; $stm = $conexao->prepare($sql); $stm->execute(); $clientes = $stm->fetchAll(PDO::FETCH_OBJ);
       
      Fiz as combinações direitinho mais não consigui exbir os que estão na tabela ministro e não estão na tabela entrada.
    • Por Marcones Borges
      Olá, sou iniciante em php, estou tentando migrar um código de php 5.6 para pdo mais da erro, não roda....
      Alguém pode me ajudar?

      include '../Connections/functions.php';           function montaSelect()         {  $sql = "SELECT * FROM membros"; $result = $con->query($sql); if ($result->num_rows > 0 )  {   while($dados = $result->fetch_assoc())   {   $opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>';   } } else {           $opt = '<option value="0">Nenhum Membro cadastrado</option>';     return $opt; }         }
       
      Este era o código original:
       

      // require 'topof.php'; // echo $usuario;         /**          * função que retorna o select          */         function montaSelect()         {                 $sql = "SELECT id, nome FROM membros '";                 $query = mysql_query( $sql );                 if( mysql_num_rows( $query ) > 0 )                 {                         while( $dados = mysql_fetch_assoc( $query ) )                         {                                 $opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>';                         }                 }                 else                         $opt = '<option value="0">Nenhum Membro cadastrado</option>';                 return $opt;         }
×

Informação importante

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