Avatar
Frestyle
Člen
Avatar
Frestyle:

Zdravím, mám menší problém a zároveň i dotaz. Mám malé forum a potřebuji aby vypisoval po příspěvkem reakce na příspěvek. Vůbec se mi to nedaří. Víte prosím někdo kde dělám chybu a případně opravit? Děkuji předem

$sql = mysql_query("
    SELECT us.id,uz.parent,us.nick,us.text
      FROM forum_prispevky us
        LEFT JOIN forum_prispevky uz ON us.id = uz.parent
         WHERE us.id_fora='".intval($_GET["id"])."' LIMIT $start,$zobrazit");
 
Odpovědět 12.3.2014 15:47
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Frestyle
Petr Nymsa:

Ta intval ošetřuje vstup ? Zkus se jinak podívat po novém ovladači, mysql je starý - zkus např. PDO. Je objektový a pracuje se s ním mnohem lépe.

K SQL - podle mě ti chybí AS (alias) (snad se nepletu) tj

SELECT us.id,uz.parent,us.nick,us.text
       FROM forum_prispevky AS us
         LEFT JOIN forum_prispevky AS uz ON us.id = uz.parent
          WHERE us.id_fora

Každopádně ti aliasy jsou hodně divné a matoucí.

Nahoru Odpovědět 12.3.2014 15:52
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Frestyle
Člen
Avatar
Odpovídá na Petr Nymsa
Frestyle:

aliasem to není, ale chová se to stejně sním i bez něj. Jak to mám to vypisuje vše, ale je tam špatné seřazení

 
Nahoru Odpovědět 12.3.2014 15:59
Avatar
Frestyle
Člen
Avatar
Odpovídá na Petr Nymsa
Frestyle:

Přesně tak. To je podmínka které příspěvky se mají pro vlákno zobrazovat. Teď mi tam chybí jen dodat reakce. Něco jako je tady, ale reakce chci u sebe zmenšit a dát třeba doprostřed. Víc je zviditelnit. Taková klasika, ale nevím jak to mám docílit. Můžu do while vkládat další dotazy s podmínkou a tak toho docílit, ale byla by to prasárna a potom stránkování by bylo také mimo kontrolu. To by se taky dalo vyřešit dalšíma prasárnama, ale to by byl jeden hnus za druhým a toho se chci vyhnout. Proto se snažím toho docílit skrz Join, ale jak je jasné se mi moc nedaří.

 
Nahoru Odpovědět 12.3.2014 16:08
Avatar
Ori
Člen
Avatar
Ori:

na zoradenie sa pouziva https://dev.mysql.com/…ng-rows.html

napisal by som aj priklad ale som na tablete

 
Nahoru Odpovědět 12.3.2014 16:08
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Frestyle
Petr Nymsa:

Bez toho aniž bychom věděli co je v těch proměných $start a $zobrazení těžko poradíme. A ještě jednou, ta funkce intval ošetřuje vstup ? Pokud ne, máš tam SQL injekce

Popiš víc problém a možná někdo poradí.

Nahoru Odpovědět 12.3.2014 16:08
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Frestyle
Člen
Avatar
Odpovídá na Petr Nymsa
Frestyle:

V adrese mám například id=1 a podle toho vypisuji příspěvky pro zvolené téma. Start, zobrazit je jen pro stránkování.

 
Nahoru Odpovědět 12.3.2014 16:11
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Frestyle
Petr Nymsa:

Tobě asi není moc pomoci. Ještě jednou, funkce intval dělá co ? Ošetřuje nebo ne vstup ? No a co v těch proměnných je ? Až se vyjádříš lépe a srozumitelně, možná dokážeme poradit

Nahoru Odpovědět 12.3.2014 16:19
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Ori
Člen
Avatar
Ori:

mohol by si poslat aj strukturu tabulky(najlepsie sql CREATE....), taktiez by si mal preist na PDO .. a precitat si nieco o sql injekcii

 
Nahoru Odpovědět 12.3.2014 16:29
Avatar
Frestyle
Člen
Avatar
Frestyle:

intval ošetřuje vstup z url adresy (nevím jak jinak to napsat). Pomocí toho si vypíšou jen příspěvky daného témata. $start a $zobrazit si myslím není vůbec třeba komentovat a pokud to odvádí pozornost, tak na to zapomeňte páč na sestavení dotazu Limit nemá vliv.

Tabulka se jmenuje: forum_prispevky
a ta obsahuje: id, id_fora, parent, nick, text, datum
id = autoincrement
parent = do parentu se vkladá id(autoincrement) příspěvku. Proto se parent porovnává s id. Nevím co píšu nesrozumitelně. Já se na to koukal umyslně cizíma očima a nějak mi je jasné proč tam mám ošetřený vstup z adresy a k čemu nejspíše slouží.

 
Nahoru Odpovědět 12.3.2014 16:31
Avatar
Ori
Člen
Avatar
Odpovídá na Petr Nymsa
Ori:

intval je nativna php funkcia http://cz2.php.net/intval pouziva ju asi na 'osetrenie' sql injekcie

 
Nahoru Odpovědět 12.3.2014 16:32
Avatar
Frestyle
Člen
Avatar
Frestyle:

intval co já vím sql injekci odbourává. Přeci jenom to převádí na čísla

CREATE TABLE IF NOT EXISTS `forum_prispevky` (
  `id` bigint(12) NOT NULL AUTO_INCREMENT,
  `id_fora` bigint(12) NOT NULL,
  `parent` bigint(12) NOT NULL,
  `nick` varchar(55) COLLATE utf8_czech_ci NOT NULL,
  `text` text COLLATE utf8_czech_ci NOT NULL,
  `ip` varchar(55) COLLATE utf8_czech_ci NOT NULL,
  `datum` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=8 ;

--
-- Vypisuji data pro tabulku `forum_prispevky`
--

INSERT INTO `forum_prispevky` (`id`, `id_fora`, `parent`, `nick`, `text`, `ip`, `datum`) VALUES
(1, 1, 0, '32', 'Test tématu', '127.0.0.1', '2014-03-07 11:21:06'),
(2, 1, 0, '32', 'ahoj', '127.0.0.1', '2014-03-08 09:15:03'),
(3, 1, 0, '19', 'hi :7:', '127.0.0.1', '2014-03-08 09:24:49'),
(4, 1, 2, '32', 'hi :7:', '127.0.0.1', '2014-03-08 09:25:33'),
(5, 2, 0, '19', 'Testy :14:', '127.0.0.1', '2014-03-10 11:29:34'),
(6, 3, 0, '19', 'ahojky', '127.0.0.1', '2014-03-11 00:09:06'),
(7, 3, 0, '19', 'ty jsi frajer', '127.0.0.1', '2014-03-11 07:46:14');
 
Nahoru Odpovědět 12.3.2014 16:36
Avatar
Frestyle
Člen
Avatar
Odpovídá na Ori
Frestyle:

Konečně někdo kdo mě chápe. Děkuji

 
Nahoru Odpovědět 12.3.2014 16:38
Avatar
Lubos857
Člen
Avatar
Lubos857:

Prošel jsem si diskusi a nějak si nejsem jistý, co přesně máš za problém (kromě toho co se tu řeší mimo).

Tvůj problém je jen v tom, že máš ty příspěvky (záznamy) špatně seřazené?
Jestli ano, přidej nějaké řazení podle data přidání (ORDER BY datum DESC) příspěvku a je to.

Jestli máš jiný problém, měl bys ho lépe popsat a dát nám vědět, co to dělá a nedělá ;-)

Nahoru Odpovědět 12.3.2014 17:03
Protože bagr nežere cukr.
Avatar
Frestyle
Člen
Avatar
Frestyle:

Order by pomůže, ale nevím jak mu mám dát aby to seřazoval správně. Tím myslím aby se jako první zobrazil příspěvek a pak teprve reakce na něj. Ale asi na to zapomeňte. Bez urážky, ale myslím si, že na to přijdu dřív než to tady detailně popisovat a kdo ví co ještě by sem ještě řešil. Takhle budu řešit jen kod a k výsledku se dopracuji snáz. Děkuji za váš čas

 
Nahoru Odpovědět 12.3.2014 17:08
Avatar
Ori
Člen
Avatar
Ori:

ok ak som spravne pochopil tak tu to mas http://sqlfiddle.com/#…

rozhodne sa nauc pouzivat PDO.. je to ovela bezpecnejsie + oprav si

intval($_GET["id"])

na to aby to osetrovalo naozaj sql injekciu tak ako sa ma.. pretoze predpokladam ze taketo neporiadne funkcie budu pouzivane aj ine v kode

PS: kus som si pomenil insertovane data tak aby som lepsie videl dedenie tych potomkov
PS2: niesom SQL guru mozno to bude zle neoptimalne a podobne ale funguje to.. kazdopadne si necham poradit aj ja, urcite nieco podobne v buducnosti budem robit

 
Nahoru Odpovědět 12.3.2014 17:13
Avatar
Frestyle
Člen
Avatar
Odpovídá na Ori
Frestyle:

Stránka mi vyhazuje 404. Troufnu si říct, že tohle je věc, kterou jednou bude řešit nebo dělat každý kdo dělá stránky :-)

 
Nahoru Odpovědět 12.3.2014 17:17
Avatar
Ori
Člen
Avatar
Odpovídá na Frestyle
Ori:

