07. oktober 2003 - 16:56Der er
11 kommentarer og 1 løsning
Check af, at indtastet nr. ikke allerede findes i tabel
Skole skal oprette hold m. hver sit nr. Nye hold skal have nye nr., viser derfor liste over de gamle ved siden af, som der ikke må tages fra. Men hvordan checke for, at der alligevel ikke oprettes to hold med samme nr.?
Fra form kommer $hold_nr, som skal indsættes i tabel hold.
Har prøvet at lege med:
if ($action == 'go') {
$ny_hold_nr = $hold_nr;
$result = mysql_query("SELECT hold_nr FROM hold"); while ($row = mysql_fetch_array($result)) { $gl_hold_nr = $row["hold_nr"]; }
for at være på den helt sikre side kan du sættet feltet til at være UNIQUE i databasen. Evt. i kombination med feltet skole.
Synes godt om
Slettet bruger
07. oktober 2003 - 18:28#3
Og hvis du laver feltet UNIQUE, kan du undlade checket (SELECT COUNT(*) ...) og bare kigge på resultatet af din INSERT.
Hvis du vil bruge modellen med først at lave en SELECT COUNT(*) og så en INSERT ... så bliver du nødt til at låse tabellen først med LOCK TABLES hold_nr WRITE.
Nja, vil nu alligevel helst ikke nøjes med COUNT løsningen, for den virker (vist) kun når hold_nr er et num felt. Da der enkelte gange skal kunnes skelnes mellem holdene 23A og 23B, er feltet gjort til varchar(6). Løsningen med COUNT virker ved hold nr. som tal, men ikke med fx 23A. Nu vil jeg prøve at gøre hold_nr UNIQUE - men skal lige have rettet allerede gentagne hold nr., så der ikke sker noget med dem...kigger så også på <ole/ bole>
Tusind tak, det virker! Fik ændret feltet til UNIQUE, og bruger din mellemste løsning: $err = mysql_errno(); if ( $err==1062 ) { # Kode, der skal afvikles, hvis værdien findes i DB allerede } Men jeg forstår stadig ikke helt: - din sidste løsning (@mysql_query( ........... ); $err = mys....) - skulle denne query også ind efter insert? Og så er det et dobbelt kald til databasen, ikke (insert plus query)? - hvis nu jeg havde flere unikke felter i tabellen, så kunne $err = mysql_errno();.... ikke skelne mellem dem, vel? Så nødt til at vælge @mysql_query( ........... );... til bestemte felter (et ad gangen?)??
Sætter du '@' foran en query, forhindrer du, PHP skriver sine sædvanlige fejlmeddelelser. Du skal ikke lave to queries - det er blot en anden måde at skrive den på :)
Du kan med den viste kode kun fange én 1062 ad gangen (mig bekendt). Jeg har ikke en metode til at fange flere af den type fejl i samme query. /mvh
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.