- Home
- Categorie
- Coding e Sistemistica
- PHP
- Dove sbaglio? Login.php
-
Mi sono resoconto che fai una cosa sbagliata/inutile al fine del ciclo:
$query = mysql_query("SELECT * FROM utenti");
while($riga=mysql_fetch_array($query)) {
$usrName = $riga['username'];
$usrPass = $riga['password'];
}il ciclo while continua a riassegnare continuamente la variabile $usrName e $usrPass ma così non ti crei un array.
Il risultato di questo ciclo è avere nelle due variabili il contenuto dei campi "username" e "password" dell'ultimo record della tabella.
Se vuoi salvarti tutti i record della tabella devi scrivere:
$query = mysql_query("SELECT * FROM utenti");
while($riga=mysql_fetch_array($query)) {
$usrName[] = $riga['username'];
$usrPass[] = $riga['password'];
}
e poi controllare che lo user e la pass inserite siano uguali ad almeno una coppia di user e pass che hanno stesso indice.Naturalmente ti conviene risistemare il codice in questo modo:
while($riga=mysql_fetch_array($query)) {
$usrName[] = $riga['username'];
$usrPass[] = md5($riga['password']);
}Così ti salvi le variabili già criptate nei due array e puoi fare il confronto diretto con $PHP_AUTH_PW_CRIPT (a patto naturalmente che anche questa sia MD5)
saluti,
Federico
-
Ciao,
ti do un'altro suggerimento,
per controllare se l'username e la password che inserisci sono presenti nei due array puoi utilizzare la funzione:
if(in_array($PHP_AUTH_USER,$usrName) AND in_array($PHP_AUTH_PW_CRIPT,$usrPass))
Federico.
-
nona vevo considerato la questione dell'array, però pur sostituendo l'array il problema sussiste, può esserci un problema qui?
function autenticazione() {
global $usrName, $usrPass, $PHP_AUTH_USER, $PHP_AUTH_PW;
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="il mio reame"');
header('HTTP/1.0 401 Unauthorized');
echo 'Messaggio da inviare se si preme il tasto Cancel';
exit;
}
if (($usrName == $PHP_AUTH_USER) and ($usrPass == $PHP_AUTH_PW_CRIPT)) {
echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Hai inserito {$_SERVER['PHP_AUTH_PW']} come tua password.</p>";
}
}
-
Se adesso utilizzi gli array non puoi fare un confronto tra una variabile ed un'array...devi utilizzare l'if che ti ho postato in precedenza...
if(in_array($PHP_AUTH_USER,$usrName) AND in_array($PHP_AUTH_PW_CRIPT,$usrPass))
Così vedi se le due variabili sono presenti nell'array...
Tutto questo giusto per fare una prova...
Ricordati che poi nome utente e password "matchanti" devono avere lo stesso indice nei due array...altrimenti potresti aver trovato entrambi ma che riferiscono es. User ad un utente e Pass ad un'altro.
-
ho sistemato così, ma cmq il problema continua a persistere..
[PHP]<?
include ('includes/mysql_conn.php');
$query = mysql_query("SELECT * FROM utenti");
while($riga=mysql_fetch_array($query)) {
$usrName[] = $riga['username'];
$usrPass[] = $riga['password'];
}$PHP_AUTH_PW_CRIPT = md5('$PHP_AUTH_PW');
function autenticazione() {
global $usrName, $usrPass, $PHP_AUTH_USER, $PHP_AUTH_PW, $PHP_AUTH_PW_CRIPT;
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="il mio reame"');
header('HTTP/1.0 401 Unauthorized');
echo 'Messaggio da inviare se si preme il tasto Cancel';
exit;
}
if(in_array($PHP_AUTH_USER,$usrName) AND in_array($PHP_AUTH_PW_CRIPT,$usrPass)) {
echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Hai inserito {$_SERVER['PHP_AUTH_PW']} come tua password.</p>";
}
}autenticazione();
?>[/PHP]
-
Cosi ho testato e funziona:
<? include ('includes/mysql_conn.php'); $query = mysql_query("SELECT * FROM utenti"); while($riga=mysql_fetch_array($query)) { $usrName[] = $riga['username']; $usrPass[] = md5($riga['password']); } $PHP_AUTH_PW_CRIPT = md5($_SERVER['PHP_AUTH_PW']); function autenticazione() { global $usrName, $usrPass, $PHP_AUTH_PW_CRIPT; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="il mio reame"'); header('HTTP/1.0 401 Unauthorized'); echo 'Messaggio da inviare se si preme il tasto Cancel'; exit; } if(in_array($_SERVER['PHP_AUTH_USER'],$usrName) AND in_array($PHP_AUTH_PW_CRIPT,$usrPass)) { echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>Hai inserito {$_SERVER['PHP_AUTH_PW']} come tua password.</p>"; } } autenticazione(); ?>
Se la password nel campo "password" del tuo DB è già MD5 puoi evitare di fare: $usrPass[] = md5($riga['password']);
scrivendo semplicemente $usrPass[] = $riga['password'];
Naturalmente se l'utente inserisce dei valori sbagliati nel form così fatto non otterrà altro che una pagina bianca...
-
e nel caso in cui volessi matchare user e pass con lo stesso id come posso fare?
inoltre, ultimissima domanda, prometto!
avevo creato quest'altro file x effettuare la registrazione, xò mi sa che ho commesso lo stesso errore facendo restituire all'array solo l'ultima registrazione, quindi nel caso di registrazioni con lo stesso user o mail non di seguito, mi registra anche se i record sono già presenti nel db. come posso ovviare al problema?
[php]
<?/*
- Creato Da: Pixelate
- Nome File: Registrazione.php
*/
include ('includes/mysql_conn.php');
/* Acquisizione Variabili Registrazione Da Register.php */
$username = @$_POST['username'];
$password = @$_POST['password'];
$email = @$_POST['email'];
$citta = @$_POST['citta'];$Warn1 = "Impossibile effettuare la registrazione. L'Username inserito risulta giá registrato.";
$Warn2 = "Impossibile effettuare la registrazione. L'email inserita risulta giá registrata.";
$Warn3 = "<strong>Username</strong> o <strong>Password</strong> troppo corti. La loro lunghezza minima é di 6 caratteri.";
$query = mysql_query("SELECT * FROM utenti");
while($riga=mysql_fetch_array($query)) {
$usrId = $riga['id'];
$usrName = $riga['username'];
$usrPass = $riga['password'];
$usrEmail = $riga['email'];
}// Criptazione MD5 Password
$passwordcript = md5('$password');// Sistemo le variabili
$username = str_replace("<", "<", $username);
$username = str_replace(">", ">", $username);
$password = str_replace("<", "<", $password);
$password = str_replace(">", ">", $password);(trim($username) == "");
(trim($password) == "");if ($usrId == 0) {
$grado = 1;
} else {
$grado = 5;
}if ($usrName == $username) {
echo "$Warn1";
}elseif ($email == $usrEmail) {
echo "$Warn2";
}elseif (strlen($username) < 6 or strlen($password) < 6) {
echo "$Warn3";
}// Esecuzione Query Di Inserimento In Database Mysql
else {$query = mysql_query ("INSERT INTO utenti (username, password, email, grado, citta) VALUES ('$username', '$passwordcript', '$email', '$grado', '$citta')");
mysql_close($db);
header ("Location: regok.php");
}if ($Warn1 == TRUE or $Warn2 == TRUE or $Warn3 == TRUE) {
include('registra.php');
}
?>
[/PHP]
-
Devi fare un ciclo dove controlli lo user incrementando un contatore:
$cont = 0;
$trovato = 0;for ($i = 0; $i < sizeof($usrName); $i++)
{
if($_SERVER['PHP_AUTH_USER'],$usrName)
if ($PHP_AUTH_PW_CRIPT,$usrPass) $trovato = 1;
}if ($trovato == 1) //L'utente è registrato
Per l'altra domanda:
Questo deve diventare così:
while($riga=mysql_fetch_array($query)) {
$usrId[] = $riga['id'];
$usrName[] = $riga['username'];
$usrPass[] = $riga['password'];
$usrEmail[] = $riga['email'];
}
-
ma così facendo riesco cmq ad effettuare registrazioni illimitate con lo stesso user..
-
@federico.p said:
Cosi ho testato e funziona:
> <? include ('includes/mysql_conn.php'); $query = mysql_query("SELECT * FROM utenti"); while($riga=mysql_fetch_array($query)) { $usrName[] = $riga['username']; $usrPass[] = md5($riga['password']); } $PHP_AUTH_PW_CRIPT = md5($_SERVER['PHP_AUTH_PW']); function autenticazione() { global $usrName, $usrPass, $PHP_AUTH_PW_CRIPT; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="il mio reame"'); header('HTTP/1.0 401 Unauthorized'); echo 'Messaggio da inviare se si preme il tasto Cancel'; exit; } if(in_array($_SERVER['PHP_AUTH_USER'],$usrName) AND in_array($PHP_AUTH_PW_CRIPT,$usrPass)) { echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>Hai inserito {$_SERVER['PHP_AUTH_PW']} come tua password.</p>"; } } autenticazione(); ?> >``` Se la password nel campo "password" del tuo DB è già MD5 puoi evitare di fare: $usrPass[] = md5($riga['password']); scrivendo semplicemente $usrPass[] = $riga['password']; Naturalmente se l'utente inserisce dei valori sbagliati nel form così fatto non otterrà altro che una pagina bianca... nn va neanche così cmq.. mi restituisce sempre pagina bianca, eppure i dati sono tutti giusti..
-
Perchè prima hai provato ad inserire un nome utente e una password errati...giusto?
così facendo riempi le 2 variabili di sessioni e ai prossimi refresh passi il controllo isset dell'user ma senza avere nessuna risposta...
-
no, ho provato subito con dati ESATTI e non effettua il login dandomi pagina bianca, secondariamente scrivendo dati ERRATI mi recuperava comunque la pagina bianca..