Diskuze: Foreach - prosím o radu
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 26 zpráv z 26.
//= 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.
Nemá náhodou být místo
file_exists($vsechnyproduktyarray[$pocitadloproduktyall])
spis
file_exists($value)
Můžeš ukázat script který zkoušíš, protože z tohoto skriptu nechápu co je konkrétně např. v tom array.
Nicméně napadlo mě ještě, že to můžeš zkusit takhle, pokud ten file existuje ale php píše, že ne.
file_exists(realpath($value))
Problém je, že to funguje jen do první poloviny. Vypíše to, že soubor existuje, je schopen i vypsat cokoli ale jakmile se má pustit do druhé podmínky tak má problém.
<?php
foreach ($vsechnyproduktyarray as $products) {
if(file_exists($products))
{
ob_start(); include ($vsechnyproduktyarray[$pocitadloproduktyall]); ob_end_clean();
}
else
{
continue;
}
if(strpos($druhproduktu, "granule") )
{
include ($viewkategorie); ++$pocitadloproduktyall;
}
else
{
echo "";
}
}
?>
Toto má zkontrolovat jestli existuje soubor, který je v
$vsechnyproduktyarray
.
Toto má pochopitelně říct pořadí.
[$pocitadloproduktyall]
Nejprve je tam 0. Jakmile je první podmínka splněna tak má zkontrolovat jestli je otevřený soubor ve správné kategorii.
strpos($druhproduktu, "granule")
(zkusil jsem i
$idkategorie == $kategorie
a nefungovalo). Dokonce jsem zkusil natvrdo napsat přímo číslo kategorie
a stejně nic.
Když souhlasí ID kategorie, tak má includovat soubor, který v sobě nese
HTML (layout, který nastyluje výpis produktu) a zároveň incrementovat
++$pocitadloproduktyall
Už nějak nevím jak na toto jít. Fungovalo mi to u jiné stránky a teď
mi to nějak nefunguje. Nevím proč. Vzal jsem stejný script, který mi jinde
funguje a jen jsem změnil $ a stejně nic.
Existuje ještě nějaký lepší způsob? Kromě MySQL. S MySQL jsem se zatím
moc dobře nenaučil, takže ho nebudu používat zatím.
Věděl by jsi prosím ještě o nějakém řešení?
Děkuji ti moc
Používat MySQL (nebo jinou databázi tohoto směru) by nebylo úplně od věci, nicméně teď tu řešíme něco jiného.
Jak vypadá soubor, z něhož čteš? A nech si vypsat hodnoty proměnných které používáš:
// Klasicky:
var_dump($promenna);
Jsou v nich očekávané hodnoty?
Jo to je fakt, že MySQL by to hodně usnadnilo. Ale raději se ho pořádně
naučím a pak s ním budu pracovat. Přeci jen je to trochu složitější a
rizikovější.
Každopádně jak jsem psal. Adresa k produktu je zcela správně.
Zkusil jsem vzít stejnou proměnnou a jen ji otevřít. Problém nebyl.
Mám někde chybu v cyklu.
Něco tam mám špatně. A nějak nevím co. No tak jsem to prozatím vyřešil
tak, že to nebude zacyklené. Sice se to bude načítat o trochu déle ale bude
se vše zobrazovat.
Kažopádně díky všem za snahu
napis aspon co to hlasi za chybu a zkopiruj sem ten php soubor nebo metodu ve ktere je ten cyklus.:)
Naopak bych řekl, že je to jednodušší i bezpečnější než ta magie se souborama
Na jednu stranu ano ale pak je tady SQL inject a hlavne se mi nedari (v testovaci verzi) zobrazit ani konkretni obsak po kliknuti na link. Celkem sranda
Takže když si necháš obsah proměnné v tom cyklu vypsat, dostaneš správnou hodnotu? Zkus si ještě hodnotu proměnné vypsat na těchto místech:
foreach ($vsechnyproduktyarray as $products) {
if(file_exists($products))
{
ob_start(); include ($vsechnyproduktyarray[$pocitadloproduktyall]); ob_end_clean();
// Tady
var_dump($druhproduktu);
}
else
{
continue;
}
// A tady
var_dump($druhproduktu);
if(strpos($druhproduktu, "granule") )
{
include ($viewkategorie); ++$pocitadloproduktyall;
}
else
{
echo "";
}
}
Máš alespoň v jednom výstupu hodnotu "granule", kterou očekáváš?
S SQL injection si nedělej starosti, stačí používat PDO nebo MySQLi a dodržovat určité zásady. Jedná se vlastně jen o to, že nesmíš dosazovat proměnné do dotazu přímo, ale přes nějaké zástupné znaky (PDO to řeší přes otazníky, MySQLi nejspíše také). Před vložením si proměnnou zpracují a ošetří ji proti SQL injection, až poté ji vloží do dotazu.
Přečti si nějaké články tady na ITNetwork, není to nic složitého.
Zkusim to jak sednu k pocitaci. Diky za rady.
Ja neumim programovat objektove. Zkousel jsem to pochopit. Ale k tomu se musim
postupne propracovat.
To nevadí, máme tady zdejší wrapper, který PDO obalí a můžeš ho používat i neobjektově. Jmenuje se Db.php a nechá se stáhnout tady.
Moc dekuji. Toho jsem si vsimnul. Nicmene k tomu abych to pouzival potrebuji alespon trochu vedet co a jak. Uznavam ze objektovy programovani je snazsi ale nejprve to musim pochopit
To kazdopadne. Videl jsem jak je to delane a je to opravdu pekne delane. Jen
si to musim procist vicekrat abych to pochopil.
Vsechny ty serialy jsou dobre delane. To jako zakladateli klobouk dolu.
To je sice pravda, ale to za tebe třeba PDO řeší samo.
Tak jen pro info.
Už jsem přišel na to kde mám chybu.
Zapomel jsem na inkrementaci kdyz v danem souboru nesouhlasi ID kategorie.
I kdyz nesouhlasi tak to neznamena, ze se musi script prerusit. A takhle kdyz
nesouhlasi ID i jakehokoli produktu, tak se vse zastavi, protoze se cely cyklus
toci porad dokola.
Hlupak jsem
Takhle to ma vypadat.
<?php
$idkategorie = "1";
?>
<?php
foreach ($vsechnyproduktyarray as $value) {
if(file_exists($vsechnyproduktyarray[$pocitadloproduktyall]))
{
ob_start(); include ($vsechnyproduktyarray[$pocitadloproduktyall]); ob_end_clean();
}
else
{
continue;
}
if($idkategorie == $kategorieid)
{
include ($viewkategorie); ++$pocitadloproduktyall;
}
else
{
++$pocitadloproduktyall;
}
}
?>
Pokud v tom někdo vidí ještě chybu tak se rád poučím. Každopádně děkuji za rady
No kazdopadne to vypada, ze by jsi se mel jeste mrknout do dokumentace jak se pouziva foreach cyklus. Uplne zbytecne se odkazujes pres nejakej countern na prvek pole. Takhle by se dejme tomu delalo kdybys mel for cyklus a ne foreach.
Jo to je možné, že to používám jinak. Ale mě momentálně "jako
amatérovy" postačí, že to funguje.
Jsem rád za to, že jsem se něco naučil a funguje mi to.
Jak je libo . Ja jen, ze je dobry od zacatku se ty veci naucit spravne pouzivat, usetri to spoustu casu a chyb . Ale jak je libo
Zobrazeno 26 zpráv z 26.