Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

Ahoj.
Snažím se z db pomocí MVC vytáhnout data a dělá to neplechu. Vlastně to dělá špatné věci už při zadávání do pole.

public function vratInzerat($parametry)
        {
                $res= Db::dotazVsechny('
                        SELECT titulek
                        FROM `inzeraty`

                        WHERE upresneni=?
    ',array($parametry[1]));

               echo($res);

        }

Když si vyechuju $res, tak to vypíše toto: Arraynakladni_au­tomobilyArray

Jak se tam vzalo to Array okolo a jak se toho zbavím? Vím že když dám dotazJeden tak to funguje správně, jenže já nebudu ve výsledku chtít tahat jen SELECT titulek ale vlastně SELECT *

Jak z toho ven?

 
Odpovědět  ±0 21.4.2015 20:55
Avatar
pivovary
Člen
Avatar
Odpovídá na Michal Kuba
pivovary:

Pokud mas jen jeden inzerat tak dotazJeden, pokud vsechny tak dotazVsechny
ve vsech techto pripadech to bude array. $res["pozadova­ny_sloupec"]
Pokud chces jen jeden sloupec tak je tam k tomu dotazSamotny a ten ti array vracet nebude.

 
Nahoru Odpovědět 21.4.2015 21:09
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

Vypisuj si to přes

print_r()

, umí i pole, takže tomu výstupu lépe porozumíš.

Nahoru Odpovědět 21.4.2015 21:15
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Michal Kuba
Fredep:

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
Editováno 21.4.2015 21:27
Nahoru Odpovědět 21.4.2015 21:26
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

Když si vypíšu

print_r($res)

tak to vypíše na stránce

Array () Array ()
 
Nahoru Odpovědět 21.4.2015 21:37
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Fredep
Michal Kuba:

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

 
Nahoru Odpovědět 21.4.2015 21:39
Avatar
pivovary
Člen
Avatar
Odpovídá na Michal Kuba
pivovary:

tak tam asi špatně předáváš paremetry že ti to nic nevypíše

print_r($parametry);
 
Nahoru Odpovědět 21.4.2015 21:42
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

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?

 
Nahoru Odpovědět 21.4.2015 21:44
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Fredep
Michal Kuba:

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

 
Nahoru Odpovědět 21.4.2015 21:49
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Kuba
Michal Kuba:

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 :)

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět 21.4.2015 21:57
Avatar
pivovary
Člen
Avatar
Odpovídá na Michal Kuba
pivovary:

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
 
Nahoru Odpovědět 21.4.2015 22:02
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

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é)

 
Nahoru Odpovědět 21.4.2015 22:11
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

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..

 
Nahoru Odpovědět 21.4.2015 22:12
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

A ten druhý titulek je v jiném řádku??

Editováno 21.4.2015 23:10
Nahoru Odpovědět 21.4.2015 23:10
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

Jo, má to být titulek dalšího inzerátu a ten je uložen do dalšího řádku.

 
Nahoru Odpovědět 22.4.2015 13:43
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

A když změníš [0] na [1], funguje to??

Nahoru Odpovědět 22.4.2015 13:51
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
pivovary
Člen
Avatar
Odpovídá na Michal Kuba
pivovary:

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;
 
Nahoru Odpovědět 22.4.2015 15:04
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

jo, budu tam muset udělat foreach, jak budu mít čas :) To zkopíruju částečně starší verzi webu :)

 
Nahoru Odpovědět 22.4.2015 15:17
Avatar
pivovary
Člen
Avatar
Odpovídá na pivovary
pivovary:

jeste edit musi to tam by takhle

$this->data['titulky']=$dataKategorie;
 
Nahoru Odpovědět  -1 22.4.2015 15:23
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

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..

 
Nahoru Odpovědět 22.4.2015 21:50
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Michal Kuba
IT Man:

Vypisuj si postupně ty obsahy proměnných [pomocí print_r()] a takhle se dostaň až k výsledku. :)

Nahoru Odpovědět 22.4.2015 22:01
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na IT Man
Michal Kuba:

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í?

 
Nahoru Odpovědět 22.4.2015 22:08
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

Když už to máš přes : a endx;, udělej to, jak se má.

<?php foreach ($titulky as $titulek): ?>
 <h2><?= $titulek ?></h2>
<?php endforeach; ?>
Nahoru Odpovědět 22.4.2015 22:09
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

To ti dělá ten

foreach()

. Vypisuje od 0 dokud to je možné.

Nahoru Odpovědět 22.4.2015 22:12
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

tak proč to stále nefunguje? :/

 
Nahoru Odpovědět 22.4.2015 22:13
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

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..

 
Nahoru Odpovědět 22.4.2015 22:14
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

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]);
Editováno 22.4.2015 22:18
Nahoru Odpovědět 22.4.2015 22:17
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

Tak musíš někde ty data špatně přenášet.

Nahoru Odpovědět 22.4.2015 22:18
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

jo, když si to vypíšu ručně, tak se všechny vypíší jak požaduji..

 
Nahoru Odpovědět 22.4.2015 22:18
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

Někde jsou data v jiné proměnné nebo něco takového.
Zkus si to ještě přejet.

Editováno 22.4.2015 22:22
Nahoru Odpovědět 22.4.2015 22:21
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

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()

 
Nahoru Odpovědět 22.4.2015 22:22
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

Je to možné nebo v předání dat mezi soubory. Nesleduji zcela celou diskuzi, tak nevím. :D

Nahoru Odpovědět 22.4.2015 22:24
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
pivovary
Člen
Avatar
pivovary:

Píšu už z mobilu nebude to asi kompletní ale na to prijdes

$this->data[titulky] = $dataKategorie;

Foreach ($titulky as $titulek)
$titulek[titulek]
Endfireach;
Editováno 22.4.2015 22:40
 
Nahoru Odpovědět 22.4.2015 22:36
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

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 :)

 
Nahoru Odpovědět 22.4.2015 22:44
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na pivovary
Michal Kuba:

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á?

 
Nahoru Odpovědět 22.4.2015 22:48
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Michal Kuba
IT Man:

Vypisuj si to spíš takhle. :)

print_r($datakategorie);
Nahoru Odpovědět 23.4.2015 6:27
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na IT Man
Michal Kuba:

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..

 
Nahoru Odpovědět 23.4.2015 10:08
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Kuba
Michal Kuba:

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. :)

 
Nahoru Odpovědět 23.4.2015 10:18
Avatar
pivovary
Člen
Avatar
Odpovídá na Michal Kuba
pivovary:

dotazJeden ti vypise pouze jeden daný výsledek, takže se k požadované hodnotě dá přístupovat přímo $dataKategori­e["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 $dataKategori­e[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í.

 
Nahoru Odpovědět 23.4.2015 16:05
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 39 zpráv z 39.