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
kamil.kotek
Člen
Avatar
kamil.kotek:19.1.2013 10:05

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:19.1.2013 12:56

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
New kid back on the block with a R.I.P
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:19.1.2013 18:11

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:19.1.2013 18:16

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:20.1.2013 22:16

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 Hartinger
Vlastník
Avatar
Odpovídá na thomeriuss
David Hartinger:20.1.2013 22:22

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
New kid back on the block with a R.I.P
Avatar
Pavel Vosyka
Člen
Avatar
Odpovídá na thomeriuss
Pavel Vosyka:20.1.2013 22:56

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" (updated 10 years after: "Není nic špatného na tom napsat něco 2x")
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:22.1.2013 17:18

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:22.1.2013 20:25

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:22.1.2013 22:26

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

Nahoru Odpovědět
22.1.2013 22:26
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na kamil.kotek
Kit:23.1.2013 8:38

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:23.1.2013 14:11

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
Tvůrce
Avatar
Odpovídá na kamil.kotek
Kit:23.1.2013 14:27

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:23.1.2013 14:41

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
Tvůrce
Avatar
Odpovídá na kamil.kotek
Kit:23.1.2013 16:33

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:23.1.2013 17:02

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
New kid back on the block with a R.I.P
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na Kit
kamil.kotek:23.1.2013 17:05

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:23.1.2013 17:09

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
New kid back on the block with a R.I.P
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:23.1.2013 17:14

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:23.1.2013 17:19

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
New kid back on the block with a R.I.P
Avatar
kamil.kotek
Člen
Avatar
kamil.kotek:23.1.2013 19:27

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 Hartinger
kamil.kotek:24.1.2013 17:37

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:24.1.2013 17:52

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

Nahoru Odpovědět
24.1.2013 17:52
New kid back on the block with a R.I.P
Avatar
kamil.kotek
Člen
Avatar
Odpovídá na David Hartinger
kamil.kotek:24.1.2013 17:55

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 Hartinger
kamil.kotek:24.1.2013 19:27

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 Hartinger
kamil.kotek:24.1.2013 19:50

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
Odpovídá na kamil.kotek
Drahomír Hanák:24.1.2013 19:54

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:24.1.2013 20:12

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
Odpovídá na kamil.kotek
Drahomír Hanák:24.1.2013 20:37

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 Hartinger
Vlastník
Avatar
Odpovídá na kamil.kotek
David Hartinger:24.1.2013 20:54

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
New kid back on the block with a R.I.P
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.