ok tak to robi nejaky blby regularny vyraz na linky :D ... pridam to cez skracovac URL http://tinyurl.com/pqglhxj

Editováno 12.3.2014 17:21
 
Nahoru Odpovědět 12.3.2014 17:20
Avatar
Frestyle
Člen
Avatar
Odpovídá na Ori
Frestyle:

Spíš se to tady na něco převádí. Nevadí asi to nedokážu udělat, ale třeba něco šikovného najdu i já :-)

 
Nahoru Odpovědět 12.3.2014 17:22
Avatar
Ori
Člen
Avatar
Odpovídá na Frestyle
Ori:

editoval som uz spravnu URL

 
Nahoru Odpovědět 12.3.2014 17:22
Avatar
Frestyle
Člen
Avatar
Odpovídá na Frestyle
Frestyle:

Jak jste to udělal? Tohle je přesně ono. Jen nevím jak mám teď rozlišit aby sem ty reakce mohl centrovat nebo jinak rozlišit třeba barvou a podobně.

 
Nahoru Odpovědět 12.3.2014 17:28
Avatar
Ori
Člen
Avatar
Odpovídá na Frestyle
Ori:

Rozhodne to bude zlozitejsi kod, bohuzial nemam cas ho teraz pisat ale ak uz budes mat nieco napisane ty urcite sa tu najde niekto kto ti poradi, ale pisat cely kod tu asi nik nebude :)

 
Nahoru Odpovědět 12.3.2014 17:38
Avatar
Frestyle
Člen
Avatar
Frestyle:

