• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

cryteck

Sistema de Login

10 mensagens neste tópico

Boas.

Eu estou a tentar fazer um sistema de login em php, mas tou com problemas na validação do mail, pois só verifica se contem o @.

registo.php

<?php
include("config.php");

if (isset($_POST['login'])){

//pega a sessão id do usuario
session_start();
$sessao = session_id();
$login = $_POST['login'];
$senha = $_POST['senha'];
$email = $_POST['email'];

$sql_busca = "SELECT * FROM user WHERE login = '$login'";
$exe_busca = mysql_query($sql_busca) or die (mysql_error());
$num_busca = mysql_num_rows($exe_busca);

$sql_busca2 = "SELECT * FROM user WHERE email = '$email'";
$exe_busca2 = mysql_query($sql_busca2) or die (mysql_error());
$num_busca2 = mysql_num_rows($exe_busca2);

//Verifica se os campos estão preenchidos
if ($_POST['login'] == "" || $_POST['senha'] == "" || $_POST['senha2'] == "" || $_POST['email'] == ""){
$ac[] = "Por favor preencha todos os campos corretamente.";
}
//Verifica se ja existe o login
if ($num_busca > 0){
$ac[] = "Esse login já esta sendo usado por outro utilizador.";
}
//Verifica se ja existe o e-mail
if ($num_busca2 > 0){
$ac[] = "Esse e-mail já esta sendo usado por outro utilizador.";
}
//Verifica se o e-mail está correto
if (!ereg("@.", $_POST['email'])){
$ac[] = "E-mail invalido.";
}
//Verifica se as duas senha são diferente
if ($_POST['senha'] != $_POST['senha2']){
$ac[] = "Verifique se as duas senhas estão corretas.";
}
//Verifica se todas estão corretas
if (!isset($ac)){
//Inclui o registo na BD
$sql_inclu = "INSERT INTO user(login, senha, email, sessao) VALUES
('$login', '$senha', '$email', '$sessao')";
$exe_inclu = mysql_query($sql_inclu) or die (mysql_error());

$topico = "Registo $nome_site";
$mensagem = "<html>";
$mensagem .= "<body>";
$mensagem .= "Olá $login\r\n";
$mensagem .= "<br>Você efetuou registo no $nome_site.</br>";
$mensagem .= "<br>Login: $login";
$mensagem .= "<br>Senha: $senha";
$mensagem .= "<br>Activar conta <a href='$site/active.php?ac=$sessao'>$site/active.php?ac=$sessao</a></br>";
$mensagem .= "</body>";
$mensagem .= "</html>";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: $nome_site <$email>\r\n";
$ac[] = "Registo efetuado com sucesso, verifique seu e-mail para activar a conta.";
//enviar para o email o login, senha e o codigo de activação
mail($email, $topico, $mensagem, $headers);
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Registo</title>
<style type="text/css">
<!--
.Style2 {font-size: 13px}
-->
</style>
</head>

<body>
<?php
if (isset($ac)){
for($i=0;$i<count($ac);$i++){
echo "<li>".$ac[$i];
}
}
?>
<form id="form1" name="form1" method="post" action="<? $_SERVER['PHP_SELF']?>">
<table width="100%" border="0">
<tr>
<td colspan="2"><div align="center"><strong>Cadastro</strong></div></td>
</tr>
<tr>
<td width="13%"><span class="Style2">Login:</span></td>
<td width="87%"><span class="Style2">
<label>
<input name="login" type="text" id="login" />
</label>
</span></td>
</tr>
<tr>
<td><span class="Style2">Senha:</span></td>
<td><span class="Style2">
<label>
<input name="senha" type="password" id="senha" />
</label>
</span></td>
</tr>
<tr>
<td><span class="Style2">Repetir senha: </span></td>
<td><span class="Style2">
<label>
<input name="senha2" type="password" id="senha2" />
</label>
</span></td>
</tr>
<tr>
<td><span class="Style2">E-mail:</span></td>
<td><span class="Style2">
<label>
<input name="email" type="text" id="email" />
</label>
</span></td>
</tr>
<tr>
<td> </td>
<td><span class="Style2">
<label>
<input type="submit" name="Submit" value="Enviar" />
</label>
</span></td>
</tr>
</table>
<p> </p>
</form>
</body>
</html>

Eu tava a tentar por esta expressão regular

* if (!ereg("^[0-9a-z]([-_.]?[0-9a-z])@[0-9a-z]([-.]?[0-9a-z]).[a-z]{2,4}$."

mas agora dá-me sempre mail inválido.

Ajudem-me se faz favor a por isto correcto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu costumo fazer:

<?php


   function valida_email($endereco){

      $pattern = "^[a-zA-Z0-9_-.]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9-.]+$";

     
      if (eregi($pattern, $endereco)){

         return true;
      }
      else {
         return false;
      }   
   }
?>   

Depois é só chamar a função:

<?php valida_email($_POST['email']); ?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes usar tambem antes de enviar os dados pelo formulario verificar com o javascript se estao preenchidos como desejas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado a todos pelas respostas, mas já corrigi o problema com uma expressão regular fazendo o seguinte:

//Verifica se o e-mail está correto

if (ereg("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$", $_POST['email'])){

}

else

{

$ac[] = "E-mail Inválido";

}

Esta fase ja está resolvida.

Os dados são inseridos na base de dados,mas como o meu sitema de login, depois de se registar é preciso ir ao mail activar a conta, na hora de enviar o mail para activar a conta, dá o seguinte erro:

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\login\cadastro.php on line 67

Registo efetuado com sucesso, verifique seu e-mail para activar a conta.

Como posso resolver isto, dêm sugestões como poder agir.

Abraços!!!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o código do ficheiro cadastro.php??

Provavelmente o que aconteceu, foi que mudaste o nome do ficheiro cadastro.php para registo.php e algum outro ficheiro está a chamar o cadastro.php em vez do registo.php

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois tens razão o problema já está resolvido.

Mas agora queria criar uma página para editar a pass e tavez o mail.

Podias-me dar umas dicas como fazer isso.

Thanks....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é a dúvida em si?

Sendo que já tens o login efectuado, provavelmente deves ter o identificador do utilizador, por exemplo o ID, ou mesmo o email, a partir daí consegues aceder a toda a informação do utilizador.

Basta num formulário obter a informação do utilizador e no fim enviar para a BD, se tiver alguma alteração muda, se não tiver, mantém a mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto depois de fazeres o que te disse lá em cima, há de ser qualquer coisa assim:

Quando o utilizador faz login, onde aparece o menú com as opções (Editar, Logout, etc...) metes algo assim:

<a href="editarUtilizador.php?id='.$id.'">Editar Utilizador</a>

Depois:

<?php
$id = $_GET['id'];

$sql = mysql_query("SELECT * FROM utilizadores WHERE id = '$id'");

$email = @mysql_result($sql, "email");

$password = @mysql_result($sql, "password");
?>

Crias um formulário para mostrar o resultado:

Email: <input type="text" name="email" value="<?php echo $email; ?>" />
Password: <input type="text" name="password" value="<?php echo $password; ?>" />

Ao fazeres submit no formulário, chamas a função que actualiza a BD que será algo assim:

<?php
$id = $_POST['id']; 

$email= $_POST['email'];

$password= $_POST['password'];

?>

Não te esqueças de fazer sempre as verificações e validações necessárias, depois corres o SQL

UPDATE utilizadores SET email='$email', password='$password' WHERE id='$id'

E pronto, será algo assim

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu utilizei o seguinte código mas diz que a base de dados não pode ser alterada

editarUtilizador.php

<?php

include("config.php");

$sql_busca = "SELECT * FROM user WHERE login = '$login_usuario'";

$exe_busca = mysql_query($sql_busca) or die (mysql_error());

$fet_busca = mysql_fetch_assoc($exe_busca);

$sql_busca1 = "SELECT * FROM user WHERE id = '$id'";

$exe_busca1 = mysql_query($sql_busca) or die (mysql_error());

$num_busca1 = mysql_num_rows($exe_busca);

$sql_busca2 = "SELECT * FROM user WHERE senha = '$senha'";

$exe_busca2 = mysql_query($sql_busca2) or die (mysql_error());

$num_busca2 = mysql_num_rows($exe_busca2);

if($senha_nova != $confirma_senha){

$ac[] = "Erro: - A nova password e o confirma password .<br>";

}

if($senha_nova == $senha){

$ac[] = "Você deve escolher uma passoword diferente da actual.<br>";

}

if (!isset($ac)){

$sql2 = mysql_query("update `user` set id='$id' senha='$senha_nova' where id='$id'");

if($sql2){

echo "Password Alterada";

}

else{

echo "Password não pode ser alterada";

}

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Editar Utilizadores </title>

</head>

<body>

<form id="form1" name="form1" method="post" action="editarUtilizador.php?acao=alterar">

<table width="400" border="0">

<tr>

<th width="156" scope="col"><div align="left">Password:</div></th>

<th width="234" scope="col"><label>

<div align="left">

<input name="senha" type="password" id="senha" />

</div>

</label></th>

</tr>

<tr>

<th scope="row"><div align="left">Nova Password: </div></th>

<td><div align="left">

<input name="senha_nova" type="password" id="senha_nova" maxlength="12" />

</div></td>

</tr>

<tr>

<th scope="row"><div align="left">Confirma Password: </div></th>

<td><div align="left">

<input name="confirma_senha" type="password" id="confirma_senha" maxlength="12" />

</div></td>

</tr>

<tr>

<th scope="row"><div align="left"></div></th>

<td><label>

<input type="submit" name="Submit" value="Alterar" />

</label></td>

</tr>

</table>

</form>

</body>

</html>

POr favor poderiam -me dar uma ajudinha no código.

Abraços :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora