Vinnaren i pepparkakshustävlingen!
2015-02-01, 20:37
  #1
Medlem
Sitter och klurar med ett skript jag skrev för några dagar sedan. Man använder formuläret till att skicka in data till en tabell i databasen, men hur gör jag för att inte kunna skicka in samma värde två gånger och istället skicka ut ett felmeddelande?

Kod:
$sql "INSERT INTO users (fname, lname) VALUES('$_POST[fname]','$_POST[lname]')";
         
$result mysql_query($sql); 

Antar att man använder en SELECT för att kolla om fälterna är tomma, men är helt osäker på hur man skriver det..?
Citera
2015-02-01, 20:58
  #2
Medlem
Du måste lägga in en constraint i databasen, som inte tillåter två lika värden.
Citera
2015-02-01, 23:01
  #3
Medlem
Citat:
Ursprungligen postat av brainwhipper
Du måste lägga in en constraint i databasen, som inte tillåter två lika värden.

Eftersom det ser ut som om OP:s tabell lagrar personer så är det knappast vettigt att kräva unika värden för kolumnerna fname och lname. Om det finns fler kolumner (något som är unikt, t.ex. personnummer) så är ju den vettig att sätta som unik.

Så, OP, hur ser din tabell ut? Vill du verkligen att person nr 2 med namn Sven Svensson inte kan registreras för att det redan finns en Sven Svensson?

Om du ändå skulle vilja hindra Sven nr 2 så skulle en SELECT kunna skrivas såhär:
Kod:
SELECT 1 FROM users WHERE fname '$_POST[fname]' AND lname '$_POST[lname]' 
Resultatet blir då 1 om raden existerar och null om inte.
Citera
2015-02-01, 23:32
  #4
Medlem
Eller så gör du rätt från början och skippar onödiga selects.
Du kan köra en unique index på de fältet som identifierar personen, kan vara personnummer eller email och kör sedan en INSERT IGNORE och kollar om last inserted id är > 0 alternativt inom en try catch om du inte vill köra ignore och vill hantera felet manuellt.

Sedan bör du använda prepare statements också.
Google is your friend
__________________
Senast redigerad av newone 2015-02-01 kl. 23:34.
Citera
2015-02-02, 16:23
  #5
Medlem
Citat:
Ursprungligen postat av erkki17
Eftersom det ser ut som om OP:s tabell lagrar personer så är det knappast vettigt att kräva unika värden för kolumnerna fname och lname. Om det finns fler kolumner (något som är unikt, t.ex. personnummer) så är ju den vettig att sätta som unik.

Så, OP, hur ser din tabell ut? Vill du verkligen att person nr 2 med namn Sven Svensson inte kan registreras för att det redan finns en Sven Svensson?

Om du ändå skulle vilja hindra Sven nr 2 så skulle en SELECT kunna skrivas såhär:
Kod:
SELECT 1 FROM users WHERE fname '$_POST[fname]' AND lname '$_POST[lname]' 
Resultatet blir då 1 om raden existerar och null om inte.
Min tabell består egentligen bara av fname och lname, inget mer.
Citera
2015-02-05, 20:20
  #6
Medlem
ischs avatar
Citat:
Ursprungligen postat av UrbanFurban
Min tabell består egentligen bara av fname och lname, inget mer.

Fast då faller ju hela tanken då inget av värdena knappast är av slaget som måste vara unika.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback