Autor | Zpráva | ||
---|---|---|---|
wimstr Profil |
#1 · Zasláno: 31. 10. 2006, 11:58:52
Jak mám upravit GB, aby se dala přidat ke každémů článku jako komentáře.... (konkrétně, jak k ní přiřadit ID a jak by měla vypadat databázová tabulka) děkuji
|
||
Eddie Profil |
#2 · Zasláno: 31. 10. 2006, 14:28:41
napr
table clanky ( id int - unikatne idcko nadpis ... ); table komentare ( id int ... poradove cisla, urcujes nimi v akom poradi sa vypisu riadky cl_id int ... id clanku ku ktoremu patria komentare ); dufam ze ti pomohlo toto male nakopnutie :) |
||
wimstr Profil |
#3 · Zasláno: 31. 10. 2006, 15:04:08
dufam ze ti pomohlo toto male nakopnutie :)
obávám se že moc ne.. :( |
||
speacker Profil * |
#4 · Zasláno: 31. 10. 2006, 16:03:55
vytvoríš si tabulku komentáře, kde musíš sloupec, do kterého budeš ukládat k jakému článku byl komentář uložen, tzn. uložíš si tam ID toho článku. a pak udeláš normální SQL dotaz s klauzulí WHERE a ty koment vypíšeš
|
||
wimstr Profil |
#5 · Zasláno: 31. 10. 2006, 17:25:54
to s tim ID chápu, ale jak přiřadim tomu komentáři(článku) tu určitou ID
|
||
wimstr Profil |
#6 · Zasláno: 31. 10. 2006, 17:29:21
Pokud na to znáte někdo tutoriál, mohl by mi možná pomoci poněkud více děkuji...
|
||
speacker Profil * |
#7 · Zasláno: 31. 10. 2006, 17:49:23
ja nevím jak ty články vypisuješ, ale dám ti příklad. pokud to máš www.neco.cz/clanek.php?id=2 tak při ukládání komentáře do db zadáš v SQL dotazu
"INSERT INTO komentare (id,id_clanek,...) VALUES ('','$_GET[id]',...)"; a pak vypisuješ : "SELECT * FROM komentare WHERE id_clanku='{$_GET[id]}'"; |
||
wimstr Profil |
#8 · Zasláno: 31. 10. 2006, 18:21:40
Vzal sem to zatim za jiny konec, kouk sem na interval, a našel si tam komentáře, už jednou sem to nezpustil, a tak to zkusim znova.
vše by šlo, až na ten problém, že to hlásí Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/w/wimstr/komentare.php on line 15 co s tim nevim :D.. |
||
speacker Profil * |
#9 · Zasláno: 31. 10. 2006, 18:50:43
tak sem dej kód, btw proč tam dáváš mysql_num_rows?
|
||
wimstr Profil |
#10 · Zasláno: 31. 10. 2006, 19:05:53
btw proč tam dáváš mysql_num_rows?
jak už sem uvedl, je to z intervalu
|
||
Joker Profil |
#11 · Zasláno: 31. 10. 2006, 20:10:04
Za:
$s = mysql_query("Select predmet, ncas, email, meno from komentare where idclanku = $id order by ncas desc"); přidejte: if(!$s) die("Chyba SQL: ".mysql_error()); |
||
wimstr Profil |
#12 · Zasláno: 1. 11. 2006, 09:15:32
No, tak to hlásí zase něco jineho
Chyba SQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by ncas desc' at line 1 |
||
Joker Profil |
#13 · Zasláno: 1. 11. 2006, 10:26:45 · Upravil/a: Joker
wimstr
Právě, napřed je potřeba zjistit, jakou chybu to vlastně hodí ;-) Takže máte chybu někde v tom SQL dotazu... tak to místo ještě pozměňte takhle: $sql = "Select predmet, ncas, email, meno from komentare where idclanku = $id order by ncas desc" $s = mysql_query($sql); if(!$s) die("Chyba SQL!<br>Dotaz: $sql<br>Chyba:".mysql_error()); edit: Prozatím je můj tip, že v nějakém případě pošlete prázdné ID a ten dotaz pak vypadá: Select predmet, ncas, email, meno from komentare where idclanku = order by ncas desc což právě hodí tu chybu. Zkuste tam dát to co jsem napsal výše, uvidíme, co je špatně. |
||
wimstr Profil |
#14 · Zasláno: 1. 11. 2006, 10:37:02
Tak sem to vyměnil a zas tohle
Chyba SQL! Dotaz: Select predmet, ncas, email, meno from komentare where idclanku = order by ncas desc Chyba:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by ncas desc' at line 1 |
||
krteczek Profil |
#15 · Zasláno: 1. 11. 2006, 11:10:28
no takže klasický problém s globálními proměnnými: $id naraď (int)$_GET['id'] a mělo by to fachat
krteczek |
||
krteczek Profil |
#16 · Zasláno: 1. 11. 2006, 11:17:25
teda takto: Fungovat to bude, ale stejně bys měl ověřit jestli to id je celé kladné číslo větší než 0. takže nějak takto:
ještě lepší je doplnit testovaní o dotaz na db, jestli takový článek skutečně existuje, a jsou u něj povoleny komentáře krteczek |
||
Joker Profil |
#17 · Zasláno: 1. 11. 2006, 11:45:24
wimstr
No, to je přesně to co jsem tipoval. Řešení už popsal krteczek. |
||
Joker Profil |
#18 · Zasláno: 1. 11. 2006, 12:04:12
Jen ještě dodám, že tímhle pravidlem se můžete řídit obecně:
mysql_query vrací false v případě chyby, takže hodnotu false byste měl detekovat a reagovat na ní, nejspíš ukončením skriptu (většinou se nic rozumnějšího dělat nedá). Příklad: $vysledek = mysql_query($sql); if(!$vysledek) die("Chyba komunikace s db!"); Při vývoji aplikace je vhodný postup si nechat vypsat odeslaný SQL dotaz a chybu SQL. Příklad: $vysledek = mysql_query($sql); if(!$vysledek) die("Chyba SQL!<br>Dotaz: $sql<br>Chyba:".mysql_error()); Pro ostrý provoz aplikace není z pohledu bezpečnosti moc vhodné tam tyhle údaje nechávat, případný útočník by je mohl zneužít k napadení webu. |
||
krteczek Profil |
#19 · Zasláno: 1. 11. 2006, 12:46:45
Joker: proto je lepší si napsat svou funkci a tu volat:
A samotná funkce chyba_db() může obsahovat spoustu fičurekale minimálně by tam měla být možnost nastavit režim výpisu
je to jen nástin ale určitě to bude lepší, než přepisovat všechny skripty při ostrém nasazení... vždycky ti to zprávu na mail, když budou povolené tak je navíc i vypíše na stránku mužeš to ukládat do souboru atd.. krteczek |
||
wimstr Profil |
#20 · Zasláno: 1. 11. 2006, 12:47:41
krteczech
a je jedno, kam to umístím aby to fungovalo |
||
wimstr Profil |
#21 · Zasláno: 1. 11. 2006, 13:02:16
hůásít to tohle,
Fatal error: Call to undefined function: komentare_list() in /3w/wz.cz/w/wimstr/miranda_im.php on line 108 kód té části je: <? require "komentare.php"; komentare_list($id); ?> |
||
Joker Profil |
#22 · Zasláno: 1. 11. 2006, 15:32:26
krteczek
Jo, to je takové vymakanější řešení, ale často stačí if(!$vysledek) die($hlaska); kde nakonec hláška může být i kompletní HTML kód. No a když se na nějakém místě objeví problém, tak se na tom místě prostě nahradí die($hlaska); za nějaký bližší výpis a hned je jasno. Ono pokud systém používá pro komunikaci s databází třídu, může to zařídit i ta třída, ale to už jsme někde mimo téma wimstr Ta chyba znamená, že není definovaná funkce komentare_list() Jestli jí máte v tom souboru a includujete správný soubor, tak je to docela zvláštní... |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0