Jump to content

Recommended Posts

Posted (edited)

Boa tarde, P@P

Eu estou a tentar fazer um sistema de log in e de registo mas não me esta a dar bem: no log in eu ponho info correta e ele diz que esta incorreto:

<?PHP
session_start();

include "db_connect.php";

$username = $_POST['user'];
$password = $_POST['password'];

mysql_select_db($dbname, $connect);
$query_log="SELECT username, password FROM utilizadores WHERE username='". $username. "' AND password='". $password ."'";
$log = mysql_query($query_log, $connect) or die(mysql_error());
$row_log = mysql_fetch_assoc($log);

if ($username == $row_log['username'] AND $pass == $row_log['password']) {
  $_SESSION['user'] = $username;
  header("Location: admin.php");
  }
  else {
 echo 'Utilizador ou Password incorrectos';
  }
mysql_close($connect);
?>

No registo não me adiciona e da erro nas variaveis das textbox:

<?PHP
include 'db_connect.php';
?>
<table>
 <form action="" method="post">
  <tr>
<td>
 Username:
</td>

<td>
 <input type="text" name="user" />
</td>
  </tr>

  <tr>
<td>
 Password:
</td>

<td>
 <input type="password" name="pass" />
</td>
<input type="submit" name="submit" />
  </tr>
 </form>
</table>
<?PHP
$username= $_POST['user'];
$password = sha1($_POST['password']);
if(isset($_POST['submit']))
{
 $query="insert into utilizadores(username, password) values('".$username."','".$password."')";
 $res=mysql_query($query);
 header('location:index.php');
}
?>

Alguem me pode ajudar?

Obrigado,

PF2G

Edited by brunoais
geshi!
Posted

1º (e o erro mesmo) o teu input de password tem o nome "pass" ... logo esta linha tem de ser alterada:

$username = $_POST['user'];
//$password = $_POST['password'];
$password = $_POST['pass'];

2º : tem cuidado com os valores que são fornecidos ao script, tenta fazer uma limpeza aos mesmos (o porquê ve na net SQL Injection):

$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);

3º : como tens o teu sql a retornar somente o registo que contem o username e password correcto, basta saber se retornas-te 1 registo (não é preciso validar novamente):

//if ($username == $row_log['username'] AND $pass == $row_log['password']) {
if (mysql_num_rows($log)) {
IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

Realmente os nomes tava trocados, foi erro meu :S

Agora ele faz login mas da erro no $_Session porque?

<?PHP
include 'db_connect.php';
session_start();

$_SESSION['username'] = $username;
?>
<html>
Bem-Vindo ao Backoffice, <?PHP echo $username ?>
</html>

e o registo continua a não adicionar....

<?PHP
include 'db_connect.php';
?>
<table>
 <form action="" method="post">
  <tr>
<td>
 Username:
</td>

<td>
 <input type="text" name="user" />
</td>
  </tr>

  <tr>
<td>
 Password:
</td>

<td>
 <input type="password" name="pass" />
</td>
<input type="submit" name="submit" />
  </tr>
 </form>
</table>
<?PHP
$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);
if(isset($_POST['submit']))
{
 $query="insert into utilizadores(username, password) values('".$username."','".$password."')";
 $res=mysql_query($query);
 header('location:index.php');
}
?>
Edited by brunoais
geshi!
Posted

porque tens as variáveis trocadas ...

/* ler a variável $username (que não está declarada) e guarda o seu valor (NULL) em sessão (destruindo o que já existe) */
//$_SESSION['username'] = $username;
/* ler a variável de sessão para $username */
$username = $_SESSION['username'];
IRC : sim, é algo que ainda existe >> #p@p
Posted

porque tens as variáveis trocadas ...

/* ler a variável $username (que não está declarada) e guarda o seu valor (NULL) em sessão (destruindo o que já existe) */
//$_SESSION['username'] = $username;
/* ler a variável de sessão para $username */
$username = $_SESSION['username'];

Ei que estupidez :/

Obrigado amigo. Agora ja so falta o inserir user

Posted (edited)

Supõe que o ficheiro PHP para efectuar o registo do utilizador se chama "registo.php".

O código seguinte já deve resultar.

