Login case insensitive

Ciao a tutti, sonon nuovo di questo forum e sto studiando da poco PHP. Mi chiedevo come fare a rendere l'accesso ad un'area privata con username e password da inserire utilizzando indifferentemente maiusculo o minuscole. Vi posto il mio script:

<?php

$username = $_POST["username"];

$password = $_POST["password"];

setcookie("nome_utente",$username,time()+3600);

$trovato = false;

if ($_POST["username"]=="" || $_POST["password"]=="")

{

echo "Devi compilare tutti i campi!!" ;

}

else

{

          $dbhost = "localhost";

          $dbname = "utenti_connessi";

          $dbuser = "root";

          $dbpass = "";

          $conn = mysql_connect($dbhost,$dbuser,$dbpass)

          or die("Impossibile collegarsi al server MySQL.");

          mysql_select_db($dbname,$conn)

          or die("Impossibile selezionare il database $dbname");

          $strsql = "select * from utenti";

          $query = mysql_query($strsql)

          or die ("Non riesco ad eseguire la query $query");

                while($row=mysql_fetch_array($query))

                {

                $id = $row["id"];

                $user = $row["username"];

                $passw = $row["password"];

                $posta = $row["Email"];

                if  ($username==$user && $password==$passw)

                 {

                Header("location: privato.php");

                exit;

                }

                else

                {

                $trovato = true;

                }

                }

                             if ($trovato= true)

                             {

                               echo "Accesso negato!";

                             }

?>

inviato 11 anni fa
MGbyte78
X 0 X

Devo dire che il tuo sistema di log-in è particolarmente inefficiente: per vedere se un utente è nel DB estrai tutti gli utenti e confronti i dati inviati dal form con ciascun utente. Non facevi prima a cercare l'utente in questione per vedere se è presente nel DB?

Comunque nel tuo caso ti basta trasformare in maiuscolo o in minuscolo i dati provenienti dal form e quelli nel DB e poi confrontarli. Le funzioni per trasformare stringhe in maiuscolo ed in minuscolo sono strtoupper() e strtolower()

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Non saprei come fare senza confrontare ad uno ad uno.....cosa dovrei modificare?

Per quanto riguarda la mia domanda , io vorrei che un utente si possa loggare inserendo i dati sia in minuscolo che in maiuscolo, se uso la funzione che trasforma la stringa in maiuscolo e l'utente me la scrive in minuscolo non ho risolto niente, io vorrei che non ci fossero distinzioni...

Scusa ma come vedi sono alle prime armi...

risposto 11 anni fa
MGbyte78
X 0 X

Se trasformi in maiuscolo sia i dati inviati dall'utente, sia i dati presenti nel DB, allora il confronto sarà case insensitive. Infatti comunque vengano inseriti i dati il confronto sarà fatto tra stringhe in maiuscolo.

La stessa cosa avverrebbe trasformando tutto in minuscolo: indipendentemente dai dati inseriti il confronto viene fatto tra stringhe in minuscolo.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ora ho capito perfettamente grazie!! Infatti funziona....

L'ultima cosa che volevo chiederti riguarda il consiglio che mi hai dato riguardante lo script da me postato. Come potrei evitare di estrarre ogni record e confrontarli ad uno a uno i dati inseriti? Mi hai detto infatti che il mio script non và bene.....

Ciao.....

risposto 11 anni fa
MGbyte78
X 0 X

Potresti fare una query del tipo

SELECT username FROM utenti WHERE username='pippo' AND password='pluto'

dove ovviamente devi sostituire a pippo e pluto i dati inviati dall'utente

per verificare se l'utente è stato trovato ti basta un:

if(mysql_num_rows($query) > 0) ...

in questo caso non dovrebbero esserci problemi di case sensitive perché MySQL non è case sensitive nei confronti di stringa con campi non binari

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

ok grazie proverò..... :bye:

risposto 11 anni fa
MGbyte78
X 0 X

Ho provato ma adesso mi fa entrare inserendo qualsiasi cosa, sicuramente ho sbagliato a inserire qualche codice :-\

Potresti postarmi il mio script modificato come dici?

Grazie per la pazienza... :bye:

risposto 11 anni fa
MGbyte78
X 0 X
Potresti postarmi il mio script modificato come dici?

facciamo il contrario, riporta lo script che hai modificato e ti dico dove intervenire

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Forse ho capito come devo fare.....

<?php

$username = strtolower($_POST["username"]);

$password = strtolower($_POST["password"]);

setcookie("nome_utente",$username,time()+3600);

$trovato = false;

if ($_POST["username"]=="" || $_POST["password"]=="")

{

echo "Devi compilare tutti i campi!!" ;

}

else

{

          $dbhost = "localhost";

          $dbname = "utenti_connessi";

          $dbuser = "root";

          $dbpass = "";

          $conn = mysql_connect($dbhost,$dbuser,$dbpass)

          or die("Impossibile collegarsi al server MySQL.");

          mysql_select_db($dbname,$conn)

          or die("Impossibile selezionare il database $dbname");

          $strsql = "SELECT username FROM utenti WHERE username='$username' AND password='$password'";

          $query = mysql_query($strsql)

          or die ("Non riesco ad eseguire la query $query");

                           if(mysql_num_rows($query) > 0)

                 {

                Header("location: privato.php");

                exit;

                }

                else

                {

                $trovato = true;

                }

                             if ($trovato= true)

                             {

                               echo "Accesso negato!";

                             }

?>

 In pratica la funzione "if(mysql_num_rows($query) > 0)" controlla che il record sia maggiore di 0?

risposto 11 anni fa
MGbyte78
X 0 X

quell'IF controlla che le righe restituite dalla precedente SELECT siano in numero maggiore di 0.

Infatto se è stato trovato l'utente verrà restituito il suo username, altrimenti non restituisce nulla.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

OK grazie, ho dovuto modificare anche le altre applicazioni, infatti anche nelle altre usavo un ciclo while e confrontavo i dati inseriti nel form ad uno ad uno. Ora almeno ho sveltito il lavoro...

CIAO :bye:

risposto 11 anni fa
MGbyte78
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda