doppia PRIMARY KEY ?

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
nonostante penda sul mio capo una pratica...
devo inserire un codice alfanumerico retalito ad un articolo è evidente che tale codice deve essere unico e, nel mio caso primary key. Tramite form inserisco il codice e poi la descrizione, ho fatto delle prove simulate di errore cercando di inserire un codice uguale ad uno gia esistente. Al send il form scompare. Quando vado a visionare GIUSTAMENTE il codice erroneamente inserito e relativa descrizione non sono stati registrati.
A quasto punto vorrei sapere se esiste una funzione tipo mysql_error() che riporti o un numero o stringa che possa elaborare e, prima della descrizione, mi dica "impossibile inserire - codice esistente - cambiare codice" oppure devo, inserito il codice, estrarre tutti i campi codice ed eseguire un ciclo con confronto che, nel caso di molti codici inseriti, potrebbe avere un lungo tempo di attesa? ma soprattutto per sapere se l'inserimento è andato a buon fine devo visualizzare tutti i codici e descrizioni.
spero di essere stato chiaro
grazie
 
Non sono sicuro di aver capito correttamente la domanda, ma provo comunque a rispondere.

Quando crei una chiave primaria in una tabella, il modo per essere sicuri di non avere duplicati è di usare l'opzione auto_increment. In questo modo, nella query di inserimento, non ci sarà bisogno di specificare il valore del campo, verrà automaticamente valorizzato al prossimo autoindex.
La query è tipo questa:

INSERT INTO table (id, campo) VALUES (, 'testo')
----------------------------------------^
Notare come non viene passato il primo valore relativo alla chiave primaria con auto_increment
 
deve essere inserito un codice articolo (es. cod. aa375896 | |vaso da fiori D 25 h 800 | foto del vaso | costo del vaso|...) questo codice è unico e si riferisce solo a detto vaso. non può essere un auto_increment in quanto i codici non sono contigui e non tutti uguali (ne come tipo ne come lunghezza).
quando l'utente inserisce un nuovo articolo deve inserire anche detto codice, per vari motivi può digitare un codice che è gia esitente nel db, vorrei che a qusto punto venisse indicato che il codice esiste gia e quindi cambiarlo (questo prima di procedere a qualsiasi altro inserimento)

grazie


p.s.
i codici degli articoli sono quelli che legge il lettore ottico e quindi gia esitenti e definiti
 
fa' una cosa carina

Mentre uno inserisce il codice prodotto, potresti caricare in background un controllino (ajax) e verificare se il codice è già in uso o meno.
 
oppure

Oppure potresti fare questo, quando generi la pagina, puoi interrogare il DB e creare con php un array javascript. In sostanza anzichè scrivere semplice HTMl scrivi anche del codice javascript. E poi disabiliti il tasto submit e lo riabiliti solamente quando il campo del codice prodotto non è stato inserito correttamente. Avendo l'array javascript con tutti i codici prodotto puoi quindi assicurarti che non ci siano doppioni.
 
stanotte prima che arrivasse la tua risposta ho pensato a questo


$conta=(int)0;
while ($riga=mysql_fetch_array($query)){
$campoCod[$conta]=$riga[codice];
//qui echo per <option>………..
$conta+=;
}

che mi sono inventato per farmi una select dinamica, potrebbe andare bene anche per la verifica se prima prelievo dal form il valore del codice e allinterno del while metto un

if ($codiceinserito==$campoCod[$conta]) {$flag=1;}
e quindi se flag=0 proseguo altrimenti no ?
grazie
 
Perchè non usi un mysql_errno(...) dopo la query di inserimento?
Se ti ritorna il codice 1022 (che mi sembra sia quello che ti interesse),
ti comporti di conseguenza...
 
per ora o risolto così senza il while

$seleziona="SELECT codice FROM ".$tabella." WHERE codice='".$codice."'"; //cerco se c'è un codice uguale
$query = mysql_query($seleziona); //interrogo

$num_righe = mysql_num_rows($query);//risultato della ricerca
echo "<div id=\"risultati\">";
if($num_righe > 0){ //il codice esiste
echo "<br><b>attenzione: $codice&nbsp;&nbsp;CODICE GIA ESISTENTE</b>"; //avviso
//dare il refresh pagina
}else { //il codice è unico.........

ho fatto una query sul codice e ho richiesto quanti record ci sono
comunque adesso proverò (visto che sono in fase di studio) ancge con mysql_errno(...)
grazie
 
Non ho mica capito che volevi fare con questo codice. Cmq sia, a mio parere, è meglio che fai il controllo sul codice direttamente dal modulo, altrimenti costrungi l'utente a fare un click per scoprire che ha sbagliato. Se gli impedisci di commettere l'errore a prescindere, secondo me, è meglio.

Come dire, preferisci provarci con una e scoprire solo dopo 2 settimane che si tratta di un trans, oppure preferisci saperlo prima così eviti???

stanotte prima che arrivasse la tua risposta ho pensato a questo


$conta=(int)0;
while ($riga=mysql_fetch_array($query)){
$campoCod[$conta]=$riga[codice];
//qui echo per <option>………..
$conta+=;
}

che mi sono inventato per farmi una select dinamica, potrebbe andare bene anche per la verifica se prima prelievo dal form il valore del codice e allinterno del while metto un

if ($codiceinserito==$campoCod[$conta]) {$flag=1;}
e quindi se flag=0 proseguo altrimenti no ?
grazie
 
capisco perfettamente che è meglio prevenire che reprimere, ma avendo iniziato da poco lo studio di php ho gia la testa che fuma (non c'è la faccina).

grazie

p.s.
tanto per quanto mi paga(?) l'utente..........anche si si trova un traM mi va bene lo stesso
 

Discussioni simili