<?PHP
include 'db_connect.php';
$step = $_POST['step'];
if($step != 1)
{
?>
<table>
 <form action="registo.php" method="post">
<input type="hidden" name="step" value="1" />
  <tr>
	<td>
	 Username:
	</td>

	<td>
	 <input type="text" name="user" />
	</td>
  </tr>

  <tr>
	<td>
	 Password:
	</td>

	<td>
	 <input type="password" name="pass" />
	</td>
	<input type="submit" name="submit" />
  </tr>
 </form>
</table>
<?PHP
}
else if($step == 1)
{
$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);

if($username != Null && $password != Null)  //Alterar as condições de validação, como limite minimo na dimensão do username/password
  {
$query="insert into utilizadores(username, password) values('".$username."','".$password."')"; //Encriptar a password para não correr os risco de algum dia as passwords dos teus utilizadores ficarem expostas.
$res=mysql_query($query);
echo "Registo Concluido";
  }
else
 {
 echo "Dados Invalidos";
 }
}
}
?>

Aconselho ainda a não armazenares as Passwords sem estarem encriptadas. Utiliza algo como

hash('sha512' ,$password);

E na função de login, encriptas a password inserida para fazer login, e comparas o resultado dessa encriptação com o que tens na Base de Dados.

Edited by johnmaia
Posted

Supõe que o ficheiro PHP para efectuar o registo do utilizador se chama "registo.php".

O código seguinte já deve resultar.

<?PHP
include 'db_connect.php';
$step = $_POST['step'];
if($step != 1)
{
?>
<table>
 <form action="registo.php" method="post">
<input type="hidden" name="step" value="1" />
  <tr>
	<td>
	 Username:
	</td>

	<td>
	 <input type="text" name="user" />
	</td>
  </tr>

  <tr>
	<td>
	 Password:
	</td>

	<td>
	 <input type="password" name="pass" />
	</td>
	<input type="submit" name="submit" />
  </tr>
 </form>
</table>
<?PHP
}
else if($step == 1)
{
$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);

if($username != Null && $password != Null)  //Alterar as condições de validação, como limite minimo na dimensão do username/password
  {
$query="insert into utilizadores(username, password) values('".$username."','".$password."')"; //Encriptar a password para não correr os risco de algum dia as passwords dos teus utilizadores ficarem expostas.
$res=mysql_query($query);
echo "Registo Concluido";
  }
else
 {
 echo "Dados Invalidos";
 }
}
}
?>

Aconselho ainda a não armazenares as Passwords sem estarem encriptadas. Utiliza algo como

hash('sha512' ,$password);

E na função de login, encriptas a password inserida para fazer login, e comparas o resultado dessa encriptação com o que tens na Base de Dados.

Desculpa mas continua sem adicionar. Aparece a mensagem de Registo concluido mas nao adiciona nada...

Posted

O código seguinte já deve resultar.

<?PHP
include 'db_connect.php';
$step = $_POST['step'];
if($step != 1)
{
?>
<table>
 <form action="registo.php" method="post">
<input type="hidden" name="step" value="1" />
  <tr>
	<td>
	 Username:
	</td>

	<td>
	 <input type="text" name="user" />
	</td>
  </tr>

  <tr>
	<td>
	 Password:
	</td>

	<td>
	 <input type="password" name="pass" />
	</td>
	<input type="submit" name="submit" />
  </tr>
 </form>
</table>
<?PHP
}
else if($step == 1)
{
$username = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['pass']);

if($username != Null && $password != Null)  //Alterar as condições de validação, como limite minimo na dimensão do username/password
  {
   mysql_query("INSERT INTO `utilizadores` (`username`, `password`) VALUES ( '".$username."', '".hash('sha512' ,$password)."');");
echo "Registo Concluido";
  }
else
 {
 echo "Dados Invalidos";
 }
}
}
?>
Posted

Fogo sem exito...

adiciona esta linha :

	$res=mysql_query($query);
	echo mysql_error(); // faz a saída para a página do erro que fez com que o SQL não fosse correctamente executado

Diz quer nenhuma dtabse foi selecionada

Posted (edited)

Porque tens de escolher a Base de Dados aonde estás a inserir dados nas tabelas.

mysql_select_db("nomedabd");

Declara isto logo após o

include 'db_connect.php';

Ou colocar o "mysql_select_db" dentro do ficheiro: "db_connect.php".

Aliás, tu usas esta linha na tua função para efectuar o login:

mysql_select_db($dbname, $connect);

Só terás mesmo de adicioná-la na função de registo.

Edited by johnmaia

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
×
×
  • 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.