Diskuze: Zvláštní pole - MVC
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 39 zpráv z 39.
//= 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.
Pokud mas jen jeden inzerat tak dotazJeden, pokud vsechny tak
dotazVsechny
ve vsech techto pripadech to bude array. $res["pozadovany_sloupec"]
Pokud chces jen jeden sloupec tak je tam k tomu dotazSamotny a ten ti array
vracet nebude.
Vypisuj si to přes
print_r()
, umí i pole, takže tomu výstupu lépe porozumíš.
Nezapomeň, že i když z databáze vytahuješ jen jednu hodnotu, tak je to stále ve formě pole. Pokud použiješ dodazJeden, tak se ti vrátí pole se sloupci, proto, když chceš vytáhnout hodnotu z určitého sloupce, musíš s tím pracovat jako s polem, tedy
echo ($res['titulek']); // Popř. echo ($res[0]);
Pokud bys použil funkci dotazVsechny, tak se ti vrátí multidimenzionální pole, tedy pole, které obsahje řádky i sloupce. Pokud tedy budeš chtít z nultého (=první) řádku získat sloupec, opět s tím pracuj jako s polem, tedy
echo ($res[0]['titulek']); // Z nultého řádku sloupec titulek
pokud bys to chtěl rozepsat, tak to bude
$radek = $res[0]; // Vybral jsem z pole první řádek
echo ($radek['titulek']); // Z tohoto řádku chci titulek
Když si vypíšu
print_r($res)
tak to vypíše na stránce
Array () Array ()
To rozepisování přes echo mi vůbec nefunguje, už ani nevím jak jsem pořádně docílil toho vypsání zadaného parametru obaleného slůvky Array
tak tam asi špatně předáváš paremetry že ti to nic nevypíše
print_r($parametry);
no v $parametry předávám část url a to tu, která znázornuje
podkategorii (osobni_auta, dodavky, brigady,..)
když si na dané podstránce vypíšu $parametry, píše to právě tu
podkategorii, na jejíž stránce jsem.. tam by neměla být chyba ne?
našel jsem částečně chybu! já do toho dotazu zadával $parametry[1], předtím mi to nějak vypsalo, že to je ta podkategorie jenže ve skutečnosti to bylo jedno písmeno (automobily - a, motorky - m,...). teď jsem si vypsal to pole a vypisuje to ty správné informace.. jen mi to teď nejde předat do kontroleru a následně do pohledu..
kontroler vypadá takhle:
public function zpracuj($parametry){
$spravceInzeratu = new SpravceInzeratu();
$spravceUzivatelu = new SpravceUzivatelu();
$uzivatel = $spravceUzivatelu->vratUzivatele();
$url = $parametry[0] . '/' . $parametry[1];
$this->data['admin'] = $uzivatel && $uzivatel['admin'];
$nazevKategorie=$spravceInzeratu->upresniInzeraty($url);
$dataKategorie=$spravceInzeratu->vratInzerat($parametry[1]);
$this->data['jmeno'] =$nazevKategorie[0];
$this->data['nadjmeno'] =$nazevKategorie[1];
$this->data['titulek']=$dataKategorie[3];
při vypsání toho výsledku z dotazu my vyšlo, že titulek, který chci vypsat je také pod indexem 3
tak a vypadá to hotově.. musel jsem v modelu ještě udělat
return $ress //pojmenoval jsem to ress, $res už mám u jiné metody (pro jistotu)
a v kontroleru jsem vypsal do závore hranatých 0 a 3, jelikož data pro mě důležitá jsou v nultém Array.. děkuju za rady, nějak jsem to splácal dohromady a funguje to
Akorát jen upusti od používání těch indexů v poli, jednou se vrhneš na jiný projekt potom půjdeš sem něco upravit a zjistíš že už nevíš co je co.
$this->data["jmeno"] = $nazevKategorie["jmeno"]; // misto jmeno u nazev kategorie musi byt nazev sloupce ze ktereho to tahas z db
Jo, upustit od indexů musím, ale třeba u toho vypisování titulku musím částečně zůstat, když nenapíšu
$this->data['titulek']=$dataKategorie[0]["titulek"];
ale
$this->data['titulek']=$dataKategorie["titulek"];
tak to nic nevypíše, prostě musím nejdřív označit to první pole (tady nulté)
Jen mi je záhadou, proč se mi zvládne vypsat jen jeden titulek, když mám v db dva, který odpovídají výsledku dotazu - teprve když vymažu ten co se zobrazuje, tak se zobrazí další.. vím že to bude někde v tom, že asi nemám určené, že se jich může vypsat více..
A ten druhý titulek je v jiném řádku??
Jo, má to být titulek dalšího inzerátu a ten je uložen do dalšího řádku.
Pokud jsem to spravne pochopopil, tak mas inzaraty vyctene podle kategorie a upresneni a na te strance jejich seznam. Tim padem musis udelat
$this->data['titulky']=$dataKategorie["titulek"];
a potom v pohledu si udelas
foreach ($titulky as $titulek) :
<h2><?= $titulek; ?></h2> <!-- H2 pouze priklad to uz si dosad do pozadovaneho tagu napr. <a href="#">Odkaz na inzerat</a> -->
endforeach;
jo, budu tam muset udělat foreach, jak budu mít čas To zkopíruju částečně starší verzi webu
jeste edit musi to tam by takhle
$this->data['titulky']=$dataKategorie;
Tak teda nevím, proč to nefugnuje..když si jen vypíši to, co vrátí db, tak to jsou asi tři pole pro tři záznamy odpovídající dané kategorii.
ale nefunguje to.. kontroler:
$nazevKategorie=$spravceInzeratu->upresniInzeraty($url);
$dataKategorie=$spravceInzeratu->vratInzerat($parametry[1]);
$this->data['jmeno'] =$nazevKategorie["jmeno"];
$this->data['nadjmeno'] =$nazevKategorie['kategorie'];
$this->data['titulky']=$dataKategorie["titulek"];
a šablona:
<?php foreach ($titulky as $titulek) :
echo('<h2>'. $titulek.'</h2>');
endforeach; ?>
nevypíše to vůbec nic..
Vypisuj si postupně ty obsahy proměnných [pomocí print_r()] a takhle se dostaň až k výsledku.
když dám
print_r($dataKategorie[1][3]);
tak to vypíše titulek z druhého pole.. jak mám to první číslo nahradit, aby to vypisovalo titulek (3) ale ze všech polí?
Když už to máš přes : a endx;, udělej to, jak se má.
<?php foreach ($titulky as $titulek): ?>
<h2><?= $titulek ?></h2>
<?php endforeach; ?>
To ti dělá ten
foreach()
. Vypisuje od 0 dokud to je možné.
když si zobrazím celé pole, které vytáhne dotaz tak tam jsou například tři pole (3 inzeráty). no jenže to nic nevypisuje..
Manuálně to funguje u všech?? Když si ty čísla dopíšeš sám.
print_r($dataKategorie[0][3]);
echo "<br />";
print_r($dataKategorie[1][3]);
jo, když si to vypíšu ručně, tak se všechny vypíší jak požaduji..
Někde jsou data v jiné proměnné nebo něco takového.
Zkus si to ještě přejet.
tak musím asi snažit se najít nějakou drobnost nebo tak, ale když už v kontroleru mi to vypisuje to správně vytažené pole z db, tak bude asi někde chyba v tom foreach()
Je to možné nebo v předání dat mezi soubory. Nesleduji zcela celou diskuzi, tak nevím.
taky se tomu nějak nechce.. zkusím si dát od toho pauzu a mrknout na to jindy, to bude nejlepší asi ale díky za rady ,všem
hej tak nakonec dobrý, takhle to funguje
Jen teda asi úplně nechápu celou logiku, proč to musím vypisovat až tam a ne nikde dřív? to se potom špatně předá?
Vypisuj si to spíš takhle.
print_r($datakategorie);
to už funguje, titulky mi to vypíše jak má.. když to ale předělám,
aby to vypisovalo i další věci, tak to nic nevypíše..
kontroler:
$nazevKategorie=$spravceInzeratu->upresniInzeraty($url);
$dataKategorie=$spravceInzeratu->vratInzerat($parametry[1]);
$this->data['jmeno'] =$nazevKategorie["jmeno"];
$this->data['nadjmeno'] =$nazevKategorie['kategorie'];
if (!empty($dataKategorie))
{
$this->data['inzeraty'] = $dataKategorie;
}
else $this->pridejZpravu('Nebyl vložen žádný inzerát!');
a pohled:
<?php foreach ($inzeraty as $inzerat): ?><section>
<h3><?= $inzerat['titulek'] ?></h3>
</section><?php endforeach; ?>
dále chci přidávat $inzerat['obsah'] atd, proto jsem to změnil na foreach inzeraty as inzerat..
nemám tam opět nějaký překlep nebo chybu v předávání? ani když mám v kodu pouze $inzerat['titulek'] tak už to titulek nevypíše.. ale v dataKategorie je, zkoušel jsem si to vypsat po jednotlivých polích..
už je to v pohodě, trošku jsem si pohrál s proměnnými a už to funguje.. $dataKategorie jsem přejmenoval na $inzeraty a smazal z konce kódu jakousi definici $inzerat a přiřazení titulku z nultého pole, asi kvůli tomu to nevypisovalo.
dotazJeden ti vypise pouze jeden daný výsledek, takže se k požadované hodnotě dá přístupovat přímo $dataKategorie["titulek"], pokud budeš mít dotazVse tak ti vypíše všechny řádky které požaduješ proto tam ještě přibude ten index který značí řádek $dataKategorie[0]["titulek"] tak máš titulek prvního výsledku, pokud je chceš vypsat všechny tak to hodiš celé pohledu a v něm si to zpracuješ zpravidla pomocí foreach. Pro lepší pochopení si sestav dané dotazy někde v controleru a pak si je pomocí
echo "<pre>";
print_r($vysledek);
echo "</pre>";
povypisuj a uvidíš jak se vlastně chovají.
Zobrazeno 39 zpráv z 39.