Diskuze: Warning: array_intersect_key
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 30 zpráv z 30.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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
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..
Třeba když dám adresu www.domena.cz/clanek/clanek3
tak to napíše ty chyby no..
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:
SmerovacKontroler.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
Co je pod článkem ke stažení by mělo fungovat pod PHP 5.4, vždy jsem to zkoušel.
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í.
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)
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_intersect_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");
}
}
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ší.
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.
Napsal jsem to sem 02.01.2013 21:58. Tak si to vyhledej.
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
Protože pak už se nevrací pole, ale jen jedna hodnota, kterou není třeba rozbalovat.
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.
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 ?
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.
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...
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.
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?..
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?
JoJo..už to vím..jen mě to nejdřív nedošlo jak to funguje,ted jsem na
to přišel jinač,kdy asi
tak bude další tut?
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?
Tak už nic...já vždy něco napíšu,a pak hned na to příjdu
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
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
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)
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_maxlifetime (http://uk3.php.net/…guration.php#…)
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í.
Zobrazeno 30 zpráv z 30.