Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu estou começando no PHP e resolvi fazer um sistema simples de login aqui, eu criei dois arquivos para enviar o login e outro para receber os dados via POST segue ai o codigo
Formulario
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">](http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)<html xmlns="[http://www.w3.org/1999/xhtml"](http://www.w3.org/1999/xhtml) xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="FreeUser" />
<title>Sem título 2</title>
</head>
<body>
<form action="conect.php" method="post" name="login">
Login: <input type="text" name="login" /><br />
Senha: <input type="text" name="senha" />
<input type="submit" value="Logar." name="enviar" />
</form>
</body>
</html>
PHP
<?php
$con = mysql_connect("127.0.0.1","root","") or die ("Erro SQL");
$db = mysql_select_db("ragnarok", $con) or die("erro DB");
if (isset($_POST["login"]) && isset($_POST["senha"]))
$login = $_POST['login'];
$senha = $_POST['senha'];
$query = mysql_query("SELECT * FROM login WHERE userid = '$login' AND user_pass = '$senha'");
$linha = mysql_num_rows($query);
if($linha != 0){
session_start();
$dados = mysql_fetch_assoc($query);
$_SESSION['id'] = $dados['account_id'];
$_SESSION['login'] = $dados['userid'];
echo "logado";
}
?>
O problema é que quando eu envio os dados ele da o erro "Notice: Undefined index: senha in C:\wamp\www\conect.php on line 9"
e se eu fechar o 1º IF ele não mostra as variaveis '-'
alguem pode ajudar?
agora ele de esse erro aqui "Parse error: syntax error, unexpected '?', expecting ',' or ')' in C:\wamp\www\conect.php on line 5"
@edit
consegui resolver tava faltando um ")" depois de ($_POST['senha'] e $_POST['login']
$login = isset($_POST['login'])? addslashes($_POST['login']) : false;
$senha = isset($_POST['senha']) ? addslashes($_POST['senha']) : false;Ops, esqueci de fechar parêntesis. Corrigindo:
$login = isset($_POST['login']) ? addslashes($_POST['login']) : false;
$senha = isset($_POST['senha']) ? addslashes($_POST['senha']) : false;
Tente agora.
E ViiH~*, aproveitando que você está aqui, não deixe de passar neste tópico para dizer se sua dúvida foi resolvida ou não. Pode ser útil para outros usuários. :thumbsup:
>
agora ele de esse erro aqui "Parse error: syntax error, unexpected '?', expecting ',' or ')' in C:\wamp\www\conect.php on line 5"
@edit
consegui resolver tava faltando um ")" depois de ($_POST['senha'] e $_POST['login']
$login = isset($_POST['login'])? addslashes($_POST['login']) : false;
$senha = isset($_POST['senha']) ? addslashes($_POST['senha']) : false;
Muito obrigado pela ajuda!A solução do Guilherme é pertinente, mas se quiser tenho outra aqui, olha só:
connctionDB.func.php
<?php
/FUNÇÃO CONEXAO BD/
function conDataBase($enderecoDB = "localhost", $db_1 = "banco_qualquer", $usuarioDB = "root", $senhaDB = "12345"){ //se nao for definido parâmetros para a funçao, ela atribui automaticamente o que foi definido aqui
$conectaDB = mysql_connect($enderecoDB, $usuarioDB, $senhaDB) or die(mysql_error());
$dataBase_1 = mysql_select_db($db_1,$conectaDB); //Seleciona o "$db_1"
}
?>
login.func.php
include "connectionDB.func.php"; // Requisição para o arquivo de Conexao com o BD
// |_
conDataBase(); //Endereço / Nome DB / Usuario DB/ Senha DB
/ Se no nome do usuário ou senha o cara tentar enviar algum caractere para MySQL Injection e se alguns desses caracteres COINCIDIR com os caracteres do ARRAY abaixo, ele irá trocar por NADA ("", vazio) e só então enviará para a consulta /
$trocaCaracteres = array('$' => '' , '%' => '', '\\' => '', '--' => '', '+' => '','group' => '', "by" => '', "union" => '', "select" => '', "from" => '', "limit" => '', "all" => '', "order" => '', '\'' => '', "\"" => '', "&" => '');
$user = strtr($_POST["usuario"], $trocaCaracteres);//Troca caracteres aqui
$password = strtr($_POST["senha"] , $trocaCaracteres);//Troca caracteres aqui
$senhaEncriptada = md5($password);//Senha encriptada a partir do algoritmo MD5, ISSO É OPTATIVO, se quiser pode apagar essa variável
$sql = mysql_query("SELECT * FROM tabela_login WHERE user = '$user'") or die(mysql_error());// Procura por um usuário igual ao informado
$numerosRegistros = mysql_num_rows($sql);// Numeros de registros encontrados com esse nome de usuário
if($numerosRegistros == 0){ //Se nenhum usuário for igual ao informado, retorna zero
echo "Usuário nao encontrado";
exit;
}
while($colunasBD = mysql_fetch_array($sql)){//Associa a essa variável as colunas retornadas para o usuário encontrado
$password = $colunasBD ['password'];// Associa a $password a senha para o usuário encontrado
$idUser = $colunasBD ['id'];// Associa a $idUser o ID para o usuário encontrado
}
if($password != $senhaEncriptada){//Confere senha, nesse caso se for errada
echo "Senha nao confere";
exit;
}else{ //Inicia sessão, libera acesso a página
/ É necessário iniciar sessao para verificar nas próximas páginas se o usuário fez o login e está APTO a visualizar o conteúdo de uma determinada página /
session_start();
$_SESSION['id'] = $idUser;
$_SESSION['user'] = $user;
$_SESSION['password'] = $senhaEncriptada;
header("Location: pagina_restrita.php");
}
Arquivo para INCLUIR NAS PÁGINAS RESTRITAS!
verificaSessao.php
<?php
require_once "connectionDB.func.php";// Se nao foi incluído, inclua agora
/-------------------------Arquivo para Start e verificacao de Sessao--------------------/
conDataBase(); //Endereço / Nome DB / Usuario DB/ Senha DB
session_start();//Inicia Sessao
if(isset($_SESSION['id']) AND isset($_SESSION['user']) AND isset($_SESSION['password'])){//Se existir esses identificadores na sessao iniciada, continua
$idUser = $_SESSION['id']; //Atribui a essa variavel o valor incluído nesse identificador da sessao
$user = $_SESSION['user'];//Idem ao anterior
$senhaEncriptada = $_SESSION['password'];//Idem ao anterior
$sql = mysql_query("SELECT * FROM `tabela_login` WHERE user = '$user'") or die(mysql_error());// Seleciona usuario a partir do valor da sessao
$numerosRegistros = mysql_num_rows($sql);// Numeros de registros encontrados com esse nome de usuário
if($numerosRegistros == 0){ //Se nenhum usuário for igual ao informado, retorna zero
echo "Usuário nao encontrado";
exit;
}
$colunasBD = mysql_fetch_array($sql); //Atribui a colunasBD todos os registro para o usuario informado
$senha = $colunasBD ['password'];// Atribui a essa variável apenas a senha desse usuario
if($senha != $senhaEncriptada){//Senha do BD igual a senha passada na sessao
//Se a senha for diferente destrói e muda o ID dela
// Destroi a Sessão
session_unset();
// Modifica o ID da Sessão
session_regenerate_id();
header("Location: login.php");//Volta para login
}
}//Fecha o primeiro IF, aquele que verifica se EXISTE sessao
else{// Se nao existir sessao redireciona
header("Location: login.php");//Volta para login
}
?>
Agora cria um formulário simples, assim:
<form id="login" enctype="multipart/form-data" method="post" action="login.func.php">
Usuario: <input type="text" name="usuario" id="usuario"/>
<br/>
Senha: <input type="password" name="senha" id="senha"/>
<br/>
<input name="Submit" type="submit" value="Entrar"/>
</form>
Portanto, esse sistema de LOGIN é formado por quatro páginas, são elas:
connectionDB.func.php : contém as informações para fazer a conexao com o bando de dados a partir dos dados informados;
login.func.php : essa página tem a função de "fazer o login", ou seja, verifica se existe algum usuário com aquela senha no banco de dados, caso sim inicia uma sessao e guarda essas informações nela;
verificaSessao.php : incluímos essa página nas outras que são de uso restrito, a inclusao deve ser no cabeçalho da página restrita. Aqui verifica se o usuário fez login e se os dados da sessao ainda conferem com os dados do banco de dados.
login.php : página com o formulário de login.
Qualquer dúvida ou sugestão nesse sistema, posta aí!
Tente o seguinte:
Nessas linhas:
O addslashes é uma prevenção contra as aspas simples, e, consequentemente, contra o SQL Injection.
Agora, diagnosticando o seu problema:
O que aconteceu aí é que a senha não foi definida em uma requisição ($_POST ou $_GET) e portanto, ele exibe a mensagem.
Tente rodar o script pra ver o que acontece.