Autor | Zpráva | ||
---|---|---|---|
cistax Profil * |
DObrý den, chtěl bych se zeptat, jestli někdo nevíte, jak to mám udělat, když jsem si v db založil tabulku články a nastavil k sloupci nazev UNICATE, vzdy kdyz pridam clanek se stejnym nazvem, tak mi to hodi: Duplica Key 'clanek' for '2' . A já bych chtěl, aby mi php vypsalo : název článku je shodný s již existujícím článkem, ale JAK na to:?: díky předeem
Moderátor Alphard: Opraven překlep v názvu tématu
|
||
joe Profil |
#2 · Zasláno: 23. 3. 2009, 17:10:47
Například takhle
if(!mysql_query("INSERT INTO ...")) { if(mysql_error() == 1062) { } } Tou funkcí mysql_error() si teď nejsem uplně jist, nevím jaký má přesně název. Ale dostaneš chybu s kódem 1062 a ještě nějaký, to ti napíše, když zkusíš ten dotaz třeba v phpMyAdminu. |
||
keeehi Profil |
#3 · Zasláno: 23. 3. 2009, 17:13:09
Před chvílí to tu bylo. ZDE
|
||
joe Profil |
#4 · Zasláno: 23. 3. 2009, 17:15:40
keeehi
To ale není stejné. |
||
Mike8748 Profil |
#5 · Zasláno: 23. 3. 2009, 17:18:16
mysql_error() vraci string, popis chyby.
mysql_errno() vraci cislo chyby |
||
Tomasds Profil |
#6 · Zasláno: 23. 3. 2009, 17:31:46
Snažíte se přímo odpovědět na otázku, ale já bych řekl, že problém je jinde.
cistax Ne že by to nešlo řešit, ale dělá se to jinak. Přidej si do té tabulky sloupec ID, tomu nastav UNIQUE a autoincrement. ID potom při přidávání článku nezadávej, databáze se o to stará sama. Článek pak zobrazuj přes /zobrazitclanek.php?id=15 ( a select textclanku from clanky where id = ..). Není důvod neumožnit existenci dvou článků se stejným názvem, rozhoduje ID. Jestli toto víš a máš opravdu důvod dělat to co popisuješ, tak mě ignoruj :) |
||
joe Profil |
#7 · Zasláno: 23. 3. 2009, 17:55:32
Tomasds
Pokud ten sloupec má jako ident, pak není možné, aby byly dva stejné :-) Jinak to je jak napsal Mike8748. Já už v PHP zas dlouho nedělal, mi to všechno vypadlo :) |
||
AM_ Profil |
#8 · Zasláno: 23. 3. 2009, 18:08:42
„Pokud ten sloupec má jako ident, pak není možné, aby byly dva stejné :-)“
Tak to asi Tomasds myslel, místo identifikace pomocí názvu článku použít ID. Tak se to dělá. „Přidej si do té tabulky sloupec ID, tomu nastav UNIQUE a autoincrement“ ID se obvykle dává PRIMARY místo UNIQUE (každá tabulka by měla mít primární klíč). |
||
joe Profil |
#9 · Zasláno: 23. 3. 2009, 18:18:52
AM_
Já myslel ident jako například: nejaky-pekny-clanek Toto se většinou skrývá pod identem v tabulce. |
||
keeehi Profil |
#10 · Zasláno: 23. 3. 2009, 18:26:29
joe
Jak to, že to není stejné? Je potřeba zjistit, zda je už název v DB. Jen to nebude zajišťovat databáze ale PHP. |
||
joe Profil |
#11 · Zasláno: 23. 3. 2009, 18:51:02
keeehi
Protože kdyby to dělal tím co jsi poslal, tak by vykonával dva dotazy zbytečně pokaždý. Takhle stačí jeden. Pokud se nevloží řádek, pak se vyvolá chyba, pokud ne, tak se řádek vloží. V tom tématu, na který odkazuješ se řeší jen to, jestli už v databázi je nebo není. |
||
AM_ Profil |
#12 · Zasláno: 23. 3. 2009, 18:53:57
Optimální řešení je podle mě jako ident používat ID. Pokud používá textový ident třeba kvůli pěkné url, udělal bych ty url třeba /clanky/15-o-koze-a-voze.htm, aby se zachovala pěkná url, ze které je jasné, o čem stránka je, přičemž při zpracování použije jen ID článku a název se zahodí.
|
||
joe Profil |
#13 · Zasláno: 23. 3. 2009, 19:37:58
AM_
Tak by se to ale dělat nemělo, protože pak ti bude existovat nekonečně mnoho adres /clanky/15-bla-bla.htm /clanky/15-o-koze-a-voze.htm /clanky/15-nejlepsi-web.htm /clanky/15-nejlepsi-web . . Článek by se měl objevit jen na jedné url. Takže vhodné je použít primární klič id - jako autoincrement a ident jako textový, který bude unique. |
||
Alphard Profil |
#14 · Zasláno: 23. 3. 2009, 19:47:29
joe:
„Protože kdyby to dělal tím co jsi poslal, tak by vykonával dva dotazy zbytečně pokaždý. Takhle stačí jeden. Pokud se nevloží řádek, pak se vyvolá chyba, pokud ne, tak se řádek vloží.“ neviděl bych to tak jednoznačně, jeden dotaz navíc při vkládání článku (jak časté to bude?) není taková katastrofa id bych tam dal určitě, kvůli připojení jiných tabulek, přejmenování článku atd., hodí se, když tam zůstane zachovaný identifikátor tvar URL je na autorovi, s mod_rewrite může být v podstatě jakýkoliv |
||
joe Profil |
#15 · Zasláno: 23. 3. 2009, 19:52:52
Alphard
Jasně, že to třeba při vkládání článku není katastrofa, ale je lepší, když bude vědět, že taková možnost tady je, a že se na dotazech vyplatí šetřit. |
||
AM_ Profil |
#16 · Zasláno: 23. 3. 2009, 20:05:26
joe
OK, ale v tom případě bych to řešil tak, že řekněme po zadání 15-bla-bla.htm se z databáze vytáhne článek 15, ověří se jeho ident (který nemusí být unikátní, což řeší problém, že se to nemusí nijak ošetřovat), jestli je roven bla-bla, a pokud není, vyhodit 404. |
||
cistax Profil * |
#17 · Zasláno: 24. 3. 2009, 19:23:01
tomasds: drive jsem to mel na ?id=25 ale vice se mi libi kdyz to vypise ?nadpis=dobrej-clanek .... jo a díky všem za nápady, pokusím se to jedním z těch nápadů řešit
|
||
Tomasds Profil |
#18 · Zasláno: 24. 3. 2009, 20:25:31
cistax
To se dělá úplně jinak. Řádky mají ID a to v rámci systému používáš k identifikaci. Používat pro identifikaci kus textu je dost neefektivní. To co ty chceš, tomu se říká pěkné adresy nebo cool uri .. pohledej tady v diskusi, zjistíš jak se to používá. |
||
cistax Profil * |
#19 · Zasláno: 25. 3. 2009, 18:13:36
j, diky, take jsem prisel jeste na jeden problem s tim ID, kdyz je to ?id=25, tak to nektere vyhledavace můžou prý brát jako že se tam ukládá hash od session
|
||
joe Profil |
#20 · Zasláno: 25. 3. 2009, 18:59:30
Tomasds
Zase o tolik pomalejší to nebude, když na tom sloupci bude index. Taky nepředpokládám, že nepůjde o staticíce článků... cistax Nikdo ti nebrání, abys použil třeba /clanek=nejaky-clanek nebo jen /nejaky-clanek |
||
Časová prodleva: 15 let
|
0