Dobrý, jsem to už vyřešil. Fakt super! Jsem si už myslel, že to "neudělám". Děkuju moc. Teď už jen řeším problém, ve výpisu, který mi trošku znesnadňuje šablonový systém.

 
Nahoru Odpovědět 12.3.2014 17:39
Avatar
kozak.martin
Člen
Avatar
kozak.martin:

Zdarec,
potřeboval bych poradit s následujícím projektem: podle knihy Programujeme vlastní sociální síť jsem vytvořil jejich Dinoweb, ve kterém mám v adresáři registry mysql databázi s názvem mysqldb.class. Problém je v tom, že když zadám localhost/dino­web/index.php, napíše mi to následující problém:

Warning: mysqli::mysqli(): (HY000/1049): Unknown database in C:\xampp\htdoc­s\dinoweb\regis­try\mysqldb.clas­s.php on line 78

Warning: Mysqldb::newCon­nection(): Couldn't fetch mysqli in C:\xampp\htdoc­s\dinoweb\regis­try\mysqldb.clas­s.php on line 82

Fatal error: Chyba při pokusu o připojení k databázi. in C:\xampp\htdoc­s\dinoweb\regis­try\mysqldb.clas­s.php on line 82

Nemám náhodou databázi MYSQLDB nahrát do PHPadminu na localhost/xampp? Ale i tak mi to nejde.

Používám aplikaci XAMPP a jsem naprostý začátečník, takže byl bych komukoliv vděčen za radu.

 
Nahoru Odpovědět 12.3.2014 17:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.