cryteck Posted March 13, 2009 at 11:11 PM Report #250624 Posted March 13, 2009 at 11:11 PM 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.
cgoncalves Posted March 14, 2009 at 07:40 AM Report #250638 Posted March 14, 2009 at 07:40 AM 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
elcsat Posted March 14, 2009 at 12:09 PM Report #250650 Posted March 14, 2009 at 12:09 PM podes usar tambem antes de enviar os dados pelo formulario verificar com o javascript se estao preenchidos como desejas.
cryteck Posted March 14, 2009 at 02:34 PM Author Report #250664 Posted March 14, 2009 at 02:34 PM 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!!!!!
cgoncalves Posted March 14, 2009 at 03:02 PM Report #250668 Posted March 14, 2009 at 03:02 PM 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
cryteck Posted March 14, 2009 at 06:49 PM Author Report #250709 Posted March 14, 2009 at 06:49 PM 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....
cgoncalves Posted March 14, 2009 at 08:57 PM Report #250739 Posted March 14, 2009 at 08:57 PM 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
cryteck Posted March 14, 2009 at 10:52 PM Author Report #250761 Posted March 14, 2009 at 10:52 PM mas da-me so umas dicas um exemplo de codigo a ser utilizado.
cgoncalves Posted March 15, 2009 at 06:57 AM Report #250786 Posted March 15, 2009 at 06:57 AM 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
cryteck Posted March 22, 2009 at 02:12 PM Author Report #252489 Posted March 22, 2009 at 02:12 PM 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 😁
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now