Jump to content

Sistema de Login


cryteck
 Share

Recommended Posts

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.

Link to comment
Share on other 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']); ?>

"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Link to comment
Share on other 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!!!!!

Link to comment
Share on other 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

"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Link to comment
Share on other 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.

"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Link to comment
Share on other 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

"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Link to comment
Share on other 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 😁

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.