Come faccio a controllare che la password immessa in un form sia esattamente quella abbinata allo user fornito???
p.s.: la tabella in cui vado a prendere i dati è quella del forum! :D
Come faccio a controllare che la password immessa in un form sia esattamente quella abbinata allo user fornito???
p.s.: la tabella in cui vado a prendere i dati è quella del forum! :D
SELECT * FROM tabella_utenti WHERE username = '$username' AND password = '$password'
Se ti restituisce un record la password è giusta.
che scemo!
Come ho fatto a nn pensarci???
Forse perchè era notte fonda e la mente nn era + lucida
però nn funziona lo stesso
ho scritto:
[code:1:f15e4ec085]$query= "SELECT username, user_password FROM phpbb_users WHERE username = '$user' AND user_password = '$pass'";[/code:1:f15e4ec085]
e quando stampo a video la variabile $query mi scrive:
SELECT username, user_password FROM phpbb_users WHERE username = '$user' AND user_password = '$pass'
sostituendo a $user e $pass i valori che gli ho passato
ho provato a mettere il mio user (giusto) e la pass (sbagliata) e dice la stessa cosa, poi user (giusto) e pass (giusta), ma stesso risultato
dove sbaglio ???
che errore ti da?
a proposito, hai fatto il digest della password? Se non ricordo male phpbb memorizza il digest...
che cos'è il digest?
nn mi da errori, ma nella variabile $query, se la stampo a video, contiene questo:
SELECT username, user_password FROM phpbb_users WHERE username = '$user' AND user_password = '$pass'
mettendo al posto di $user e $pass quello che gli ho passato
es:
SELECT username, user_password FROM phpbb_users WHERE username = 'baubau' AND user_password = 'miciomicio'
che esca quella roba a video è giusto (cosa volevi che uscisse?)
adesso non ho tempo per spiegare cos'è il digest, fai finta che sia un modo per criptare una password
comunque metti questa riga prima della query:
$pass = md5($pass);
Fammi sapere
ahhhhh
si quello l'ho fatto, ma quando creo un nuovo utente
devo metterlo anche quando vado a pescarlo???
ok, l'ho messo e x la precisione ora il codice è così:
[code:1:359f3919ac]$pass= md5($pass);
$query= "SELECT username, user_password FROM phpbb_users WHERE username = '$user' AND user_password = '$pass'";[/code:1:359f3919ac]
ma come faccio a sapere se la password messa è quella abbinata all' user?
perchè mi presenta questo
SELECT username, user_password FROM phpbb_users WHERE username = '***user***' AND user_password = ''***passwd criptata***'
anche quando metto una passwd sbagliata (cioè la cripta e poi me la fa vedere)
certo, perché se lo metti quando crei un utente nel database non ci sarà la password ma appunto il suo digest e quindi devi verificare il digest della password e non la password
non c'è un modo per prendere un dato dalla tabella e metterlo in una variabile ???
Sono sicuro che c'è, ma nn so qual'é![]()
la vecchia e cara SELECT non ti piace?
cosa volevi dire? perchè dubiti che la password sia quella giusta?Originalmente inviato da imoteph
nn è che dubito che la password sia quella giusta, ne sono sicuro![]()
Perchè sono io stesso a mettercela.
Mi spiego, c'è una pagina "login.php" che contiene un form in viene chiesta il nome utente ($user) e la password ($pass) poi cliccando su conferma, con metodo 'post' invio i dati alla pagina "conferma.php" che contiene questo codice:
[code:1:47ec53fd67]<?
$server= 'localhost';
$nome_db= 'my_imoteph';
//apertura connessione al db del forum
$conn= mysql_connect($server, $user, $passwd) or die ("Connessione a MySql fallita " .mysql_error());
//verifica connessione avvenuta
if ($conn)
print("Connessione al db riuscita<br>");
else
die ("Connessione al server fallita<br>");
//selezione del db
$sel= mysql_select_db($nome_db,$conn) or die ("Errore nella selezione del db ".mysql_error());
//controllo se l'utente e la password esistono
$pass= md5($pass);
$query= "SELECT username, user_password FROM phpbb_users WHERE username = '$user' AND user_password = '$pass'";
$ris= mysql_query($query,$conn) or die("Errore nella query: ". mysql_error());
print($query."<br>");
?>[/code:1:47ec53fd67]
Quando nella pagina login.php metto ad esempio come user "imoteph" e passwd "passwd" (facendo finta che passwd sia quella giusta) voglio prendere la password abbinata a "imoteph" dalla tabella phpbb_users e metterla in una variabile. Se faccio la SELECT, dentro alla variabile nn ci trovo la password, ma ci trovo scritto:
SELECT username, user_password FROM phpbb_users WHERE username = 'imoteph' AND user_password = '76a2173be6393254e72ffa4d6df1030a
io invece voglio che dentro alla variabile ci sia scritto solo ed esclusivamente "76a2173be6393254e72ffa4d6df1030a"
Spero di essermi spiegato abbastanza chiaramente
76a2173be6393254e72ffa4d6df1030a
è esattamente l'md5 di 'passwd' 8)
in che variabile stai guardando? in $query?
si
devi printare $ris!!!!!!!!!
There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...
ma in $query c'è la domanda che fai al database, non la risposta!
daltronde l'hai riempita tu con quel contenuto
devi fare la fech dei risultati della query
ok :D
ho aggiunto
[code:1:a5d26b746e]print("Ris= ".$ris);[/code:1:a5d26b746e]
e come output mi da
Ris= Resource id #4
che cavolo è?
Io voglio la password in una variabile così da poterla confrontare con quella che viene fornita nella pagina login.php insieme allo user
non è esatto. $ris è un identificativo di risorsaOriginalmente inviato da Evcz
fai cos':
[code:1:9be2a64f1e]while ($row = mysql_fetch_array($ris, MYSQL_NUM)) {
printf ("username: %s password: %s", $row[0], $row[1]);
}
[/code:1:9be2a64f1e]
ok, ho capito
ora nn ho tempo per provarla
ma potresti spiegarmi bene cosa fa il codice che hai scritto???
così se lo capisco oltre che a metterlo è meglio! :D
che cos'è la fetch?
quando fai una "domanda" ad un database, questo non ti spedisce la risposta tutta intera ma ti apre un "canale" dal quale estrarre una alla volta le righe che soddisfano la tua domanda.
il while ha il compito di far proseguire l'estrazione mentre la fetch estrae realmente un record
ok, ora ho capito e ho capito anche che MYSQL_NUM serve per ottenere solo gli indici numerici.
quello che ora voglio fare è controllare se esiste o meno e dare in uscita un messaggio a seconda del risultato.
ora il mio codice è così:
[code:1:bc86e3ced6]$pass= md5($pass);
$query= "SELECT username, user_password FROM phpbb_users WHERE username = '$user' AND user_password = '$pass'";
$ris= mysql_query($query,$conn) or die("Errore nella query: ". mysql_error());
while ($row = mysql_fetch_array($ris, MYSQL_NUM))
{
if ($row)
printf ("username: %s password: %s", $row[0], $row[1]);
else
printf("Nome utente o password errata");
}[/code:1:bc86e3ced6]
però quando la password è sbagliata non printa niente.
per forza non printa niente, se sei nel while significa che $row != false (infatti "while ($row..." è la condizione per rimanere nel loop)
quindi se poi ritesti $row con un if all'interno del ciclo $row sarà necessariamente diverso da false. Fai così (supponendo che la select restituisca un solo record)
[code:1:f45211b818]if ($row = mysql_fetch_array($ris, MYSQL_NUM))
printf ("username: %s password: %s", $row[0], $row[1]);
else
printf("Nome utente o password errata"); [/code:1:f45211b818]
perfetto :)
ora funziona alla grande
grazie per la pazienza :D