Ir para conteúdo

Arquivado

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

Thiago Duarte

Cadastro não funciona

Recommended Posts

2 horas atrás, Thiago Duarte disse:

No index tu colocou 

 


require_once("classUser.php");

Que classUser.php é essa?

 

Não entendi bem como funciona esse password_hash() ... eu teria que substituir onde? isso? $senha = $_POST['senha'];

 

Como iria ficar?

 

Obrigado pela ajuda amigo 

Essa é a classe do login, poem o nome do arquivo onde ta a classe Login que te passei "classLogin.php".

Sobre o password_hash, você só teria que adicionar password_hash() na hora do REGISTRO do usuário. aí ficaria dessa forma:

$senha = password_hash($_POST['senha'] , PASSWORD_DEFAULT);

na hora do LOGIN do usuário não precisa usar password_hash, usa só:

$senha = $_POST['senha']

Pq a partir daí quem vai fazer a verificação é a password_verify(), que está no método Logar(). Pode reparar que na index.php eu passo a senha "pura" no método logar: $user_login->logar($email,$upass), aí quem faz a validação na senha lá dentro é a password_verify.

 

Sobre $_POST['pass'] aí embaixo, ele não vai puxar a "pass" do seu banco de dados, ele ta puxando "pass" do formulário que ta ali embaixo na index.php pra enviar pra validação no método logar, você pode ver lá no começo da index.php o que eu faço com $upass, eu passo ele pra $user_login->logar($email , $upass) pra fazer a validação.

 

1 hora atrás, Thiago Duarte disse:

No seu exemplo tem isso? 


$upass = $_POST['pass'];

não existe no meu banco de dados campo chamado "pass"

 

A partir do momento que você passar a entender o funcionamento desse código, já era, você consegue adaptar ele em qualquer site de forma simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha senha fica da forma que cadastrei... exemplo: 1234567 no banco fica: 1234567

 

queria cadastrar 1234567 e ficar algo parecido com: C7Dq$?u)cc`*`#Zf

 

Isso "password_hash" na hora do cadastro que faz ficar dessa forma? 

$senha = password_hash($_POST['senha'] , PASSWORD_DEFAULT);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente, na hora do cadastro quando usar o password_hash a sua senha vai ficar dessa forma como você deu de exemplo, só que vai ficar um pouco maior, vai ficar assim:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Usa password_hash somente na hora do cadastro, depois não precisa. Pra fazer a verificação da senha, você usa assim:


$senha_via_formulario = "aloalolululu123"; // senha que o usuário preencheu no form pra fazer login

$senha_que_esta_no_banco = $row['pass']; // senha do seu banco

 

