View Full Version : [PHP-MySQL] problemi login
<Gabrik>
09-06-2010, 22:00
salve raga ho un problema che non riesco a risolvere...
praticamente è un login semplice semplice mi interessa solo visualizzare se si può accedere o no...
ma puntroppo il mio php sembra impazzito e non funziona :muro: :muro:
<?php
$conn=mysql_connect("localhost","user","user") or die ("Errore connessione Server MySQL". mysql_error());
mysql_select_db("prova") or die ("Errore connessione al database". mysql_error());
session_start();
$utente=htmlspecialchars($_POST['usr']);
$pass=md5(htmlspecialchars($_POST['psw']));
$query="SELECT nome,password FROM utenti WHERE nome='".$utente."' AND password='".$pass."';";
//ho provato anche a settare $query in questo modo ($query = sprintf("SELECT nome,password FROM utenti WHERE username = '%s' AND user_password = '%s' ;", mysql_real_escape_string($utente), mysql_real_escape_string($pass)); ) senza alcun risultato
$ris=mysql_query($query,$conn);
if(mysql_num_rows($ris))
print("Accesso eseguito correttamente!");
else
print("Nome utente o Password errati!");
?>
:help: ho messo anche echo al posto di print ma non cambia niente :muro: :muro:
Fibrizio
10-06-2010, 08:31
Anzitutto ti sconsiglio di utilizzare htmlspecialchars in md5, a meno che chiaramente anche le password in entrata non siano generate con la stessa codifica.
Inoltre htmlspecialchars non serve ad prevenire i mysql inject, piuttosto ti conviene provare ad usare addslashes, oppure mysql_real_escape_string, come hai fatto dopo.
Per il resto non sembrano esserci problemi di php.
Il post come lo esegui? Sei sicuro che prenda dei dati?
Il database è formattato correttamente? Quei campi che richiedi esistono?
DanieleC88
10-06-2010, 10:36
Prima modifichi la password con htmlspecialchars() e poi ne fai un hashing MD5? Rischia di modificarti la password e cambiare l'MD5 in output (anche se i caratteri interessati sono abbastanza inusuali per una password). :)
Se ne fai l'hashing MD5, per la password non serve proteggerti dalle SQL injections (non arriveranno mai apostrofi e schifezze varie nella query), mentre lo devi fare per il nome utente, e per quello usa mysql_real_escape_string().
ciao ;)
EDIT: d'oh, non avevo letto la parte dell'MD5 scritta anche da Fibrizio. Vabbe', un post in più per ricordartelo. :Prrr:
<Gabrik>
10-06-2010, 11:21
grazie ad entrambi
allora sto provando ad usare direttamente il mysql_real_escape_string()
i campi che richiedo esistono e sono formattati correttamente in quanto una pagina per la registrazione (quindi con l'INSERT) funziona correttamente
per quanto riguarda il post dovrebbe essere fatto correttemente
<form name="accesso" action="login.php" method="post">
<table align="center" cols="2" rows="3">
<tr>
<td><b>Nome Utente</b></td>
<td><input type="text" name="usr" /></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input type="password" name="psw" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Accedi!" /></td>
</tr>
</table>
</form>
dovrebbe essere corretto ma continua a fornirmi una pagina bianca :muro:
Fibrizio
10-06-2010, 11:24
grazie ad entrambi
allora sto provando ad usare direttamente il mysql_real_escape_string()
i campi che richiedo esistono e sono formattati correttamente in quanto una pagina per la registrazione (quindi con l'INSERT) funziona correttamente
per quanto riguarda il post dovrebbe essere fatto correttemente
<form name="accesso" action="login.php" method="post">
<table align="center" cols="2" rows="3">
<tr>
<td><b>Nome Utente</b></td>
<td><input type="text" name="usr" /></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input type="password" name="psw" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Accedi!" /></td>
</tr>
</table>
</form>
dovrebbe essere corretto ma continua a fornirmi una pagina bianca :muro:
Immagino che la pagina login.php contenga il codice che hai messo all'inizio.
Ti suggerisco di eseguire un echo su $query
echo $query="SELECT nome,password FROM utenti WHERE nome='".$utente."' AND password='".$pass."';";
In modo da vedere che cosa mandi nel mysql e poi di incollare eventualmente la stessa query a mano sul database, per vedere che cosa produce.
con ogni probabilità interroghi male il database e questo riporta 0 righe.
<Gabrik>
10-06-2010, 11:42
adesso funziona ma non ho nessun controllo per le injection...
il codice l'ho modificato come segue
$utente=$_POST['usr'];
$pass=md5($_POST['psw']);
$query="SELECT nome,password FROM utenti WHERE nome='".$utente."' AND password='".$pass."';";
echo($query."<br>");
$ris=mysql_query($query,$conn);
echo ($ris."<br>");
if(mysql_num_rows($ris))
print("Accesso eseguito correttamente!");
else
print("Nome utente o Password errati!");
adesso mi conviene usare mysql_real_escape_string() come avevo già fatto il precedenza giusto?
Fibrizio
10-06-2010, 13:16
sì ti conviene usarlo così
$utente=mysql_real_escape_string($_POST['usr']);
$pass=md5($_POST['psw']);
$query="SELECT nome,password FROM utenti WHERE nome='".$utente."' AND password='".$pass."';";
echo($query."<br>");
$ris=mysql_query($query,$conn);
echo ($ris."<br>");
if(mysql_num_rows($ris))
print("Accesso eseguito correttamente!");
else
print("Nome utente o Password errati!");
<Gabrik>
10-06-2010, 13:56
ok grazie :D
tutto risolto si può chiudere
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.