Llaverola Posted November 21, 2007 at 02:05 PM Report Share #149124 Posted November 21, 2007 at 02:05 PM pessoal, criei um base de dados em mysql ,e agora tenho d criar uma pagina web para essa BD. só q tenho d fazer um login, e isso n sei fazer :S alguem me explica como fazer? obrigado Link to comment Share on other sites More sharing options...
Hipnoted Posted November 21, 2007 at 02:27 PM Report Share #149134 Posted November 21, 2007 at 02:27 PM Vais usar PHP? Tens exemplos aqui: http://www.revistaphp.com.br/artigo.php?id=67 http://www.portugal-a-programar.pt/index.php?showtopic=1446 Tem em cuidado que esses artigos não tomam em atenção como prevenir o SQL Injection. 😛 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência" Link to comment Share on other sites More sharing options...
Llaverola Posted November 21, 2007 at 04:48 PM Author Report Share #149170 Posted November 21, 2007 at 04:48 PM ESTE É O MEU FICHEIRO login.php <html> <head> </head> <body> <? // as seguintes variaveis vao receber os valores, respectivos, que foram escritos no from da seguinte forma $nome=$_POST["$ricardo"]; $password=$_POST["$coelhor"]; // vamos connectar ao servidor: localhost ( pode ter outro endereço ) , utilizador : nome_do_utlizador , e password :"pass " $conectar=mysql_connect("localhost", "13137","jokjHp" ) or die ("Falhou ligar a base de dados..."); // vamos seleccionar a base de dados que queremos, neste caso "tofas" $bdd=mysql_select_db("projecto", $conectar) or die ("Falhou..base de dados desconhecida...."); // a pesquiza pretendida $pesquisa="select user_password from tbl_auth_user where user_id='$ricardo';"; //efectuar a pesquisa na base de dados : projecto $resultado=mysql_query($pesquisa); // aqui vamos obter o numero de resutados obtidos ( linhas ... ) $num=mysql_num_rows($resultado); // se tivermos obtido resultados vamos fazer a verificao da pass, e efectuar as operacoes que pretendemos if( $num!=0 ) { // enquanto exiterem linhas ( nao esta mto correcto mas espero que tenham percebido a intencao) while( list($password)= @ mysql_fetch_row($resultado) ) { // a variavel query vai tomar o valor da pass que foi resultado da pesquisa $query=$password; } // vamos verificar se as pass's sao iguais para poder continuar if( $query==$password) { // aqui as pass's sao iguais echo "<br>consegui efectuar o login..." ; } else // aqui as pass's sao diferentes { echo "<br> password errada ou entao o numero de utilizador"; } } else // aqui temos que $num=0 { echo "<br> houve um erro, nao foi possivel efectuar o login, numero de utilizador invalido..."; } // desligar a ligacao a base de dados... mysql_close($conectar); ?> </body> </html> e este é o meu ficheiro enviar.html que contém tb codigo .php <html> <head> <title> Login </title> </head> <body> <p><b> Login </b></p> <form action="login.php" method="POST"> <!-- texto referente ao titulo da caixinha e respetiva caixinha para o utilizador escrever o nome ou pode ser o numero de utilizador, é so alterar .... o valor que vai ser escrito vai ser o valor da "variavel nome" ( pode mudar a palavra nome para outro nome... ) o valor de size pode tambem ser alterado....( que deve corresponder ao tamanho que é definido na base de dados ) --> <b>Numero do utilizador</b> <p><input type="text" value="" name="nome"size="10" ></p> <!-- texto referente ao titulo da caixinha e respetiva caixinha para o utilizador escrever a password .... o valor que vai ser escrito vai ser o valor da "variavel pass" ( pode mudar a palavra pass para outro nome... ) o valor de size pode tambem ser alterado....( que deve corresponder ao tamanho que é definido na base de dados ) --> <b><br>Password</b> <p><input type="password" value="" name="pass" size="20" ></p> <p> <!-- botoes submit -> Login ( pode mudar este nome) e reset-> Reset ( pode mudar este nome) --> <input type="submit" value="Login" name="validar" > <input type="reset" value="Reset" name="limpar" > </p> </form </body> </html> VERIFICAM ALGUM ERRO???? é q n tou a conseguir fazer o login. esses ficheiros estao na pasta do xampp/htdocs... Link to comment Share on other sites More sharing options...
softklin Posted November 21, 2007 at 07:08 PM Report Share #149194 Posted November 21, 2007 at 07:08 PM Experimenta abrir o php com <?php e fechar com ?> em vez de <? e ?>. $nome=$_POST["$ricardo"]; $password=$_POST["$coelhor"]; Isto está incorrecto. Tens de por o nome dos campos do HTML, ou seja nome e pass, ficará $nome=$_POST["nome"]; $password=$_POST["pass"]; $pesquisa="select user_password from tbl_auth_user where user_id='$ricardo';"; Mais uma vez está incorrecto, deverás usar a variável óbvia neste caso, a variável username De resto parece estar tudo certo... mas para correres isto, não é pores as passwords no ficheiro php, mas sim no formulário em html, quando o corres no Firefox/IE. Experimenta agora correr os ficheiro html (dentro do xammp claro). Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
djthyrax Posted November 21, 2007 at 10:36 PM Report Share #149242 Posted November 21, 2007 at 10:36 PM Esse código é vulnerável a SQL injection. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Llaverola Posted November 21, 2007 at 11:32 PM Author Report Share #149270 Posted November 21, 2007 at 11:32 PM é assim, eu tenho uma tabela na minha base de dados chamada tbl_auth_user com dois campos. o 1º o user_id = ricardo, e o user_password= coelhor. daí eu usar esta linha de codigo: "select user_password from tbl_auth_user where user_id='$ricardo';"; entendes softclean? ja pus td dentro da pasta xampp, e na pasta htdocs, corri o html, pus o nome ricardo e a pass coelhor e n deu :S aparece sempre a mm mensagem. "consegui efectuar o login..." ; } else // aqui as pass's sao diferentes { echo " password errada ou entao o numero de utilizador"; } } else // aqui temos que $num=0 { echo " houve um erro, nao foi possivel efectuar o login, numero de utilizador invalido..."; } // desligar a ligacao a base de dados... mysql_close($conectar); ?>" se reparares são as ultimas linhas de codigo 😛 Link to comment Share on other sites More sharing options...
softklin Posted November 22, 2007 at 09:37 PM Report Share #149527 Posted November 22, 2007 at 09:37 PM Sim, eu entendi, mas se quiseres ter mais de um user, tens de perguntar qual quer aceder, e por isso é que está o html, para perguntar ao user o que ele quer. Depois, o outor problema, eu nnão sei se estará correcto, mas experimenta trocar echo "<br>consegui efectuar o login..." ; para echo "<br>consegui efectuar o login..."; O ponto e virgula no fim sem espaço a separar... Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
Llaverola Posted November 22, 2007 at 11:57 PM Author Report Share #149566 Posted November 22, 2007 at 11:57 PM bem, continua a dar o mesmo problema. como posso entrar em contacto directo ctg softclean? olha, adiciona-me no msn. ricardocoelho81@portugalmail.pt pode ser? e assim qd tivermos on-line falamos e ajudas-me. obrigado Link to comment Share on other sites More sharing options...
softklin Posted November 23, 2007 at 12:12 PM Report Share #149620 Posted November 23, 2007 at 12:12 PM Eu adicionei. Mas olha, não sei se estás interessado, mas tenho aqui outro "produto" para te "vender" 😉 Este é o script que costumo usar para iniciar sessões. Pode ser que seja útil, mas de forma mais simples, eu comentei as linhas, de forma a que percebas o que se passa a cada instante. <?php //Script para fazer login //criar uma ligação com a base de dados $conectar=mysql_connect("localhost", "13137","jokjHp" ) or die ("Falhou ligar a base de dados..."); //seleccionar a base de dados pretendida //notar que não é preciso ocupar uma variavel para ver se foi seleccionada, pois o die tratará do erro, caso exista mysql_select_db("projecto", $conectar) or die ("Falhou..base de dados desconhecida...."); //Agora vamos tratar de limpar as variáveis para que não ocorra a situação de SQL Injection, que te foi referida anteriomente //o que este código faz é substituir caracteres especiais que te poderiam mudar a query //ver mais em http://php.net/mysql_real_escape_string e ainda em http://en.wikipedia.org/wiki/SQL_injection mysql_real_escape_string($_POST[]); //e agora vamos coloca-las em variáveis $utilizador = $_POST['nome']; $chave = $_POST['pass'] //agora vamos fazer a query // a pesquisa pretendida $pesquisa="select user_id from tbl_auth_user where user_id='$utilizador' and user_password='$chave'"; //efectuar a pesquisa na base de dados : projecto //com um die, para verificar se há algum erro na pesquisa. Podes ver o que faz a função mysql_error() em http://php.net/mysql_error $resultado=mysql_query($pesquisa) or die(mysql_error()); // aqui vamos obter o numero de resutados obtidos ( linhas ... ) $num=mysql_num_rows($resultado); //Logica: Se há um utilizador a fazer login, entao temos 1 linha na query, se estiver tudo certo, temos entao //se num_linhas == 1 entao // passou, login com sucesso //senao // falhou, porque os dados estão incorrectos if($num!=1){ echo "Login com sucesso!"; }else{ echo "Falhou no login, tente novamente!"; } // desligar a ligacao a base de dados... //nao é obrigatório, uma vez que por default, a ligação é fechada automaticamente mysql_close($conectar); ?> Não necessitas de mudar o teu codigo HTML. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
Llaverola Posted November 23, 2007 at 04:41 PM Author Report Share #149684 Posted November 23, 2007 at 04:41 PM da-me erro nesta linha: mysql_real_escape_string($_POST[]); Link to comment Share on other sites More sharing options...
Llaverola Posted November 23, 2007 at 04:46 PM Author Report Share #149688 Posted November 23, 2007 at 04:46 PM ou seja, ele esta a conectar ao mysql com os meus dados username: 13137 password: jokjHp. eu kero que ele valide o login qd eu puser um username e password mas q esteja dentro da tabela login q eu criei na minha base de dados, e ele ta a fazer um login correcto só qd ponho os dados do meu mysql 😉 Link to comment Share on other sites More sharing options...
softklin Posted November 23, 2007 at 05:24 PM Report Share #149692 Posted November 23, 2007 at 05:24 PM Entao vamos definir uma coisa: - A password do sql (onde tens a instrução mysql_connect) fica so para esse efeito, ela fica lá, pronto. - Em vez de correres o script php, primeiro vais ao html, e poes la os dados de login., depois o resto do processo é automatico, nao precisas de por as tuas passes da tabela users no script (apenas precisa de estar la a pass de sql, que ja está em cima). Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
Llaverola Posted November 23, 2007 at 06:01 PM Author Report Share #149698 Posted November 23, 2007 at 06:01 PM oh softclean, mas o utilizador tem d inserir dados na textfield do html. vou receber esses dados e compara-los com as passwords dos users da tabela user entendeS? n tou a perceber o k pretendes 😉 Link to comment Share on other sites More sharing options...
NCS_One Posted November 23, 2007 at 08:06 PM Report Share #149775 Posted November 23, 2007 at 08:06 PM Ois Tenho aqui um feito por mim, podes tirar ideias daqui. Atençao k isto foi so para + ou - perceber como isto se faz, os pros k depois digam os erros e as alteraçoes a fazer. Ficheiro Functions.php <?php function Tentar_Login($FNome, $FPass) { include "DB_Configs.php"; // Aqui eh onde tao estas variaveis DB_Host, DB_User, DB_Pass. $Conectar=mysql_connect(DB_Host, DB_User, DB_Pass) Or Die("Falhou conectar á base de dados"); mysql_select_db(DB_Name, $Conectar) Or Die("Base de dados desconhecida"); $Query="SELECT Nome, Pass FROM Utilizador WHERE Nome='$FNome'"; $Resultado=mysql_query($Query); $Num=mysql_num_rows($Resultado); if ($Num != 0) { list($Nome, $Pass) = @ mysql_fetch_row($Resultado); $FPass=md5($FPass); If ($FPass == $Pass) return true; else return"Password incorrecta."; } else return "Nome não existe."; } function Confirmar_Login() { // session_start(); if (isset($_SESSION["F_Nome"])) return True; else return False; } ?> Ficheiro Index.php <?php include "Functions.php"; $ErroLogin=False; $StrErroLogin=" "; if (isset($_POST["SubmitInput"])) { if (isset($_POST["Nome"])) $F_Nome=$_POST["Nome"]; if (isset($_POST["Pass"])) $F_Pass=$_POST["Pass"]; if (empty($F_Nome) || empty($F_Pass)) { $ErroLogin=True; $StrErroLogin="Dados Incompletos"; } Else { $Func_Return=Tentar_Login($F_Nome, $F_Pass); if ($Func_Return=="True") { session_start(); $_SESSION['F_Nome']=$F_Nome; } else { $ErroLogin=True; $StrErroLogin=$Func_Return; } } } ?> <?php if (Confirmar_Login()) { ?> <html> <head> <title>Index</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script language="JavaScript"> </script> </head> <body> <span>Pagina principal.<?php echo $_SESSION["F_Nome"] ?></span><a href="Principal.php">eee</a> <?php } else { ?> <html> <head> <title>Index</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <STYLE TYPE="text/css"> #TableLogin { background-color:#CCCCC0; border:1 solid #000000; } </STYLE> <script language="JavaScript"> </script> </head> <body> <table width="100%" heigth="100%" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="bottom"> <table width="1" id="TableLogin" cellspacing="0" cellpadding="0"> <?php if ($ErroLogin==True) { ?> <tr> <td align="center" valign="top" height="30" colspan="2"><span><b>Erro no login.</b></span></td> </tr> <tr> <td align="center" valign="top" height="30" colspan="2"><span><b><?=$StrErroLogin ?></b></span></td> </tr> <?php } ?> <tr> <td align="center" valign="top" height="30" colspan="2"><span>Por favor faça o login.</span></td> </tr> <tr> <form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>"> <td align="right"><span>Nome : </span></td> <td> <input type="text" name="Nome" value="" size="20" maxlength="50" /></td> </tr> <tr> <td><span>Password : </span></td> <td> <input type="password" name="Pass" value="" size="20" maxlength="32" /></td> </tr> <tr> <td align="center" colspan="2"><input type="submit" name="SubmitInput" value="Login" /></td> </form> </tr> </table> </td> </tr> </table> <?php } ?> </body> </html> <?php ?> Ficheiro Principal.php <?php include "Functions.php"; session_start(); if (!Confirmar_Login()) Header("Location: Index.php"); ?> <html> <head> <title>Principal</title> <script language="JavaScript"> </script> </head> <body> <span>Pagina principal 2.<?php echo $_SESSION["F_Nome"] ?></span> </body> </html> Repara k nao previne o SQL Injection e a maneira k eu uso para ver se a sessao esta aberta tb nao presta. Ah pouco tempo li estes 2 posts : http://www.portugal-a-programar.pt/index.php?showtopic=3797 http://forums.ptsec.net/linguagens_web/artigo_vulnerabilidades_em_aplicacoes_web-t1117.0.html e falei com o djthyrax e ele disse me k a melhor maneira de verificar a sessao eh esta: Crias uma HASH dos headers do cliente quando ele faz o login e a cada pedido do cliente voltas a fazer uma nova HASH dos headers e comparas com a k ja tinhas. //Para gerar o hash de verificação foreach($_SERVER as $k => $v) if(!strstr($k, "REFERER") && substr($k, 0, 5) == "HTTP_") $dadosDeVerificacao[$k] = $v; $hash = md5(serialize($dadosDeVerificacao)); //Verificacao if($hashNoServer != $hashGeradoNoMomento){ $_SESSION = array(); session_destroy(); header("Location: login.php"); } Espero nao estar a dizer nada de errado, os pros k confirmem. Se a vida te voltar as costas aproveita e apalpa-lhe o cu. Link to comment Share on other sites More sharing options...
NCS_One Posted November 23, 2007 at 08:11 PM Report Share #149777 Posted November 23, 2007 at 08:11 PM Outra coisa eu quando vou ver se os dados sao correctos na funçao Tentar_Login se o nome nao existir digo k o nome nao existe e se a password for incorrecta tb o digo e isto nao se deve fazer, deve se dizer k os dados estao incorrectos pq se um hacker souber k o nome esta correcto pode tentar usar ataques de dicionario ou brute force. Se a vida te voltar as costas aproveita e apalpa-lhe o cu. Link to comment Share on other sites More sharing options...
djthyrax Posted November 23, 2007 at 11:59 PM Report Share #149847 Posted November 23, 2007 at 11:59 PM Têm a noção que estarem a dar-lhe 907087098709708979078098097 exemplos diferentes sem ele perceber 1 sequer só o vai confundir mais? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
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