Visualizzazione risultati 1 fino 7 di 7

Discussione: Controllo username già registrato problema

  1. #1
    oroscopomaya non è connesso Neofita
    Data registrazione
    10-12-2017
    Messaggi
    13

    Predefinito Controllo username già registrato problema

    Ho un problema: sto creando una pagina di registrazione per gli utenti, ma ho la necessità di controllare che l'username sia disponibile prima della registrazione fin qui tutto ok, ma il codice che ho controlla solo se quella stringa esiste nel campo del database, non l'eventuale parola e gli eventuali caratteri in maiuscolo o minisculo, faccio un esempio per spiegarmi meglio:

    Esempio:

    L'username "Test" è già registrato sul sito, inserisco "Test" e da l'errore, ma se inserisco in minuscolo "test" dice che l'username è disponibile....

    C'è un modo per evitare questa possibilità di iscriversi con lo stesso nickname ma cambiando una lettera in maiuscolo/minuscolo ?

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    11,181

    Predefinito

    Certo, è un controllo come tutti gli altri (controllo formato email, controllo lunghezza minima caratteri password, etc). Sicuramente devi controllare se c'è già quell'username nel database (con una SELECT nel db).

    Ciao!

  3. #3
    oroscopomaya non è connesso Neofita
    Data registrazione
    10-12-2017
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Certo, è un controllo come tutti gli altri (controllo formato email, controllo lunghezza minima caratteri password, etc). Sicuramente devi controllare se c'è già quell'username nel database (con una SELECT nel db).

    Ciao!
    Ciao e grazie della risposta!
    Il codice per controllarlo funziona, ma vorrei capire come fare per controllare che quando un utente si registra e inserisce il nome di un altro utente già registrato però cambiando una lettera magari in maiuscolo o minuscolo gli dià l'errore di username gia registrato... è un pò strano da spiegare ci riprovo in un altro esempio:

    oroscopomaya è il mio nickname qui sul forum, ora c'è qualcun altro che vuole usare lo stesso nick se scrive il nome in minuscolo come è presente sul database gli dà il messaggio di nickname già usato fin qui ok... Ma se invece di oroscopomaya scrive OroscopoMaya l'utente può registrarsi...

    Spero che l'esempio renda
    Io vorrei sapere se esiste un modo per evitare che tramite il cambio di lettere in maiuscolo/minuscolo l'utente può registrarsi con lo stesso nick...

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    11,181

    Predefinito

    Teoricamente:
    Codice:
    SELECT * FROM tabella WHERE colonna = 'oroscopomaya'
    e
    Codice:
    SELECT * FROM tabella WHERE colonna = 'OroscopoMaya'
    Sono equivalenti.

    Vedi qui.

    Ciao!

  5. #5
    oroscopomaya non è connesso Neofita
    Data registrazione
    10-12-2017
    Messaggi
    13

    Predefinito

    Ho trovato la soluzione che cercavo, dovevo usare la funzione BINARY, posto la query se potesse servire a qualcuno:

    Codice:
    SELECT * FROM utenti WHERE BINARY username = ''.$user.''
    Grazie mille dell'aiuto!

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,138

    Predefinito

    L'operatore BINARY fa l'esatto opposto di quanto chiedi, ovvero controlla se l'uguaglianza è verificata byte per byte.

    Se nella tabella hai un utente oroscopomaya ed esegui la query:
    Codice:
    SELECT * FROM utenti WHERE BINARY username = 'OroscopoMaya';
    ti verranno restituiti 0 risultati, lasciando intendere che l'username sia disponibile.

    Segui piuttosto il consiglio di alemoppo, per impostazione di default i controlli sono case insensitive. Se, per qualunque motivo, l'impostazione di default fosse stata cambiata, puoi effettuare un controllo case insensitive "manualmente" controllando le versioni lowercase delle stringhe:
    Codice:
    SELECT * FROM utenti WHERE LOWER(username) = LOWER('OroscopoMaya');

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  7. #7
    oroscopomaya non è connesso Neofita
    Data registrazione
    10-12-2017
    Messaggi
    13

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    L'operatore BINARY fa l'esatto opposto di quanto chiedi, ovvero controlla se l'uguaglianza è verificata byte per byte.

    Se nella tabella hai un utente oroscopomaya ed esegui la query:
    Codice:
    SELECT * FROM utenti WHERE BINARY username = 'OroscopoMaya';
    ti verranno restituiti 0 risultati, lasciando intendere che l'username sia disponibile.

    Segui piuttosto il consiglio di alemoppo, per impostazione di default i controlli sono case insensitive. Se, per qualunque motivo, l'impostazione di default fosse stata cambiata, puoi effettuare un controllo case insensitive "manualmente" controllando le versioni lowercase delle stringhe:
    Codice:
    SELECT * FROM utenti WHERE LOWER(username) = LOWER('OroscopoMaya');
    Infatti ho notato proprio prima che il codice non funzionava, adesso ho provato come hai suggerito tu verificando il nome utente tutto in lowercase e funziona, grazie mille!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •