Kom ihåg mig?
Home Menu

Menu


Varför kopior?

Ämnesverktyg Visningsalternativ
Oläst 2010-01-17, 16:53 #1
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Standard Varför kopior?

Varför lyckas jag få kopior i min databas?
Borde inte följande garantera att det inte läggs in två, i detta faller, urls som är lika?

PHP-kod:
$url_id  '';
            
//Check if URL exist in db
            
$sql "SELECT `url_id`, `title` FROM `t_urls` WHERE `url` = '".$url."' LIMIT 1";
            
$result mysql_query($sql);
            while (
$row mysql_fetch_assoc($result)) {
                
$url_id $row['url_id'];
                
$title_from_db stripslashes($row['title']);
            }
            
//If not, add to db
            
if($url_id == ''){
                
$sql "INSERT INTO `t_urls` ( 
                    `url`,
                    `title`) 
                    VALUES (
                    '"
.$url."',
                    '"
.mysql_real_escape_string($title)."')";
                
mysql_query($sql) or die(mysql_error());
            } 
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 17:21 #2
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
Ändra fältet `url` i databasen till att ha flaggan UNIQUE.
Då kan du inte få dubbletter hur mycket du än försöker.
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 17:42 #3
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Ursprungligen postat av crazzy Visa inlägg
Ändra fältet `url` i databasen till att ha flaggan UNIQUE.
Då kan du inte få dubbletter hur mycket du än försöker.
Ok, tack, men jag förstår fortfarande inte varför det lyckas skapa dubbletter, jag kollar jag först om urlen finns i databasen och om den inte finns så läggs den till, så varför?
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 19:28 #4
ChristianCarlsson ChristianCarlsson är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 58
ChristianCarlsson ChristianCarlsson är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 58
Måste inte if($url_id == ''){} vara innanför while-loopen?
ChristianCarlsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 19:50 #5
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Ursprungligen postat av ChristianCarlsson Visa inlägg
Måste inte if($url_id == ''){} vara innanför while-loopen?
Nej, först kollar jag i databasen om det finns en specifik url, exempelvis http://google.com. Om det finns sparas url_id till variablen $url_id.

Om sedan $url_id fortfarande inte är satt med ett id, så gör jag en insert.
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 20:12 #6
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
Det behöver inte vara en loop eftersom det är LIMIT 1. Man kan köra med if istället.

PHP-kod:
if($row mysql_fetch_assoc($result))
  
behandla existerande rad
else
  
insert 
Som crazzy skrev skulle jag använda UNIQUE, men det är som sagt inget svar på varför det inte fungerar som det är nu.

Varför kör du med stripslashes() på det du läser från DB? Det ska normalt inte behövas.

Jag antar att innehållet i $url inte kan påverkas från klientsidan, eller att det är kontrollerat med regexp eller liknande. Om inte måste du köra mysql_real_escape_string() på den också, både vid SELECT och INSERT.
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 22:05 #7
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Ursprungligen postat av BjörnJ Visa inlägg
Det behöver inte vara en loop eftersom det är LIMIT 1. Man kan köra med if istället.

PHP-kod:
if($row mysql_fetch_assoc($result))
  
behandla existerande rad
else
  
insert 
Som crazzy skrev skulle jag använda UNIQUE, men det är som sagt inget svar på varför det inte fungerar som det är nu.

Varför kör du med stripslashes() på det du läser från DB? Det ska normalt inte behövas.

Jag antar att innehållet i $url inte kan påverkas från klientsidan, eller att det är kontrollerat med regexp eller liknande. Om inte måste du köra mysql_real_escape_string() på den också, både vid SELECT och INSERT.

stripslashes har inte med $url att göra, $title dock, skrivs in i db med real_escape_string, men det är inte den som är problemet.
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 22:12 #8
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
Citat:
Ursprungligen postat av grinditwp Visa inlägg
stripslashes har inte med $url att göra, $title dock, skrivs in i db med real_escape_string, men det är inte den som är problemet.
Jag menade inte att stripslashes() har något med $url att göra. Det var olika kommentarer.

Man behöver inte använda stripslashes() när man hämtar från DB bara för att man använde mysql_real_escape_string() när man skrev till DB.

Däremot bör man i vissa fall använda htmlspecialchars() innan man skriver ut information som man hade lagrat i DB.
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 22:53 #9
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Ursprungligen postat av BjörnJ Visa inlägg
Jag menade inte att stripslashes() har något med $url att göra. Det var olika kommentarer.

Man behöver inte använda stripslashes() när man hämtar från DB bara för att man använde mysql_real_escape_string() när man skrev till DB.

Däremot bör man i vissa fall använda htmlspecialchars() innan man skriver ut information som man hade lagrat i DB.
varför finns stripslashes då?
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-17, 23:08 #10
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
Citat:
Ursprungligen postat av grinditwp Visa inlägg
varför finns stripslashes då?
För att ta bort de extra slasharna om man vill använda datat till något annat än att stoppa in i en databas. Det är väl egentligen bara aktuellt om magic quotes är aktiverat på servern, vilket jag tror var default för gamla PHP-versioner, men inte nu längre.
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 03:15.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017