Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

Dobrý den,
na začátek ti chci moc poděkovat,jelikož doted jsem programoval takovým způsobem,že si nakonec myslím,že to programování snad ani nemohlo bejt..takový prasácký.. :D
tahle architektura je tak dokonalá,že nemám co bych k tomu dodal..
a teď hlavní otázka
po dokončení téhle lekce,mě všechno funguje jak má,až na to,že když tam dám neexistující článek,tak mě to napíše chyby

Warning: array_intersect_key(): Argument #1 is not an array

a

Warning: extract() expects parameter 1 to be array, null given

podle tohoto tutorialu jsem si myslel že tohle se vyřešilo,že pokud se zadá neexistující článek tak se napíše chybová hláška 404 ne?
tak proč mě to píše tyhle chyby?
a ještě jedna otázka,kdy asi tak chceš udělat další tutorial ohledně přihlášení uživatele/regis­trace uživatele?
já jen jestli se mám dotoho pustit sám nebo čekat na tvůj tutorial
(když dotoho pujdu sám,tak mám strach že to zabezpečení bude slabé,já byl zvyklej přihlašovat uživatele pomocí session,jak bys to řešil ty?
přemejšlel jsem ještě nad cookie,ale zas cookie má jednu nevýhodu, a to,že ho někdo nemusí mít zaplé..ovšem jeho výhoda je nastavení expirace,což u sessionu nejde,a ta expirace se mě hodí opravdu dost,jelikož mám v plánu udělat i online status,a po odhlášení se přemění na offline,ovšem pokud někdo odejde aniž by se odhlásil,tak jeho status zůstane jako online,což je nevyhovující ohledně jeho doby přihlášení...(ov­šem,dá se to udělat přes čas,že se budou sčítat časy,a např po 10min neaktivity ho to hodí do offline režimu,ale zas tohle si myslím že je zbytečně moc komplikované)
chci znát váš názor a odpověd Děkuji a s pozdravem Kamil Kotek

 
Odpovědět 19.1.2013 10:05
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

Ahoj, problém bude, že jsem tutoriál psal pod PHP 5.4, asi máš 5.3, o pár komentů výše máš řešení od Kita. Přihlašování bylo v plánu do konce ledna, ale vypadá to, že se to protahne, takže můžeš klidně začít :)

Nahoru Odpovědět 19.1.2013 12:56
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

To jsem právě udělal,sice to jde,ale jak píšu,po zadání neexistujícího článku to napíše tohle..
snad to mám teda dobře..do DB.php jsem dal

public static function dotazHodnota($dotaz, $parametry = Array()) {
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->fetchColumn();
}

a do manazerClanku.php jsem dal zase toto:

public function clanekExistuje($url)
{
        //return DB::dotazJeden('SELECT COUNT(*) FROM `clanky` WHERE `url` = ?', array($url))[0];
        return DB::dotazHodnota('SELECT COUNT(*) FROM clanky WHERE url = ?', array($url));
}

Takhle jsem teda pochopil že to tak má být..

 
Nahoru Odpovědět 19.1.2013 18:11
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

Třeba když dám adresu www.domena.cz/clanek/clanek3
tak to napíše ty chyby no..

 
Nahoru Odpovědět 19.1.2013 18:16
Avatar
thomeriuss
Člen
Avatar
thomeriuss:

tiez mam podobny problem ako kolega kamil.kotek

array_intersect_key(): Argument #1 is not an array

dal som si phpinfo();
PHP Version 5.4.6

takze staru verziu urcite nemam...
skusal som aj riesenie od kit ale neuspense

skusal som to debugovat ale trosku som sa zasekol. Kroky ktore osm presiel:
SmerovacKontro­ler.php

$naparsovanaURL je prazdna preto priradime pole
$naparsovanaURL = array('pacman-remake');

a pokracuje

$mc = new ManazerClanku();
        if ($mc->clanekExistuje($naparsovanaURL[0]))
                $this->kontroler = new ClanekKontroler($naparsovanaURL[0]);

a tu som skoncil

public function clanekExistuje($url)
        {
                return DB::dotazJeden('SELECT COUNT(*) FROM `clanky` WHERE `url` = ?', array($url))[0];
        }

v premennej $url sa spravne nachadza string(13) "pacman-remake"
viete mi prosim poradit co tam moze byt zle, kedze v tabulke clanky sa tato url nachadza?

Dakujem

 
Nahoru Odpovědět 20.1.2013 22:16
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na thomeriuss
David Čápka:

Co je pod článkem ke stažení by mělo fungovat pod PHP 5.4, vždy jsem to zkoušel.

Nahoru Odpovědět 20.1.2013 22:22
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Pavel Vosyka
Člen
Avatar
Odpovídá na thomeriuss
Pavel Vosyka:

Pokud se nemýlím, tak takhle to funguje tak, jak sdraco původně zamýšlel i ve starších verzích:

public function clanekExistuje($url)
{
        $vysledek = (DB::dotazJeden('SELECT COUNT(*) FROM `clanky` WHERE `url` = ?', array($url)));
        return $vysledek[0];
}

a můžeš tady najít i Kitovo řešení, které je taky funkční.

