evitare di inserirre duplicati in mysql

Domenico2013

Utente Attivo
6 Ago 2013
167
0
16
Buongiorno a tutti del forum :)
Cattura.JPG
Avendo questa tabella, qualcuno conosce il modo di evitare che quando nella "text codice" venga scritto per esempio 1, questo non lo inserisce nella tabella mysql in quanto è già presente il numero 1. In pratica, vorrei evitare di inserire duplicati. Grazie in anticipo a tutti e buon appetito :)
 

zorro

Utente Attivo
20 Ott 2014
244
11
18
ROMA
Dipende da come inserisci i dati in tabella: se usi inserisci di PHPMyAdmin non credo ci sia la possibilità di fare dei controlli, mentre se li fai da form, si, prima di inserire il nuovo codice puoi fare una query che scorra tutta la tabella e cerchi quel particolare codice. Se ti serve anche qualche esempio pratico.... chiedi pure.. ciao


Zorro
 
Ultima modifica:

Domenico2013

Utente Attivo
6 Ago 2013
167
0
16
Ciao Zorro, grazie per la risposta e cortesia. No no, solo tramite form invio i dati. Potresti gentilmente postarmi qualche esempio? Thanks :)
 

zorro

Utente Attivo
20 Ott 2014
244
11
18
ROMA
Ecco qui: il programma è relativamente semplice ma richiede parecchi script.
Il primo che dovrai caricare è resetta.php che, come da nome, resetterà tutte le variabili di sessione e richiamerà (include) il form di inserimento.

PHP:
session_start();

$_SESSION['codice']='';
$_SESSION['articolo']='';
$_SESSION['messaggio']='';
$_SESSION['id']='';

include('form.php');

Quindi segue il form molto stilizzato:

PHP:
session_start();
$messaggio = $_SESSION['messaggio'];

echo '<h2><u><center>Form di inserimento</center></u></h2><br><br>';
echo '<form action="contrform.php" method="get">';
echo     'Codice articolo: ';
echo     '<input type="text" name="cod" size="10"><br><br>';
echo     'Descrizione: ';
echo     '<input type="text" name="art" size="50"><br><br><br>';
echo     '<input type="submit" name="submit" Value="invia"><br><br>';
echo '<a name="mess"></a>';
echo $messaggio;
echo '</form>';
All'inizio, come vedi, ho richiamato e successivamente (dopo il form) visualizzato il messaggio che, essendo inizialmente nullo, non visualizza niente. Dopodiché, premendo INVIA, il comando passerà al programma che si occuperà dei controlli: per il momento l'unico controllo che fa è se il codice è duplicato o meno (anche la descrizione dell'articolo potrebbe essere duplicata)

PHP:
$codice = $_GET['cod'];
$articolo = $_GET['art'];

//INSERISCO LE VARIABILI IN ALTRETTANTI VARIABILI DI SESSSIONE

session_start();
$_SESSION['codice'] = $codice;
$_SESSION['articolo'] = $articolo;

include('conn.php');

$connessione = new mysqli($host, $user, $password, $db);

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}
 
//-----LEGGE IL DB E CONTROLLA SE IL CODICE E' DUPLICATO

if (!$result = $connessione->query("SELECT * FROM ARTICOLI WHERE CODICE = '$codice'")) {
    echo "Errore della query: " . $connessione->error . ".";
}else{
    // conteggio dei record
    if ($result->num_rows > 0) {
       $_SESSION['messaggio'] = 'ATTENZIONE!! Codice duplicato';
       header("location: form.php#mess");
    } else {
       include('scrivi.php');
      
    }
}

// chiusura della connessione
$connessione->close();
Se il codice è duplicato ti rimanda al form con un messaggio d'errore altrimenti richiama scrivi.php che si ocuperà dell'inserimento in tabella del record, vvisandoti con un opportuno messaggio.

PHP:
//RICHIAMO LE VARIABILI DI SESSIONE
session_start();
$codice = $_SESSION['codice'];
$articolo = $_SESSION['articolo'];

include('conn.php');

$connessione = new mysqli($host, $user, $password, $db);

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}

//$datait = substr($data,8,2).'/'.substr($data,5,2).'/'.substr($data,0,4);
 
// esecuzione della query per l'inserimento dei record
if (!$connessione->query("INSERT INTO ARTICOLI (CODICE,ARTICOLO) VALUES
    ('$codice','$articolo')")) {
    echo "Errore della query: " . $connessione->error . ".";
}

//-----LEGGE IL DB E NE MEMORIZZA L'ID APPENA INSERITO

if (!$result = $connessione->query("SELECT * FROM ARTICOLI WHERE CODICE = '$codice'")) {
    echo "Errore della query: " . $connessione->error . ".";
}else{
    // conteggio dei record
    if($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
              $id = $row['ID'];
        }
    }
}
$_SESSION['messaggio']='OK!! Il record è stato correttamente inserito. Il suo ID è: '.$id;
header("location: form.php#mess");

// chiusura della connessione
$connessione->close();
Come vedi, in caso di codice duplcato, vieni rimandato al form dove troverai entrambi i campi vuoti. Se invece vuoi che ci siano già le variabili ti basterà, dopo averle opportunamente richiamate, aggiungere al form la clausola value in questo modo:

PHP:
value = "'.$nomevariabile.'";
Non ho inserito conn.php che contiene le variabili di connessione e l'ho testato con la tabella ARTICOLI.


Zorro
 

Domenico2013

Utente Attivo
6 Ago 2013
167
0
16
Ciao Zorro. Grazie infinite. Il codice è perfetto. Grazie per averlo postato , scritto e testato :)