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

zeroonnet

Que é que tá mal?!?

6 mensagens neste tópico

Tipo ando aqui a ver se consigo fazer um sistema de login em php mas ao fazer o login depois de registar o nick dáme isto:

Houve um erro, nao foi possivel efectuar o login, numero de utilizador invalido... - ou seja ta a dizer que o nome do utilizador que meti não existe na BD

agora queria era saber onde ta o erro pois ou ele nao ta a escrever ou nao ta a ler bem :S

Login.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!-- 
//Login.html
//by zeroonnet
--!>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta name="author" content="zeroonnet">

<title>Login.php by zeroonnet</title>
</head>

<body>

<form action="login.php" method="POST">
<!-- vai ligar ao login.php --!>

<b>Login:</b>
<p><input type="text" value="" name="nome"size="10" ></p>
<!-- Texto e caixa para o login --!>

<b><br>Password:</b>
<p><input type="password" value="" name="pass" size="20" ></p>
<!-- Texto e caixa para a password --!>

<p> 
   <input type="submit" value="Login" name="Validar" >
     
   <input type="reset" value="Reset" name="Limpar" >
   <!-- botões de validar e limpar -->
</p> 

</form>

</body>
</html>

Login.php

<?php

/**
* @author zeroonnet
* @copyright 2007
*/

$nome=$_POST["nome"];
$password=$_POST["pass"];
/**
*seta $nome com o que está no login
*seta $password com o que está na password
*/

$conectar=mysql_connect("localhost", "zeroonnet","12345" ) or die ("Falhou a ligação à base de dados.");
/**
*conecta a base de dados caso não dê dá erro
**/

$bdd=mysql_select_db("bdzero", $conectar) or die ("Falhou ao escolher a base de dados.");
/**
*escolhe e seleciona a base de dados
**/

$pesquisa="select nick, pass, email, avatar, signature, lingua from utilizador where nick='$nome';";
/**
*coloca-se na $pesquisa o que queremos pesquisar
**/

$resultado=mysql_query($pesquisa);
/**
*faz a pesquisa na base de dados e guarda em $resultado
**/

$num=mysql_num_rows($resultado);
/**
*conta o numero de resultados obtidos
**/

if( $num!=0 )
{
list($nick, $pass, $email, $avatar, $signature, $lingua)= @ mysql_fetch_row($resultado);
	if( $pass==$password)
	{
		echo "Login efectuado com sucesso." ;
		echo $nick;
		echo "<br>";  
		echo $pass;
		echo "<br>";
		echo $email;
		echo "<br>";
					echo $avatar;
		echo "<br>";
					echo $signature;
		echo "<br>";
					echo $lingua;
		echo "<br>";
		/**
		*caso a password esteja correcta diz que o login foi efectuado com sucesso.
		**/
	}
	else
	{
	    echo "Impossivel realizar o login. Login ou password incorrectos.";
	    /**
	    *caso a password esteja errada diz que o loding não foi efectuado com sucesso
	    **/
	}	
}
else  // aqui temos que $num=0
{
  echo "Houve um erro, nao foi possivel efectuar o login, numero de utilizador invalido...";
}
mysql_close($conectar);
/**
*desliga a ligação à base de dados
**/

?>

registo.html

<!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=utf-8" />
<title>Registo</title>

</head>

<body>
<form action="registo.php" method="POST">
<div align="center" >
  <p>Registo</p>
  </div>
  <p>Nick:
  <input type="text" value="" name="nick"size="30" ></p>
  <p>Mail:
  <input type="text" value="" name="email" size="30" ></p>
  <p>Confirm mail:
  <input type="text" value="" name="email2" size="30" ></p>
  <p>password:
  <input type="password" value="" name="password" size="30" ></p>
  <p>confirm password:
  <input type="password" value="" name="password2" size="30" ></p>

  <p>Lingua:
    
  <input type="text" value="" name="lingua" size="30" ></p>
  <p> </p>
  <p>Avatar:
  <input type="text" value="" name="avatar" size="30" ></p>
  <p>Signature:
  <input type="text" value="" name="signature" size="30" ></p>
  <p> </p>
  <p>Confirmation Code:
  <input type="text" value="" name="confirmcode" size="30" ></p>
  
<input type="reset" value="Reset" name="Limpar" >
  <input type="submit" name="registar" value="Submit" />

  <p> </p>
</form>
</body>
</html>

registo.php

<?php

/**
* @author zeroonnet
* @copyright 2007
*/

$nick=$_POST["nick"];
$email=$_POST["email"];
$email2=$_POST["email2"];
$password=$_POST["password"];
$password2=$_POST["password2"];
$avatar=$_POST["avatar"];
$signature=$_POST["signature"];
$lingua=$_POST["lingua"];
$confirmcode=$_POST["confirmcode"];

$conectar=mysql_connect("localhost", "zeroonnet","12345" ) or die ("Falhou a ligação à base de dados.");

$bdd=mysql_select_db("bdzero", $conectar) or die ("Falhou ao escolher a base de dados.");

mysql_query("INSERT INTO `utilizador` VALUES ($nick, $password, $email, $avatar, $signature, $lingua);");
echo "Utilizador registado com sucesso.";

mysql_close($conectar);
?>

Colei aqui os codes de tudo mas duvido que os .html sejam precisos. Se virem o erro digam sff xD e já agora alguem me explica o que é o SQL Injection algo assim? um amigo meu disse pa no code ter cuidado pois o meu ta vulneravel a isso, acho que é poder efectuar codes de mysql pelo meu mas não sei como defender isso.

Fiquem Bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<djthyrax> zeroonnet,

* EF0 saiu (Quit: +q)

<djthyrax> <zeroonnet> pa escrever no sql é assim: mysql_query("INSERT INTO `utilizador` VALUES ($nick, $password, $email, $avatar, $signature, $lingua);");

<djthyrax> experimenta:

<HecKel> djthyrax: cala-te.

<djthyrax> mysql_query("INSERT INTO `utilizador` VALUES ('$nick', '$password', '$email', '$avatar', '$signature', '$lingua');");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o djthyrax descubriu o erro aquando eu postei no irc xD problema resolvido :(

em vez de:

mysql_query("INSERT INTO `utilizador` VALUES ($nick, $password, $email, $avatar, $signature, $lingua);");

era:

mysql_query("INSERT INTO `utilizador` VALUES ('$nick', '$password', '$email', '$avatar', '$signature', '$lingua');");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Colei aqui os codes de tudo mas duvido que os .html sejam precisos. Se virem o erro digam sff xD e já agora alguem me explica o que é o SQL Injection algo assim? um amigo meu disse pa no code ter cuidado pois o meu ta vulneravel a isso, acho que é poder efectuar codes de mysql pelo meu mas não sei como defender isso.

http://deathseeker25.wordpress.com/2006/12/28/sql-injection-breve-explicacao/

Basicamente, em vez de:

mysql_query("INSERT INTO `utilizador` VALUES ('$nick', '$password', '$email', '$avatar', '$signature', '$lingua');");

usas:

mysql_query(sprintf("INSERT INTO `utilizador` VALUES ('%s', '%s', '%s', '%s', '%s', '%s');", mysql_real_string_escape($nick), mysql_real_string_escape($password), mysql_real_string_escape($email), mysql_real_string_escape($avatar), mysql_real_string_escape($signature), mysql_real_string_escape($lingua)));

Ou então:

$nick = mysql_real_escape_string($nick);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pode ser assim:

$nome=mysql_real_escape_string($_POST["nome"]);

$password=mysql_real_escape_string($_POST["pass"]);

?

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