Nahoru Odpovědět 20.1.2013 22:56
"nikdy nepiš nic 2x"
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

Nevím,pořád mě to nejde,ani to stažené...
pokaždý když zadám neexistující url tak mě to napíše tu chybu...zkoušel jsem i ty rady v komentářích,ale furt jsem na stejném bodě...php mám verzi 5.3.17 (endora.cz)

 
Nahoru Odpovědět 22.1.2013 17:18
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

Tak,ted jsem to zkoušel na php verzi 5.4.7 a pořád to samý
(zkoušel jsem i to stažený) a pořád to píše při neexistující stránce tyhle chyby:

Warning: array_intersect_key(): Argument #1 is not an array in C:\xampp\htdocs\kontrolery\ClanekKontroler.php on line 34

Warning: array_intersect_key(): Argument #1 is not an array in C:\xampp\htdocs\kontrolery\ClanekKontroler.php on line 38

//-- ZDE JE MENU --//

Warning: extract() expects parameter 1 to be array, null given in C:\xampp\htdocs\kontrolery\Kontroler.php on line 57

Warning: extract() expects parameter 1 to be array, null given in C:\xampp\htdocs\kontrolery\Kontroler.php on line 58

nechci vás tím nějak štvát,jde mě o funkčnost..aby to šlo :)
ty první 2 chyby (nad menu) mě jsou jasné,to je chyba způsobená tou druhou chybou pod tím menu,že to nemůže načíst článek..
(ten array_intersec­t_key() je hlavička stránky,že to nemůže načíst title apod..)
a pak to druhý,chybu to ukazuje přesně na tuhle funkci,konkterní chyby označím:

public function vypisPohled()
{
    if ($this->pohled)
    {
        **extract($this->osetri($this->data));**
        **extract($this->data, EXTR_PREFIX_ALL, "");**
        require("pohledy/" . $this->pohled . ".phtml");
    }
}
 
Nahoru Odpovědět 22.1.2013 20:25
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

Zítra se na to podívám.

Nahoru Odpovědět 22.1.2013 22:26
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na kamil.kotek
Kit:

Je lepší doplnit wrapper o metodu, která vrací jen jednu hodnotu z požadovaného řádku a sloupce tabulky. Bude to kompatibilní se staršími verzemi a bude to i rychlejší.

Nahoru Odpovědět 23.1.2013 8:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

sdraco - Dobře,budu čekat...
Kit - no,však v tom wrapperu je funkce která vrací jen jednu hodnotu ne?vrátí první řádek,já bych tam možná dal podmínku,že pokud neexistuje daný článek,tak to vypíše chybu s neexistujícím obsahem..ale zas to nebude ono..uvidím jak to vyřeší sdraco ,pak podle toho to nějak udělám.

 
Nahoru Odpovědět 23.1.2013 14:11
Avatar
Kit
Redaktor
Avatar
Odpovídá na kamil.kotek
Kit:

Napsal jsem to sem 02.01.2013 21:58. Tak si to vyhledej.

Nahoru Odpovědět 23.1.2013 14:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na Kit
kamil.kotek:

Jo takhle jsi to myslel,no ale jak jsem nahoře psal, (22.01.2013 20:25)
tak to taktéž nefunguje,pořád to píše array null

Warning: extract() expects parameter 1 to be array, null given in C:\xampp\htdocs\kontrolery\Kontroler.php on line 57

Warning: extract() expects parameter 1 to be array, null given in C:\xampp\htdocs\kontrolery\Kontroler.php on line 58
 
Nahoru Odpovědět 23.1.2013 14:41
Avatar
Kit
Redaktor
Avatar
Odpovídá na kamil.kotek
Kit:

Protože pak už se nevrací pole, ale jen jedna hodnota, kterou není třeba rozbalovat.

Nahoru Odpovědět 23.1.2013 16:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

Máš pravdu, dělá to v případě, když se zadá neexistující URL a explicitně se v URL uvede kontroler Clanek. Časem se na to podívám, teď to ale nevidím akutní, když se "clanek" do URL nepíše.

Nahoru Odpovědět 23.1.2013 17:02
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na Kit
kamil.kotek:

A tak jak to spravit? :) mě osobně nenapadá zrovna hodně nápadů jak to udělat..zkoušel jsem tu pár věcí,ale pořád ta samá chyba...
možná to opravdu pujde jen s podmínkou,ve funkci clanekExistuje ?

 
Nahoru Odpovědět 23.1.2013 17:05
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

A proč ti to vadí? Na článek odkazuješ jako domena.cz/nazev-clanku. Parametr clanek se v URL nevyskytuje. Kdybys to chtěl opravit, stačí dát podmínku zda název kontroleru není Clanek tam, kde se název sestavuje. Články jsou psané tak, že je tam vše vysvětleno a neměl by být problém kód upravit.

Editováno 23.1.2013 17:09
Nahoru Odpovědět 23.1.2013 17:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

no..i když je pravda že to jakoby nevadí,ale nebylo by špatné udělat že pokud článek neexistuje tak to odkáže na 404...

Editováno 23.1.2013 17:16
 