if(password_verify($senha_via_formulario , $senha_que_esta_no_banco)){

 echo "opa, entrei";

} else {

echo "ops, dados incorretos";

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui fazer daquela forma que você me disse pra cadastrar e deu erro haha

<?php
$servidor = 'localhost'; 
$banco    = 'tutorialloginphp'; 
$usuario  = 'root'; 
$senhadb  = ''; 

try{
    $PDO = new PDO("mysql:host=" . $servidor . ";dbname=" . $banco , $usuario , $senhadb);
    $PDO->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
    echo "erro : " . $e->getMessage();
}

$email = $_POST['email'];
$senha = password_hash($_POST['senha'] , PASSWORD_DEFAULT);

// insere no banco
$stmt = $PDO->prepare("INSERT INTO usuario (email, senha) VALUES (:email, :senha)");
$stmt->bindParam(':email', $email);
$stmt->bindParam(':senha', $senha);
$stmt->execute();
 
if ($stmt->rowCount() > 0)
{
    header('Location: welcome.php');
}
else
{
    echo "Erro ao cadastrar";
    print_r($stmt->errorInfo());
}

?>

Coloquei isso $senha = password_hash($_POST['senha'] , PASSWORD_DEFAULT); 

no lugar de $senha = $_POST['senha'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei aqui o código e ta funcionando normalmente, após o cadastro ele redireciona pra welcome.php e o password_hash ta registrando a senha. Qual erro apareceu pra você?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 21/12/2017 at 23:41, BrunoMs disse:

Testei aqui o código e ta funcionando normalmente, após o cadastro ele redireciona pra welcome.php e o password_hash ta registrando a senha. Qual erro apareceu pra você?

 

Fatal error: Call to undefined function password_hash() in C:\wamp\www\php-login\action_cliente.php on line 16

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente a versão do seu PHP é  inferior à versão 5.5 e o password_hash e password_verify só estão disponíveis na versão 5.5. Abre algum arquivo aí no seu servidor e dá um echo nisso aqui pra você ver a versão atual do seu PHP:

echo phpinfo();

O meu por exemplo é esse: PHP Version 5.5.12

Quando você der o echo aí vai aparecer no topo a versão atual.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 25/12/2017 at 03:42, BrunoBit disse:

Então é isso mesmo, é só atualizar pro 5.5 ou superior que o password_hash e password_verify vão funcionar normalmente.

 

Como faço pra atualizar?

 

Quando o subir meus arquivos pro servidor também não vão funcionar se o PHP do servidor estiver desatualizado?

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 minutos atrás, Thiago Duarte disse:

Como faço pra atualizar?

 

Geralmente os servidores de hospedagem tem uma sessão pra selecionar a versão do PHP na hospedagem, aí é só você alterar pra 5.5 ou superior.

 

17 minutos atrás, Thiago Duarte disse:

Quando o subir meus arquivos pro servidor também não vão funcionar se o PHP do servidor estiver desatualizado?

 

Isso, se for inferior à 5.5 não vai funcionar o password_hash e nem o password_verify, mas hoje em dia é recomendável usar a versão 5.5 ou superior, quanto mais atualizado melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, então não tem como usar md5 pra criptografia para não ter esse tipo de problema? num funciona com versão mais antiga do PHP?

 

Obrigado pela ajuda amigo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem sim, é só tirar o password_verify() lá da classe login que te passei.

Troca isso:

if(password_verify($upass , $row['suacolunasenha'])){

Por isso:

if(md5($upass) == $row['suacolunasenha']){

Na hora de fazer o login é só fazer assim:

$email = $_POST['email'];
$upass = $_POST['pass'];

$user_login->logar($email,$upass);

O "problema" é que pra logins o password_verify/password_hash é muito mais recomendável e muito mais seguro, mas aí vai de você e da sua necessidade, se quiser passar pra md5 é só alterar essas linhas.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 30/12/2017 at 18:43, Thiago Duarte disse:

Poxa, então não tem como usar md5 pra criptografia para não ter esse tipo de problema? num funciona com versão mais antiga do PHP?

 

Obrigado pela ajuda amigo :)

 

Mau lhe pergunte.. Porque tanta preocupação na segurança de senha uma vez que quer utilizar uma versão anterior a versão 7 do php?

Como o bruno disse atualize seu sistema, e sem dúvida nem pense em nada abaixo do PHP 7

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 30/12/2017 at 14:55, BrunoBit disse:

Tem sim, é só tirar o password_verify() lá da classe login que te passei.

Troca isso:


if(password_verify($upass , $row['suacolunasenha'])){

Por isso:


if(md5($upass) == $row['suacolunasenha']){

Na hora de fazer o login é só fazer assim:


$email = $_POST['email'];
$upass = $_POST['pass'];

$user_login->logar($email,$upass);

O "problema" é que pra logins o password_verify/password_hash é muito mais recomendável e muito mais seguro, mas aí vai de você e da sua necessidade, se quiser passar pra md5 é só alterar essas linhas.

 

Se eu quiser no cadastro definir "cliente" e "designer" e colocar no botão input radio  "1" para cliente e "2" para designer

 

Na pagina inicial queria colocar o menu diferente no topo diferente dos dois, como faço isso?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • 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.
    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
×

Informação importante

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