NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:21.4.2015 20:55

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
21.4.2015 20:55
Avatar
pivovary
Člen
Avatar
Odpovídá na Michal Kuba
pivovary:21.4.2015 21:09

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:21.4.2015 21:15

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
Odpovídá na Michal Kuba
Neaktivní uživatel:21.4.2015 21:26

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
Neaktivní uživatelský účet
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Michal Kuba:21.4.2015 21:37

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
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Michal Kuba:21.4.2015 21:39

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:21.4.2015 21:42

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
Tvůrce
Avatar
Odpovídá na pivovary
Michal Kuba:21.4.2015 21:44

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
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Michal Kuba:21.4.2015 21:49

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
Tvůrce
Avatar
Odpovídá na Michal Kuba
Michal Kuba:21.4.2015 21:57

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:21.4.2015 22:02

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
Tvůrce
Avatar
Odpovídá na pivovary
Michal Kuba:21.4.2015 22:11

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
Tvůrce
Avatar
Odpovídá na pivovary
Michal Kuba:21.4.2015 22:12

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:21.4.2015 23:10

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
Tvůrce
Avatar
Michal Kuba:22.4.2015 13:43

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:22.4.2015 13:51

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:22.4.2015 15:04

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
Tvůrce
Avatar
Odpovídá na pivovary
Michal Kuba:22.4.2015 15:17

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:22.4.2015 15:23

jeste edit musi to tam by takhle

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

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
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Michal Kuba
Jan Lupčík:22.4.2015 22:01

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
TruckersMP vývojář
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Jan Lupčík
Michal Kuba:22.4.2015 22:08

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:22.4.2015 22:09

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:22.4.2015 22:12

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
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Michal Kuba:22.4.2015 22:13

tak proč to stále nefunguje? :/

 
Nahoru Odpovědět
22.4.2015 22:13
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Michal Kuba:22.4.2015 22:14

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:22.4.2015 22:17

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:22.4.2015 22:18

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
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Michal Kuba:22.4.2015 22:18

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:22.4.2015 22:21

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
Tvůrce
Avatar
Odpovídá na Michal Šmahel
Michal Kuba:22.4.2015 22:22

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:22.4.2015 22:24

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:22.4.2015 22:36

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
Tvůrce
Avatar
Odpovídá na pivovary
Michal Kuba:22.4.2015 22:44

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
Tvůrce
Avatar
Odpovídá na pivovary
Michal Kuba:22.4.2015 22:48

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
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Michal Kuba
Jan Lupčík:23.4.2015 6:27

Vypisuj si to spíš takhle. :)

print_r($datakategorie);
Nahoru Odpovědět
23.4.2015 6:27
TruckersMP vývojář
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Jan Lupčík
Michal Kuba:23.4.2015 10:08

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
Tvůrce
Avatar
Odpovídá na Michal Kuba
Michal Kuba:23.4.2015 10:18

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:23.4.2015 16:05

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.