- Home
- Categorie
- Coding e Sistemistica
- Coding
- Campo non duplicabile
-
Campo non duplicabile
Salve a tutti, ho un campo 'codice' in una tabella, è possibile renderlo non duplicabile anche se non è una chiave primaria? ho letto un pò in rete che per far ciò dovrebbe essere un chiave primaria, ma nella tabella in questione ho già una chiave primaria, cioè l'id.
-
Ciao cla83,
puoi impostare il campo come unique.
-
Ciao Thedarkita, grazie per la risposta. Avevo provato a impostarlo unique, però nel pannello phpmyadmin l'icona per far diventare il campo 'unique' non è cliccabile, solo nell'id lo è sia la chiave primaria che l'unique.
Il campo codice è di tipo text, perchè potrebbe contenere anche lettere.
-
Ciao,
effettivamente potrebbe dipendere dalla lunghezza del tuo campo; come è settato?
-
Posto la struttura della tabella, non so è quello che intedevi.
--
-- Struttura della tabellaprodottiCREATE TABLE IF NOT EXISTS
prodotti(
idint(11) NOT NULL auto_increment,
id_menutext NOT NULL,
id_sottomenutext NOT NULL,
titolotext NOT NULL,
codicetext NOT NULL,
fototext NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;
-
I campi text non possono essere impostati primary key, unique o index, se non hai bisogno che il campo sia cosi lungo puoi trasformarlo in varchar.
-
Grazie! Adesso va bene, mi da anche l'errore duplicate key. Non vorrei ottenere una cosa complessa, ma come potrei fare una volta cliccato il pulsante inserisci record invece di aprire la pagina con l'errore mi compaia l'errore nella pagina stessa?
-
Invece di mettere or die, puoi settare una variabile flag e personalizzarti l'errore come vuoi.
-
Dovrei agire dove sta 'or die(mysql_error()) ?'
[PHP]
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO prodotti (id, id_menu, id_sottomenu, titolo,lin, codice, foto, varianti) VALUES (%s,%s,%s,%s,%s,%s, %s, %s)",
GetSQLValueString($_POST['id'], "int"),
GetSQLValueString($_POST['id_menu'], "text"),
GetSQLValueString($_POST['id_sottomenu'], "text"),
GetSQLValueString($_POST['titolo'], "text"),
GetSQLValueString($_POST['lin'], "text"),
GetSQLValueString($_POST['codice'], "text"),
GetSQLValueString($_FILES['foto']['name'], "text"),
GetSQLValueString($_FILES['varianti']['name'], "text"));mysql_select_db($database_conn, $conn);
// in questo punto qui?
$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());[/PHP]
-
Si, puoi trasformarlo in:
[php]
$Result1 = mysql_query($insertSQL, $conn) or $err = true;
[/php]Dopo ti basterà controllare se $err è settato, per sapere se c'è stato un errore.
-
Potresti farmi un esempio di come settarlo? solo se non è un cosa complicata da fare.
-
@Thedarkita said:
Si, puoi trasformarlo in:
[php]
$Result1 = mysql_query($insertSQL, $conn) or $err = true;
[/php]Dopo ti basterà controllare se $err è settato, per sapere se c'è stato un errore.
Ciao,
qui è spiegato come settare la variabile mettendola a "true" poi devi solo inserire una condizione su di essa e stamparti a video l'errore o scegliere cosa far visualizzare.
Attendo una tua prova
