$sql = "SELECT count(*) AS antal FROM dinTabel WHERE navn='" . $navn ."'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
if ($row["antal"] == 0) { $sql = "INSERT INTO dinTabel (navn) VALUES ('" . $navn . "')"; mysql_query($sql) or die(mysql_error());
echo "Navnet er tilføjet i databasen."; } else { echo "Navnet var allerede i databasen."; }
Det arne mener er at du kan komme til at lave insert af duplikat hvis der er flere brugere som forsøger insert af samme navn samtidigt. Hvis processen som laver select count(*) bliver preempted (stoppet) og en anden process tester samtidigt så vil begge tro at der er 0 rækker med navnet men begge vil efterfølgende lave insert. Derfor sæt et unique constrainet på kolonnen og håndter den fejl.
Det bestemer du jo selv - men jeg deler da gerne. :^)
Problemet med flere brugere, som kan komme til at oprette samme navn fordi de forsøger at oprette dem på samme tid, er lidt akademisk efter min mening. For det første skal de forsøge at oprette det samme navn, for det andet skal det ske på samme tid. Sådan noget sker kun når du har med en person som aktivt forsøger at hacke din side. Eller når der er tale om et system som er virkeligt pouplært og hvor der er rigtigt mange som tilmender sig. Men det er helt bestemt en problemstilling man som - professionel - udvikler skal have i tankerne.
Enig, også fordi dette system kun sjældent vil være besøgt af 2 pers. samtidigt, og fordi det kun er "sminke" - mit kald bruger "DISTINCT navn" så navnene hentes derfor kun 'en gang, men derfor er det jo rart, at brugerne ikke smider deres navn flere gange...
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.