Visualizzazione risultati 1 fino 9 di 9

Discussione: Evitare doppi campi su database

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

    Predefinito Evitare doppi campi su database

    Salve a tutti, sto iniziando a creare un sito qui ed ora ho un problema.
    Dunque, ho creato un sistema che aggiorna i campi di una tabella, inserendo delle parole su di esse pero' non riesco a evitare che se il campo è presente già su un altra riga lo inserisca.
    esempio

    ho la tabella utenti con username, password, frase. Io devo modificare da questa tabella solo la frase per ogni utente che è registrato. Però per ogni utente la frase deve essere diversa.
    Qualcuno può aiutarmi ? Sto uscendo pazzo e non ci riesco mi ritrovo con 20 utenti con le stesse frasi

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Esiste un campo che identifica l'utente registrato?
    Frase ehm forse intendevi per parola..
    Cmq. se le parole sono diverse allora agisci sul singolo utente.
    Se hai dubbi o qualcosa non ti è chiara, esprimiti pure.
    Ultima modifica di darbula : 18-12-2017 alle ore 03.28.34

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

    Predefinito

    La soluzione più semplice per far sì che le frasi siano uniche è dichiarare, nella tabella, che la colonna delle frasi abbia l'attributo UNIQUE...
    In questo modo, cercare di inserire una riga contenente una frase già presente produrrà un errore e fallirà.

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Non sono d'accordo la frase è unica per utente, si agisce solo sul singolo utente (successivamente poi ci sta l'attributo UNIQUE)..
    Altrimenti sovraccarichi MySQL inutilmente dato che la relazione si basa sul prodotto cartesiano
    Ultima modifica di darbula : 18-12-2017 alle ore 12.25.21

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

    Predefinito

    Effettivamente ho avuto una svista assumendo che un utente possa avere una ed una sola frase associata (vincolo che in effetti l'autore non ha specificato) e che questa informazione sia memorizzata nella stessa tabella che gestisce gli utenti (anche questo non specificato dall'autore). Se queste assunzioni sono corrette, il meccanismo funziona utilizzando semplicemente UNIQUE.

    Se la base di dati non è strutturata in quel modo, allora credo convenga definire bene i vincoli e, sulla base di questi, capire cosa conviene fare.

    In generale usando il vincolo UNIQUE sulle colonne id_utente e frase (in maniera congiunta, non separatamente) sia una strada percorribile.

    Così facendo il costo computazionale sarebbe lineare o addirittura logaritmico, quindi ottimo o prossimo all'ottimalità.

  6. #6
    oroscopomaya non è connesso Neofita
    Data registrazione
    10-12-2017
    Messaggi
    28

    Predefinito

    Chiedo scusa, sicuramente mi sono espresso male.
    Praticamente la "frase" per ogni utente viene generata da un altra funzione vi posto qui il codice che immette la frase nel DB magari ho saltato qualcosa
    Codice PHP:
    $all_rows = mysql_num_rows(mysql_query("SELECT id FROM utenti"));
    echo
    "Totale membri: $all_rows <br />"; //Restituisce il numero esatto degli utenti registrati.

    // Aggiornamento frase per ogni utente
    $testo = randFrase('testo');
    if (
    $all_rows != 0){
    for(
    $i=0;$i<($all_rows+1); $i++){
    $query="UPDATE utenti SET frase= '$testo' WHERE id=$i";
    $result = mysql_query($query) or die(mysql_error());
    echo
    $result;
    }
    Il problema è che in tutto ho una 30 di membri nella tabella però quando eseguo lo script, certi utenti hanno la frase identica ad altri.
    Io vorrei sapere se esiste una funzione php che prima di inserire la frase nuova controlli sia che non è come quella vecchia e sia che non sia presente in altri utenti.
    Grazie delle risposte e del vostro tempo

  7. #7
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Ti consiglio di modificare manualmente il campo frase per tutti gli utenti, successivamente aggiungi l'attributo UNIQUE per quel campo frase.. entrambi da phpmyadmin..
    Non può essere random la frase per utente.. perché potrebbe essere già contenuta in un altro utente.. Poniamo che hai 30 frasi,29 utenti con la loro frase univoca e vuoi aggiungere una frase al 30 utente.. Potrai aggiungerla dal primo o al trentesimo tentativo.. (Non è molto logico). Cosa diversa se già un utente usa quella frase univoca allora il secondo non userà nulla..
    Quindi quando devi modificare (aggiornare, creare) la frase per utente come seconda query (la prima query recupera l'utente o piu di uno.. ovviamente recuperi tutti gli id e poi con php fai in modo di selezionare quello desiderato
    Codice PHP:
    $result = mysql_query("SELECT id FROM utenti");
    $id_user = mysql_fetch_array($result,MYSQL_NUM);
    //aumento di uno la somma degli id totali
    $tot_user = count($id_user)+1;
    //oppure $tot_user = mysql_num_row s($result);
    //poi il ciclo for $id_user[$i];
    for($i = 0; $i < $tot_user; $i++) {
    //codice
    }
    questo è quello che doveva essere. Gli id non possono essere sempre consecutivi perché esiste l'eliminazione di quel utente... In atto di registrazione si potrebbe scegliere da quale id iniziare, ma questo esula dalla tua richiesta) recuperi tutte le frasi per la tabella in questione, poi crei un'altra frase e verifichi che si unica con le frasi recuperate precedentemente e succesivamente fai INSERT INTO o l'UPDATE per l'utente in questione
    Ultima modifica di darbula : 18-12-2017 alle ore 18.33.51

  8. #8
    oroscopomaya non è connesso Neofita
    Data registrazione
    10-12-2017
    Messaggi
    28

    Predefinito

    Grazie mille della risposta.
    E se invece creassi una funzione che controlla prima la frase attuale, e se non risulta la stessa la inserisce nel database?
    Consigli?

  9. #9
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Citazione Originalmente inviato da oroscopomaya Visualizza messaggio
    Grazie mille della risposta.
    E se invece creassi una funzione che controlla prima la frase attuale, e se non risulta la stessa la inserisce nel database?
    Consigli?
    In pratica ti ho risposto anche prima..
    1)Modifica manualmente la frase per tutti i tuoi 30 utenti
    2)Aggiungi una volta sola l'attributo UNIQUE al campo della frase..
    Fai uno screenshot (quando il campo frase è UNIQIE) e poi ti indico come creare la suddetta funzione (quando ho tempo).
    Ultima modifica di darbula : 18-12-2017 alle ore 21.17.03

Regole di scrittura

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