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

Guest tsenart

[Resolvido] PHP e Mysql

31 mensagens neste tópico

Olá pessoal.

Tenho uma dúvida que não consegui saciar sozinho.

É o seguinte...

Tenho o apache a correr no Suse Linux 10.2 em conjunto com a última versão do Mysql server.

Todas as tabelas e databses já estão criadas.

O seguinte código php produz uma página em branco sem sourcecode....

index.html

<html>
<head>
  <title>Login</title>
</head>
<body>
  <form action="login.php" method="POST">
   <p><input type="text" name="username"></p> 
   <p><input type="password" name="password"></p>
   <input type="submit" value="Login">

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

login.php

<?php
$con = mysql_connect("localhost:3306","username","password") or die('Could not connect: ' . mysql_error($con)); //O username e password estão alterados...
mysql_select_db("accounts", $con) or die("Could not use 'accounts' database.\t" . mysql_error($con));
$username = $_POST['username'];
$password = $_POST['password'];
$q = "SELECT COUNT(*) FROM ac_table WHERE username=$username AND password=$password";
if(($res = mysql_query($q, $con)) != 1)
{
    echo "
<html>
<head>
<title>Login Failed!</title>
<h1>Error</h1>
<h3>User '$username' not authorized</h3>
</head>
<body></body>
</html>"
}
else
{
    echo "
<html>
<head>
<title>Login Successful</title>
<h1>Welcome $username!</h1>
</head>
<body></body>
</html>"
}
mysql_close($con);
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

poe: $q = "SELECT * FROM ac_table WHERE username=$username AND password=$password";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não.... Eu não quero fazer isso. Eu quero contar o número de rows em que o username e password equivalem ao introduzido.

Se for igual a 1 o login é efectuado.

Se for diferente de um,  não é.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

troca aquele if por:

if(mysql_num_rows($res = mysql_query($q, $con)) != 1)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já modifiquei o código e não funciona. Será que é do apache?

<?php
$con = mysql_connect("localhost","root","blaster1234") or die('Could not connect: ' . mysql_error($con));
mysql_select_db("accounts", $con) or die("Could not use 'accounts' database.\t" . mysql_error($con));
$username = $_POST['username'];
$password = $_POST['password'];
$q = "SELECT * FROM ac_table WHERE username=$username AND password=$password;";
if(mysql_num_rows($res = mysql_query($q, $con)) != 1)
{
    echo "
<html>
<head>
<title>Login Failed!</title>
<h1>Error</h1>
<h3>User '$username' not authorized</h3>
</head>
<body></body>
</html>";
}
else
{
    echo "
<html>
<head>
<title>Login Successful</title>
<h1>Welcome $username!</h1>
</head>
<body></body>
</html>";
}
mysql_close($con);
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Troca $username = $_POST['username'];

$password = $_POST['password'];

$q = "SELECT * FROM ac_table WHERE username=$username AND password=$password;"; por:

	$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$q = "SELECT * FROM ac_table WHERE username='$username' AND password='$password'";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Troca $username = $_POST['username'];

$password = $_POST['password'];

$q = "SELECT * FROM ac_table WHERE username=$username AND password=$password;"; por:

	$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$q = "SELECT * FROM ac_table WHERE username='$username' AND password='$password'";

prevenção quanto a sql_inject?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Troca $username = $_POST['username'];

$password = $_POST['password'];

$q = "SELECT * FROM ac_table WHERE username=$username AND password=$password;"; por:

	$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$q = "SELECT * FROM ac_table WHERE username='$username' AND password='$password'";

prevenção quanto a sql_inject?

Sim, e inclusão das ' na query, elas são necessárias. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Troca $username = $_POST['username'];

$password = $_POST['password'];

$q = "SELECT * FROM ac_table WHERE username=$username AND password=$password;"; por:

	$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$q = "SELECT * FROM ac_table WHERE username='$username' AND password='$password'";

prevenção quanto a sql_inject?

Sim, e inclusão das ' na query, elas são necessárias. :D

tipo:

username='$username' AND password='$password' ?? pas ' nestas situações?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tipo:

username='$username' AND password='$password' ?? pas ' nestas situações?

Sim, porque se a password for um número (123456 por exemplo), a password deverá ser guardada como string e não como integer, e se não usares as ', fica como integer. :P Ah, e caso tenha espaços também é preciso senão dá barraca. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto e suposto?

Error on query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' AND password=''' at line 1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Er, é cagativo...

Spoiler:

[glow=white,2,300]SQL injection...[/glow]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, eu é que tinha feito isso mal, mas o erro aparece a mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, eu é que tinha feito isso mal, mas o erro aparece a mesma.

Queres uma dica? Vê uma thread onde eu falei de SQL injection :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, qd mandei o post a reportar o erro, ja tinha entrado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ui,n passo nem da 1a XD

deixou d dar a cena... ta alojada no teu pc o server?? poe DNS.. www.no-ip.org

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Presta atenção à parte do "Unix Date"...Comando date e tal... :hmm:

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