Visualizzazione risultati 1 fino 13 di 13

Discussione: Evitare ripetizioni campo database

  1. #1
    Guest

    Predefinito Evitare ripetizioni campo database

    Ciao ragazzi!
    Ho creato una tabella nel database con i campi per le registrazioni.
    Ora vorrei evitare che sia possibile ripetere i dati dal campo nickname.
    C'è qualche attributo o extra che posso selezionare o devo agire sul codice php ?
    Se fosse quest'ultimo non saprei come muovermi.

    Aspetto delucidazioni...Grazie!

  2. #2
    Guest

    Predefinito

    Ciao, dovresti agire sul codice PHP dove scorri i campi della tabella e verifichi se il nickname è già registrato.
    Comunque sotto un piccolo codice d'esempio dove:
    $nickname è una variabile in cui viene memorizzato il nickname da controllare.
    $connessione è l'oggetto contenente i dati della connessione nel caso in cui usassi MySQLi.
    Codice PHP:
    $query='SELECT nickname FROM tabella WHERE
    (nickname="'
    .$nickname.'")';
    $risultato = $connessione->query($query);
    $num=mysqli_num_rows($risultato);
    if(
    $num==0){
    //Nickname non presente in database
    }
    else{
    //Nickname presente in database
    }
    Comunque ti consiglio di andarti a leggere qualche guida e non limitarti a copiare il codice.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da mathis Visualizza messaggio
    Codice PHP:
    $query='SELECT nickname FROM tabella WHERE
    (nickname="'
    .$nickname.'")';
    $risultato = $connessione->query($query);
    $num=mysqli_num_rows($risultato);
    if(
    $num==0){
    //Nickname non presente in database
    }
    else{
    //Nickname presente in database
    }
    Se scrivo il codice seguente è lo stesso o ho sbagliato qualcosa ?
    Diciamo che ancora non mi sono aggiornato al MySQLi...

    Codice PHP:
    $connessione=msql_connect("localhost","","");
    $database=mysql_select_db("my_computerhobby");
    $query=mysql_query("SELECT nickname FROM utenti WHERE (nickname="'.$nickname.'")");
    $num=mysql_num_rows($query);

    if(
    $num==0){
    } else {
    }
    Ultima modifica di computerhobby : 06-09-2013 alle ore 15.54.53

  4. #4
    Guest

    Predefinito

    Ecco a te.
    Quindi non dovrebbero esserci differenze

    Comunque quando stabilisci la connessione hai sbagliato a scrivere la funzione mysql_connect();:
    Codice PHP:
    $connessione=mysql_connect("*","*","*");

  5. #5
    Guest

    Predefinito

    Si avevo dimenticato la "y"...
    Comunque questo è il codice finale che ho inserito, il controllo vale sia per il nickname che per l'indirizzo email.

    Codice PHP:
    <?php

    $nome
    =$_POST['nome'];
    $cognome=$_POST['cognome'];
    $nickname=$_POST['nickname'];
    $password=$_POST['password'];
    $email=$_POST['email'];

    $connessione_db=mysql_connect("localhost","computerhobby","******");
    $selezione=mysql_select_db("my_computerhobby");

    $nickname2=mysql_query("SELECT * FROM utenti WHERE (nickname="'.$nickname.'")");
    $num1=mysql_num_rows($nickname2);
    $email2=mysql_query("SELECT * FROM utenti WHERE (email="'.$email.'")");
    $num2=mysql_num_rows($email2);

    if (
    $num1 && $num2==0) {
    $inserimento=mysql_query("INSERT INTO utenti (nome,cognome,nickname,password,email) VALUES ('$nome','$cognome','$nickname','".md5($password)."','$email')");
    $chiusura=mysql_close("$connessione_db");
    } else {
    echo
    "Nickname o email già esistenti. Tornare indietro e sceglierli diversi.";
    $chiusura=mysql_close("$connessione_db");
    }
    Una cosa del genere si può usare anche per confrontare i dati del database con quelli inseriti dall'utente per il login, giusto ?
    Ultima modifica di computerhobby : 07-09-2013 alle ore 08.25.24

  6. #6
    Guest

    Predefinito

    Si certo.. la logica è sempre quella comunque non so, può essere che mi sbagli, ma nella condizione non sarebbe meglio scrivere:
    Codice PHP:
    if($num1==0 && $num2==0){
    }

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da computerhobby Visualizza messaggio
    C'è qualche attributo o extra che posso selezionare o devo agire sul codice php ?
    In teoria avresti potuto anche dichiarare, al momento della creazione della tabella, il campo nickname come PRIMARY KEY (se decidi di usarlo come chiave primaria) oppure come UNIQUE (se la tabella ha già una chiave primaria).

    A questo punto sarà il database a gestire automaticamente i conflitti, restituendoti un errore SQL se tenti di inserire un nickname duplicato. Errore che, tuttavia, dovresti comunque gestire con un minimo di PHP: da questo punto di vista, puoi benissimo affiancare a questa precauzione il codice che ti ha dato @mathis...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    Quindi dichiarando un campo come UNIQUE il database si occupa di controllare se si sta inserendo un altro record uguale?
    Non lo sapevo...

  9. #9
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da mathis Visualizza messaggio
    Quindi dichiarando un campo come UNIQUE il database si occupa di controllare se si sta inserendo un altro record uguale?
    Non lo sapevo...
    Non proprio un record "uguale", ma un record che ha lo stesso valore per i campi coinvolti...

    Se ti interessa, questa è la sintassi: nella CREATE TABLE puoi aggiungere la clausola UNIQUE a fianco del campo dichiarato, se il vincolo deve coinvolgere un solo campo. Se devi coinvolgere più campi, devi mettere alla fine della CREATE TABLE la clausola UNIQUE (campo1, campo2): in questo caso, saranno respinti i record che hanno gli stessi valori sia per campo1 che per campo2 di un altro record (sono ammessi però quelli che ne hanno uno solo coincidente).

    Stammi bene...
    Ultima modifica di dementialsite : 07-09-2013 alle ore 14.33.43
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  10. #10
    Guest

    Predefinito

    Non sapevo neanche io di "UNIQUE" questo attributo va inserito nella proprietà "Predefinito" al momento della creazione del campo ?

  11. #11
    Guest

    Predefinito

    Se usi PhpMyAdmin sulla destra del campo trovi una U e basta cliccare li

  12. #12
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da computerhobby Visualizza messaggio
    Non sapevo neanche io di "UNIQUE" questo attributo va inserito nella proprietà "Predefinito" al momento della creazione del campo ?
    No, quando crei la tabella tramite phpMyAdmin devi selezionare la casellina "Unica" per il campo (questa icona qui --> ).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

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

    Predefinito

    ...oppure, specificandolo nella query (che crea la tabella), così non devi farlo a mano ogni volta che fai una nuova tabella :P

    Ciao!
    Ultima modifica di alemoppo : 07-09-2013 alle ore 14.48.11 Motivo: aggiunto il "tra parentesi"

Tags for this Thread

Regole di scrittura

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