Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di flavietta
    Registrato dal
    Jan 2008
    residenza
    Pisa
    Messaggi
    48

    Valore duplicato nell'inserimento di un nuovo utente

    Ciao!
    Ho creato un database, in cui c'è anche una tabella degli utenti iscritti. Il primo utente è stato iscritto con successo, ora sto provando a farne iscrivere uno nuovo, ma mi dà sempre lo stesso errore:

    Valore duplicato '243e61e9410a9f577d2d662c67025ee9' per la chiave 'Password'.

    Non capisco il problema...io ho inserito una password diversa e quella che mi indica lì sarebbe quella del primo utente iscritto.

    Questo è il pezzo di codice SQL:
    Codice PHP:
    $id_utente mysql_insert_id();
    $sql "INSERT INTO utenti (Id, Nome, Cognome, Nickname, Password, DataNascita, Localita, Sesso, StatoCivile, Professione)
    VALUES ('id_utente', '
    $nome', '$cognome', '$nickname', '$pass', '$nascita', '$paese', '$sex', '$stato', '$prof')";
    mysql_query($sql,$conn) or die( "Errore! Inserimento dati nella tabella Utenti non riuscito. " .mysql_error()); 
    Dove può essere il problema? Cosa c'entra la password del primo utente?

  2. #2
    stampa la query e vedi come vengono risolte le variabili

    echo $sql;

    comunque e' chiaro il tuo problema estrai un id_inserito e lo utilizzi per creare un secondo record. Ovviamente i dati saranno gli stessi e quindi ti da valore duplicato anche se non dovresti creare un campo chiave primaria o unique per un dato duplicabile come e' la password. Caso mai e' lo username che deve essere unico.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    secondo me il problema è nella struttura del database, in quanto nel creare la tabella hai selezionato come chiave la password e giustamente ti dice che non possono esserci due password (chiavi) uguali, se metti come chiave l'id che a regola è univoco e "auto_increment" puoi evitare di inserirlo nella query, verrà inserito in automatico ed incrementato di 1, così puoi avere anche due pass uguali.

    Poi il problema relativo alla password identica può essere dato da:
    1. il form è compilato in automatico dal browser che "ricorda" l'ultima pass immessa
    2. la funziona che cripta la pass prende un valore in una variabile interna e non quello passato dal form

    quindi per prima cosa modificherei la struttura del database, poi cambierei la query in:

    Codice PHP:
    $sql "INSERT INTO utenti (Nome, Cognome, Nickname, Password, DataNascita, Localita, Sesso, StatoCivile, Professione) 
    VALUES ('" 
    $nome "', '" $cognome "', '" $nickname "', '" $pass "', '" $nascita "', '" $paese "', '" $sex "', '" $stato "', '" $prof "')"
    altra cosa, ho notato ora che 'id_utente' è passato come costante e non come variabile, manca il "$".

  4. #4
    Utente di HTML.it L'avatar di flavietta
    Registrato dal
    Jan 2008
    residenza
    Pisa
    Messaggi
    48
    Dunque, io come chiavi uniche ho messo "Nickname" e "Password", anche perchè non voglio che esistano utenti con lo stesso nick e la stessa password, ma soprattutto con lo stesso nick.
    Effettivamente posso rendere l'id auto_increment, così, come dicevi tu, non glielo metto nella query. In questo modo la situazione cambierebbe? Ora provo.
    L'algoritmo che cripta la password prende sicuro il valore della form, perchè è impostata così:

    Codice PHP:
    $password $_POST['pass'];
    $pass md5('$password'); 
    Dove 'pass' sarebbe il nome del campo input.

  5. #5
    l'errore e' questo:

    $id_utente = mysql_insert_id();

    prelevi un id gia' immesso e per verificare questa cosa che ti ho suggerito di stampare la query.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it L'avatar di flavietta
    Registrato dal
    Jan 2008
    residenza
    Pisa
    Messaggi
    48
    Ho tolto tutta la storia dell'id, ma il problema rimane.
    Ho stampato la query e quando prende il valore della password inserisce il valore criptato identico a quello della password che esiste già. Ma non capisco il perchè, dato che gli dico di prendere la password dalla form e, infatti, quando ho iscritto il primo utente ha preso la password giusta (cioè l'ha presa dalla form).
    Sembra che quando fa l'algoritmo md5 esce sempre lo stesso valore criptato, ma questo non è possibile!

  7. #7
    Originariamente inviato da flavietta
    Ho tolto tutta la storia dell'id, ma il problema rimane.
    Ho stampato la query e quando prende il valore della password inserisce il valore criptato identico a quello della password che esiste già. Ma non capisco il perchè, dato che gli dico di prendere la password dalla form e, infatti, quando ho iscritto il primo utente ha preso la password giusta (cioè l'ha presa dalla form).
    Sembra che quando fa l'algoritmo md5 esce sempre lo stesso valore criptato, ma questo non è possibile!
    evidentemente l'errore e' nel modo con cui utilizzi i dati del form per applicare la query.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Originariamente inviato da flavietta
    Sembra che quando fa l'algoritmo md5 esce sempre lo stesso valore criptato, ma questo non è possibile!
    DUBBIONE: non e' che per errore esegui due volte la stessa query????

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    postaci la funzione che cripta la pass..

  10. #10
    Utente di HTML.it L'avatar di flavietta
    Registrato dal
    Jan 2008
    residenza
    Pisa
    Messaggi
    48
    Allora, ho tolto l'md5 e funziona tutto perfettamente. Ho iscritto altri due utenti e prende la password giuste. Quindi l'errore è dell'algoritmo, però è strano.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.