Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi, meu cadastro não ta funcionando, eu insiro os dados e não cadastra nada, alguém pode ajudar? Deve ser alguma coisa faltando que esqueci....
cadastro.php
<form action="action_cliente.php" method="post" id='form-contato' enctype='multipart/form-data'>
<div class="form-group">
<label for="nome">Nome</label>
<input type="text" class="form-control" id="nome" name="nome" placeholder="Infome o Nome">
<span class='msg-erro msg-nome'></span>
</div>
<div class="form-group">
<label for="email">Senha</label>
<input type="password" class="form-control" name="senha" placeholder="Informe sua Senha">
<span class='msg-erro msg-email'></span>
</div>
<input type="hidden" name="acao" value="incluir">
<button type="submit" class="btn btn-primary" id='botao'>
Gravar
</button>
<a href='index.php' class="btn btn-danger">Cancelar</a>
</form>
**action_cliente.php**
<?php
require_once 'class/Connection.php';
// pega os dados do formuário
$nome = isset($_POST['nome']) ? $_POST['nome'] : null;
$senha = isset($_POST['senha']) ? $_POST['senha'] : null;
// validação (bem simples, só pra evitar dados vazios)
if (empty($nome) || empty($senha)
{
echo "Volte e preencha todos os campos";
exit;
}
// insere no banco
$PDO = db_connect();
$sql = "INSERT INTO usuario (nome, senha) VALUES ('$nome', '$senha')";
$stmt = $PDO->prepare($sql);
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':senha', $senha);
if ($stmt->execute())
{
header('Location: welcome.php');
}
else
{
echo "Erro ao cadastrar";
print_r($stmt->errorInfo());
}>
Em 08/12/2017 at 00:27, BrunoMs disse:
Troca isso:
// insere no banco
$PDO = db_connect();
$sql = "INSERT INTO usuario (nome, senha) VALUES ('$nome', '$senha')";
$stmt = $PDO->prepare($sql);
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':senha', $senha);
por isso:
// insere no banco
$PDO = db_connect();
$stmt = $PDO->prepare("INSERT INTO usuario (nome, senha) VALUES (:nome, :senha)");
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':senha', $senha);
Testa aí e vê se vai agora.
Fatal error: Call to undefined function db_connect() in C:\wamp\www\php-login\action_cliente.php on line *27*
<?php
$servidor = 'localhost';
$banco = 'meubanco';
$usuario = 'root';
$senha = '';
$link = mysql_connect($servidor, $usuario, $senha);
$db = mysql_select_db($banco,$link);
if(!$link) {
echo "erro ao conectar ao banco de dados!";exit();
}$nome = isset($_POST['nome']) ? $_POST['nome'] : null;
$senha = isset($_POST['senha']) ? $_POST['senha'] : null;// echo "Volte e preencha todos os campos";
// exit;$PDO = db_connect();
$stmt = $PDO->prepare("INSERT INTO usuario (nome, senha) VALUES (:nome, :senha)");
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':senha', $senha); header('Location: welcome.php');
} echo "Erro ao cadastrar";
print_r($stmt->errorInfo());
}
Deu erro na linha 27, postei meu banco de dados junto com o codigo para voce verVocê ta tentando usar PDO fazendo conexão mysqli. Pra funcionar você tem que utilizar PDO na conexão.
Troca isso:
$servidor = 'localhost';
$banco = 'meubanco';
$usuario = 'root';
$senha = '';
$link = mysql_connect($servidor, $usuario, $senha);
$db = mysql_select_db($banco,$link);
if(!$link) {
echo "erro ao conectar ao banco de dados!";exit();
}
E poem isso:
try{
$PDO = new PDO("mysql:host=" . $servidor . ";dbname=" . $banco , $usuario , $senha);
$PDO->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); echo "erro : " . $e->getMessage();
}
Na hora de testar aí toma cuidado, pq você ta usando a mesma variável $senha pra pegar a senha do banco e senha do usuário, pode dar conflito. Testa e vê se vai agora.>
10 horas atrás, BrunoMs disse:
Você ta tentando usar PDO fazendo conexão mysqli. Pra funcionar você tem que utilizar PDO na conexão.
Troca isso:
$servidor = 'localhost';
$banco = 'meubanco';
$usuario = 'root';
$senha = '';
$link = mysql_connect($servidor, $usuario, $senha);
$db = mysql_select_db($banco,$link);
if(!$link) {
echo "erro ao conectar ao banco de dados!";exit();
}
E poem isso:
try{
$PDO = new PDO("mysql:host=" . $servidor . ";dbname=" . $banco , $usuario , $senha);
$PDO->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); echo "erro : " . $e->getMessage();
}
Na hora de testar aí toma cuidado, pq você ta usando a mesma variável $senha pra pegar a senha do banco e senha do usuário, pode dar conflito. Testa e vê se vai agora.
No seu script não tem os dados de conexão, nem vai funcionar né?Era pra você trocar a conexão, ficaria dessa forma:
<?php
$servidor = 'localhost';
$banco = 'meubanco';
$usuario = 'root';
$senhadb = '';
try{
$PDO = new PDO("mysql:host=" . $servidor . ";dbname=" . $banco , $usuario , $senhadb);
$PDO->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); echo "erro : " . $e->getMessage();
}
$nome = "lalalala";
$senha = "huhuhuhu";
// insere no banco
$stmt = $PDO->prepare("INSERT INTO usuario (nome, senha) VALUES (:nome, :senha)");
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':senha', $senha);
$stmt->execute();
if ($stmt->rowCount() > 0)
{
header('Location: welcome.php');
} echo "Erro ao cadastrar";
print_r($stmt->errorInfo());
}
?>
aproveitei e alterei a verificação no if, coloquei $stmt->rowCount() > 0 pra verificar se inseriu, serve pra update e delete também.
testa aí.>
Em 10/12/2017 at 01:04, BrunoMs disse:
Era pra você trocar a conexão, ficaria dessa forma:
<?php
$servidor = 'localhost';
$banco = 'meubanco';
$usuario = 'root';
$senhadb = '';
try{
$PDO = new PDO("mysql:host=" . $servidor . ";dbname=" . $banco , $usuario , $senhadb);
$PDO->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); echo "erro : " . $e->getMessage();
}
$nome = "lalalala";
$senha = "huhuhuhu";
// insere no banco
$stmt = $PDO->prepare("INSERT INTO usuario (nome, senha) VALUES (:nome, :senha)");
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':senha', $senha);
$stmt->execute();
if ($stmt->rowCount() > 0)
{
header('Location: welcome.php');
} echo "Erro ao cadastrar";
print_r($stmt->errorInfo());
}
?>
aproveitei e alterei a verificação no if, coloquei $stmt->rowCount() > 0 pra verificar se inseriu, serve pra update e delete também.
testa aí.
Deu erroQual erro?
>
4 horas atrás, BrunoMs disse:
Qual erro?
Depois de alguns ajustes, eu vi que consegui cadastrar mas não entra na pagina inicial "welcome.php"
Meu welcome.php ta assim:
<?php
require_once(dirname(__FILE__).'/class/Login.php');
$objLogin = new Login();
$objLogin->verificarLogado();
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="iso-8859">
<title>Bem Vindo</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="container welcome">
<h3>Bem Vindo <?php echo $idUsuario = $objLogin->getIdUsuario(); ?></h3>
</div>
<br>
<a href="logout.php">Sair</a>
</body>
</html>
O que deve ta errado?Se precisar eu tenho algo que pode deixar o codigo um pouco mais simples pra cadastro, busca, delete e update caso for do interesse.
Poem seu login.php completo aqui pra gente ver.
>
22 horas atrás, Kaio Augusto de Castro disse:
Se precisar eu tenho algo que pode deixar o codigo um pouco mais simples pra cadastro, busca, delete e update caso for do interesse.
Em php oo ?>
22 horas atrás, BrunoMs disse:
Poem seu login.php completo aqui pra gente ver.
<?php
require_once(dirname(__FILE__).'/class/Login.php');
$objConnection = new Connection();
$objLogin = new Login();
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="iso-8859">
<title>Formulário de Login com PHP OO</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="container-geral">
<div class="container login">
<h3>Formulário de Login</h3>
<br />
<form action="" method="POST">
<label for="email">E-mail:</label>
<br />
<input type="text" name="email" id="email" required/>
<br />
<br />
<label for="senha">Senha:</label>
<br />
<input type="password" name="senha" id="senha" required/>
<br />
<br />
<input type="submit" value="Enviar" name="Enviar"/>
</form>
</div>
<?php
if(isset($_POST["Enviar"]) && $_POST["Enviar"] == "Enviar"){
$logar = $objLogin->Logar($_POST["email"],$_POST['senha']);
}
?>
<br />
<?php
if (isset($logar)){
?>
<div class="container-erro">
<?php echo $logar ?>
</div>
<?php } ?>
</div>
</body>
</html>Me referi ao login.php que ta dentro da sua pasta class:
require_once(dirname(__FILE__).'/class/Login.php');
Pq se não está entrando na página welcome.php o erro pode estar dentro desse arquivo da class/login.php que você está dando require_once
>
Em 12/12/2017 at 03:19, Thiago Duarte disse:
Depois de alguns ajustes, eu vi que consegui cadastrar mas não entra na pagina inicial "welcome.php"
Meu welcome.php ta assim:
>
15 horas atrás, Thiago Duarte disse:
Em php oo ?
Sim claro... PHP é vida....
Login.php
<?php
session_start();
require_once('Connection.php');
Class Login{
function __construct(){
$objConnection = new Connection();
}
function verificarLogado(){
if(!isset($_SESSION["logado"])){
header("Location: dirname(__FILE__)/../index.php");
exit();
}
}
function Logar($email,$senha){
$q_usuario = mysql_query("select * from usuario where usuario.email ='".$email."'");
if(mysql_num_rows($q_usuario) == 1){
$d_usuario = mysql_fetch_array($q_usuario);
if($d_usuario["senha"] == $senha){
$_SESSION["id_usuario"] = $d_usuario["id"];
$_SESSION["logado"] = "sim";
header("Location: dirname(__FILE__)/../welcome.php");
}else{
$Erro = "Senha e/ou Email errado(s)!";
return $Erro;
}
}else{
$Erro = "Senha e/ou Email errado(s)!";
return $Erro;
};
}
function getIdUsuario(){
return $_SESSION["id_usuario"];
}
function deslogar(){
session_destroy();
header("Location: dirname(__FILE__)/../index.php");
}
}
?>Você está usando conexão PDO como mostra lá no seu primeiro comentário, mas está usando mysql no método Logar() pra fazer a validação do login, talvez por isso não está funcionando, vai ter que trocar esse método Logar todinho e o __construct() que você está instanciando Connection() e não está usando. Poem sua connection.php aqui pra gente te ajudar a arrumar sua classe Login.
>
19 horas atrás, BrunoMs disse:
Você está usando conexão PDO como mostra lá no seu primeiro comentário, mas está usando mysql no método Logar() pra fazer a validação do login, talvez por isso não está funcionando, vai ter que trocar esse método Logar todinho e o __construct() que você está instanciando Connection() e não está usando. Poem sua connection.php aqui pra gente te ajudar a arrumar sua classe Login.
<?php
class Connection{
var $Server = "localhost";
var $Username = "root";
var $Password = "";
var $Database = "meubanco";
var $Porta = "5432";
function __construct(){
$this->Conectar();
}
function Conectar(){
if(!($conectar = mysql_connect($this->Server,$this->Username,$this->Password))){
echo "Erro ao tentar abrir a conexão!";
}else{
if(!($con = mysql_select_db($this->Database,$conectar))){
echo "Erro ao selecionar o banco!";
}
}
}
}
?>connection.php
<?php
class connection{
private $host = "localhost";
private $dbna = "seubanco";
private $user = "seuuser";
private $pass = "suasenha";
public $connect;
public function connectionDB(){
$this->connect = null;
try{
$this->connect = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->dbna, $this->user, $this->pass);
$this->connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
echo "Connection error : " . $e->getMessage();
}
return $this->connect;
}
}
?>
nova classe login classLogin.php:
<?php
require_once("connection.php");
class Login{
private $connect;
public function __construct(){
$connection = new connection();
$this->connect = $connection->connectionDB();
}
public function logar($email,$upass){
try{
$stmt = $this->connect->prepare("SELECT * FROM suatabela WHERE suacolunaemail=:email");
$stmt->execute(array(":email" => $email));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1){
if(password_verify($upass , $row['suacolunasenha'])){
$_SESSION['suasession'] = $row['suacolunaID'];
return true;
} else {
return false;
}
} else {
return "email not found";
}
}catch(PDOException $ex){
echo $ex->getMessage();
}
}
public function logado(){
if(isset($_SESSION['suasession'])){
return true;
}
}
public function deslogar() {
session_destroy();
$_SESSION['suasession'] = false;
}
}
index.php
<?php
session_start();
require_once("classUser.php");
$user_login = new Login();
if(isset($_POST['login'])){
$email = str_replace(" " , "" , $_POST['email']);
$upass = $_POST['pass'];
$check_login = $user_login->logar($email,$upass);
if($check_login){
echo "logged";
}else{
echo "loggin invalid";
}
}
/*
Para cadastrar os usuários use o password_hash(), é mais seguro do que usar MD5
$senha = "alalalululu";
echo password_hash($senha , PASSWORD_DEFAULT);
*/
?>
<form method="post">
<input type="text" placeholder="Email" name="email" class="form-control"><br>
<input type="password" placeholder="Senha" name="pass" class="form-control"><br>
<button data-dismiss="modal" type="submit" name="login" class="btn btn-primary">login</button>
</form>
em connection.php:
Faça as alterações com os dados do seu banco
em classUser.php:
coloca suas colunas de email, senha e id de usuário, e nomeie a session com o nome que você quiser.
em index.php
não altere nada, apenas faça os testes e adaptações depois.
Observação:
Quando você for fazer os testes, o usuário que você tentar efetuar o login precisa estar com a senha hasheada com password_hash() na coluna da sua senha na sua tabela, igual eu deixei comentado no index.php, pq na classe Login no método Logar() o password_verify() vai fazer a validação da senha.
Agora coloca em alguma pasta aí no seu servidor, faça os testes pra você aprender o funcionamento e poder fazer adaptações que for necessárias nele.
Se der algum b.o avisa, pq testei aqui e rodou normal.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 amigoNo seu exemplo tem isso?
$upass = $_POST['pass'];
não existe no meu banco de dados campo chamado "pass">
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.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);
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";
}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); 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(); header('Location: welcome.php');
} echo "Erro ao cadastrar";
print_r($stmt->errorInfo());
}
?>
Coloquei isso **$senha = password_hash($_POST['senha'] , PASSWORD_DEFAULT); **
no lugar de **$senha = $_POST['senha'];**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ê?
Troca isso:
// insere no banco
// insere no banco