- Home
- Categorie
- Coding e Sistemistica
- Coding
- Dove sbaglio? Login.php
- 
							
							
							
							
							
Dove sbaglio? Login.phpRagazzi potete gentilmente sistemarmi questa pagina? teoricamente se ID E PASS SONO GIUSTI dovrebbe stamparmi delle frasi, ma niente.. aiutatemi please [PHP] 
 <?include ('includes/mysql_conn.php'); $query = mysql_query("SELECT * FROM utenti"); while($riga=mysql_fetch_array($query)) { $usrName = $riga['1']; 
 $usrPass = $riga['2'];
 }$usrPassMD5 = md5('$usrPass'); 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 ($usrPassMD5 == $PHP_AUTH_PW)) {
 echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>";
 echo "<p>Hai inserito {$_SERVER['PHP_AUTH_PW']} come tua password.</p>";
 }
 }autenticazione(); ?> 
 [/PHP]
 
- 
							
							
							
							
							Ciao, due domande: $usrName = $riga['1']; 
 $usrPass = $riga['2'];
 le colonne nella tabella si chiamano rispettivamente 1 e 2?$usrPassMD5 == $PHP_AUTH_PW $PHP_AUTH_PW è una variabile criptata in MD5? Altrimenti non puoi fare il confronto.... se lo è prova ad utilizzare la funzione int strcmp ( string str1, string str2 ) per fare il confronto tra le due stringhe... Saluti, Federico. 
 
- 
							
							
							
							
							
ho provato ad ovviare così al problema ma non va cmq...potete vedere se in qualche modo riuscite a farlo andare? più che altro xkè mi interessa davvero impararne il corretto funzionamento.. [PHP]<? include ('includes/mysql_conn.php'); $query = mysql_query("SELECT * FROM utenti"); while($riga=mysql_fetch_array($query)) { $usrName = $riga['username']; 
 $usrPass = $riga['password'];
 }$usrPassMD5 = md5('$usrPass'); 
 $PHP_AUTH_PW_CRIPT = md5('$PHP_AUTH_PW');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 ($usrPassMD5 == $PHP_AUTH_PW_CRIPT)) {
 echo "<p>Ciao {$_SERVER['PHP_AUTH_USER']}.</p>";
 echo "<p>Hai inserito {$_SERVER['PHP_AUTH_PW']} come tua password.</p>";
 }
 }autenticazione(); ?>[/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..