IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Frestyle
Člen
Avatar
Frestyle:12.3.2014 15:47

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
Tvůrce
Avatar
Odpovídá na Frestyle
Petr Nymsa:12.3.2014 15:52

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:12.3.2014 15:59

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:12.3.2014 16:08

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 I
Člen
Avatar
Ori I:12.3.2014 16:08

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
Tvůrce
Avatar
Odpovídá na Frestyle
Petr Nymsa:12.3.2014 16:08

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:12.3.2014 16:11

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
Tvůrce
Avatar
Odpovídá na Frestyle
Petr Nymsa:12.3.2014 16:19

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 I
Člen
Avatar
Ori I:12.3.2014 16:29

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:12.3.2014 16:31

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 I
Člen
Avatar
Odpovídá na Petr Nymsa
Ori I:12.3.2014 16:32

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:12.3.2014 16:36

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 I
Frestyle:12.3.2014 16:38

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

 
Nahoru Odpovědět
12.3.2014 16:38
Avatar
Neaktivní uživatel:12.3.2014 17:03

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
Neaktivní uživatelský účet
Avatar
Frestyle
Člen
Avatar
Frestyle:12.3.2014 17:08

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 I
Člen
Avatar
Ori I:12.3.2014 17:13

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 I
Frestyle:12.3.2014 17:17

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 I
Člen
Avatar
Odpovídá na Frestyle
Ori I:12.3.2014 17:20

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 I
Frestyle:12.3.2014 17:22

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 I
Člen
Avatar
Odpovídá na Frestyle
Ori I:12.3.2014 17:22

editoval som uz spravnu URL

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

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 I
Člen
Avatar
Odpovídá na Frestyle
Ori I:12.3.2014 17:38

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:12.3.2014 17:39

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:12.3.2014 17:48

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.