Nahoru Odpovědět 23.1.2013 17:14
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

Určitě to opravím až seriál dopíšu a budu dělat revizi, ale nepřijde mi to teď důležité. Jak jsem psal, stačí si zjistit, zda se nehledá ClanekKontroler a případně přesměrovat na 404.

Nahoru Odpovědět 23.1.2013 17:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

Dobře,tak zatím si to provizorně udělám podle sebe..aby to odkazovalo na 404 při neexistující stránce..
jinač,ještě se chci zeptat,kdy asi tak uděláš další tutorial?.. :)

 
Nahoru Odpovědět 23.1.2013 19:27
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na David Čápka
kamil.kotek:

Ještě se chci zeptat..zkoumal jsem,ale tak trochu nedokoumal..
jak udělat,když si chci udělat novou stránku s loginem?
myslím tím,že nechci nahrávat článek přes db,ale vytvořit novou stránku,a v ní si udělat formulář pro přihlášení popř registraci?
ten modul není problém,ani kontroler,ale jak to nastavit v směrovač kontroler aby třeba po zadání adresy /login to přesměrovalo na tu stránku loginkontroler místo čtení z db?

 
Nahoru Odpovědět 24.1.2013 17:37
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

Pokud jsi články četl, tak bys to měl vědět :)

Nahoru Odpovědět 24.1.2013 17:52
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na David Čápka
kamil.kotek:

JoJo..už to vím..jen mě to nejdřív nedošlo jak to funguje,ted jsem na to přišel :D jinač,kdy asi tak bude další tut? :)

 
Nahoru Odpovědět 24.1.2013 17:55
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na David Čápka
kamil.kotek:

A ještě jedna otázka...kontroler načte jakoby obsah loginu,(tedy formulář)
co mám dát jako akce v tom formuláři?pujde to do modulu a tam se vykoná přihlášení nebo se přihlášení vykoná už přímo v kontroleru?podle všeho by to mělo jít do modulu,kde se vykoná přihlášení...ale jak dát teda action?na jakou stránku?bude normálně stačit # nebo nějaká konkrétní adresa?

 
Nahoru Odpovědět 24.1.2013 19:27
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na David Čápka
kamil.kotek:

Tak už nic...já vždy něco napíšu,a pak hned na to příjdu :D
takže už to mám..jen se mě smaže session,když jdu v menu znova do loginu,ale to nějak vyřeším..
jinač,ještě jsi mě neodpověděl jak to budeš řešit to přihlášením..na jakým systemu..myslím tím jestli session nebo cookie..nebo něco jiného?..
já jen abych si udělal obrázek co je lepší..(pro mě jako pro amaterskýho programátera je lepší asi session,líp se mě sním pracuje)
Díky za odpověd

 
Nahoru Odpovědět 24.1.2013 19:50
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
Drahomír Hanák:

K tomu přihlášení: Já to mám třeba rozdělené na ověření a samotné přihlášení (zapsání session, nastavení expirace přihlášení, přesměrování). To ověření mám v modelu, který v případě neúspěchu vyhodí výjimku, kterou pak zachytím v kontrolleru a podle toho se rozhodnu, co dál. Pokud se přihlášení povede, vrátí mi model pole s daty přihlášeného uživatele.

A asi jsi chtěl napsat "modelu" místo "modulu". Neber to jako rýpání, ale jsou to odlišné věci :P

 
Nahoru Odpovědět 24.1.2013 19:54
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:

jo..jasně:D sorry...pletu si to.. :)
jinač..jak nastavuješ expiraci sessionu? já to doted dělal klasickou podmínkou s časem..že si zapisuju čas do sessionu a třeba po 30min po neaktivitě ho to smaže...
ale zase je to nevýhoda když se dělá online status...pokud uzavře stránku aniž by se odhlásil,tak ho to vidí pořád jako online...(online status zapisuju do db,po přihlášení se z 0 změní na 1,a po odhlášení naopak)
kdyby byl hosting,tak tam dám jednoduše cron kterej mě bude zpouštět každých 10min script kterej kontroluje časy uživatelu,pokud třeba po hodině se čas nezmění tak ho to přepne do offline..ale takhle to bohužel bez cronu nejde.. (teda aspon neznám způsob)

Editováno 24.1.2013 20:12
 
Nahoru Odpovědět 24.1.2013 20:12
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
Drahomír Hanák:

Můžeš si zapisovat třeba čas poslední aktivity a když bude větší třeba jak 10 minut, systém ho bude brát jako offline. Ale tyhle statusy většinou nejsou ve webových aplikacích potřeba.

O session se mi stará framework, takže to už vůbec nemusím řešit :) Jde to nastavit pomocí php.ini Vlastnost session.gc_max­lifetime (http://uk3.php.net/…guration.php#…)

 
Nahoru Odpovědět 24.1.2013 20:37
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na kamil.kotek
David Čápka:

Něco podobného budeme teď na devbooku řešit AJAXem. S dalšími díly příliš nespěchám, to nejdůležitější je zde popsané a funkční.

Nahoru Odpovědět 24.1.2013 20:54
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 30 zpráv z 30.