Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde
Avatar
mat.masar
Člen
Avatar
mat.masar:28. září 22:28

Ahoj,
snažím se udělat podmínku, že pokud z naparsovane url adresy je članek, aby se použil ClanekKontroler a když je to stránka, aby se pouzil StrankyKontroler.

Zkusil jsem:

 public function zpracuj($parametry)
    {
                $naparsovanaURL = $this->parsujURL($parametry[0]);

                if(empty($naparsovanaURL[0]))
                        $this->presmeruj('clanek/uvod');
                // kontroler je 1. parametr URL
                $tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';

                if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                        $this->kontroler = new $tridaKontroleru;
                elseif (SpravceStranek::dotazNaStranku($naparsovanaURL)>0)
                        $this->kontroler = StrankyKontroler;
                else
                        $this->presmeruj('chyba');
                //Volání kontroleru
        $this->kontroler->zpracuj($naparsovanaURL);
}

kde: v třídě SpravceStranek je fce

public function dotazNaStranku($url)
{
        Db::dotaz('SELECT FROM `stranky` WHERE url = ?', array($url));
}

a v třidě db

public static function dotaz($dotaz, $parametry = array())
{
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->rowCount();
}

v tabulce "stranky" existuje zapis s url = onas.
Když zadám localhost/onas tak mi to háže chybu

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM stranky WHERE url = ?' at line 1 in C:\xampp\htdoc­s\Modely\Db.php:46 Stack trace: #0 C:\xampp\htdoc­s\Modely\Db.php(46): PDO->prepare('SELECT FROM `st...') #1 C:\xampp\htdoc­s\Modely\Sprav­ceStranek.php(41): Db::dotaz('SELECT FROM `st...', Array) #2 C:\xampp\htdoc­s\Kontrolery\Sme­rovacKontroler­.php(38): SpravceStranek::do­tazNaStranku(A­rray) #3 C:\xampp\htdoc­s\index.php(21): SmerovacKontroler->zpracuj(Array) #4 {main} thrown in C:\xampp\htdoc­s\Modely\Db.php on line 46

Chci docílit: Snažím se to postavit na základu RS dle zdejšího návodu.
Moc si nevím rady, tak jsem to chtěl aspoň něco vyzkoušet než psát rovnou dotaz sem :).
Díky za rady

 
Odpovědět 28. září 22:28
Avatar
Jakub Du
Člen
Avatar
Jakub Du:29. září 13:14
public function dotazNaStranku($url)
{
        Db::dotaz('SELECT FROM `stranky` WHERE url = ?', array($url));
}

Chybi ti tam, co chces vybrat. Zkus to takhle.

public function dotazNaStranku($url)
{
        Db::dotaz('SELECT * FROM `stranky` WHERE url = ?', array($url));
}
Editováno 29. září 13:15
 
Nahoru Odpovědět  +1 29. září 13:14
Avatar
mat.masar
Člen
Avatar
Odpovídá na Jakub Du
mat.masar:29. září 22:03

Ano už to neháže chybu, ale rovnou se to přesměruje na "chyba", z toho vyplývá, že to vyhodnotilo, že dotaz zda existuje stránka s daným url neexistuje, ale přitom ano. V čem je tedy chyba?

Edit: musím mít v souboru SmerovacKontroler (fce zpracuj)

$SpravceStranek = new SpravceStranek();

a potom

if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                        $this->kontroler = new $tridaKontroleru;
                elseif ($SpravceStranek->dotazNaStranku($naparsovanaURL)>0)
                        $this->kontroler = StrankyKontroler;
                else
                        $this->presmeruj('chyba');

Nebo jak to funguje? Toto je něco co mě hodně mate.

Editováno 29. září 22:05
 
Nahoru Odpovědět 29. září 22:03
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:30. září 0:26

Ahoj,
myslím, že tvoje metoda dotazNaStranku by měla něco vracet. Teď pouze něco volá, avšak její návratová hodnota je void. Stačí tedy přidat jen kouzelné slovíčko return a mělo by to fungovat. :)

Nahoru Odpovědět  +2 30. září 0:26
Cokoliv a kdokoliv může jednou uspět.
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:1. října 21:02

Ahoj, jsem moc vděčný za tvůj příspěvek, zase jsem se posunul o něco dál :-)

public function dotazNaStranku($url)
{
        Db::dotaz('SELECT * FROM `stranky` WHERE url = ?', array($url));
        return $url;
}

Nyní to vyhazuje jen, že probíhá konverze array na string v této fci

public static function dotaz($dotaz, $parametry = array())
{
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->rowCount();
}

Což ano je chyba, ale jelikož to zřejmě není tak závažné, tak bych to nechal na později.
Spíš mě teď trápí to, proč když zadám localhost/onas tak se mi vypíše seznam stránek(místo samotného článku) a je tam vypsaná stránka O nás (ze které vede odkaz na url onas) i se svým popiskem...když na ten odkaz kliknu tak se vlastně nic nestane, protože mě to hodí zpět na tuto stránku.

Nevím jestli to může být způsobené tou chybou konverze, ale je pro mě strašně divné, proč se pod url adresou onas vypišou všechny stránky(toto má nastat, pokud url adresa neexistuje(do budou to smažu a nahradím 404, ale pro teď je to dobrý pokrok)) a ne rovnou daná stránka.

Editováno 1. října 21:04
 
Nahoru Odpovědět 1. října 21:02
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:2. října 11:58

Ahoj,
je to závažné, vracíš jen URL. Zřejmě máš ve třídě Db i jiné metody, které by ti mohly něco vracet. Něco jako vyber ... nevím, jak to může být v češtině. :)
To použij místo dotazu a rovnou to vrať (tedy tu hodnotu, co ti vrátí daná metoda). Poté by to už mělo fungovat.

Nahoru Odpovědět 2. října 11:58
Cokoliv a kdokoliv může jednou uspět.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2. října 15:33

'Nyní to vyhazuje jen, že probíhá konverze array na string v této fci'
Chybova hlaska ti pise konkretni cislo radku.
Pres var_dump si vypis promenne. Obvykle to zapisuji:

var_dump('url=', $url); // vypise napr url=string(22) ht...

Kdyz mas tech dumpu v kodu vic a zapomenes nektery zakomentovat, tak se da vyhledat podle "var_dump('url=".

'zadám localhost/onas tak se mi vypíše seznam stránek(místo samotného článku)'
Pak mas nekde spatne logiku nebo se nenasla stranka.
Kazdopadne, Db::dotaz ti navraci rowCount(); misto dat. Takze z toho musis vycucat jeste nekde data.

echo Db::dotaz('SELECT * FROM `stranky` WHERE url = ?', array($url)); // ti vypise treba 0, 1 nebo 23.
 
Nahoru Odpovědět 2. října 15:33
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:3. října 19:34

Jestli jsem to tedy pochopil správně, tak to momentálně nic nedělá skrz toto?

Notice: Array to string conversion in C:\xampp\htdoc­s\Modely\Db.php on line 23

Db.php ->fce dotazJeden(změnil jsem to pouze z dotaz na dotazJeden)

public static function dotazJeden($dotaz, $parametry = array())
{
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->fetch();
}

Každopádně chyba je stále stejná.
Já jsem měl tento dotaz z důvodu zjištění, zda daná stránka existuje, proto jsem měl jenom dotaz na rowcount a porovnával jsem to s nulou.

$tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';
if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                        $this->kontroler = new $tridaKontroleru;
elseif (SpravceStranek::dotazNaStranku($naparsovanaURL)>0)
                        $this->kontroler = new StrankyKontroler();

Zjištoval jsem, zda daná stránka existuje, pokud ano tak kontroler = StrankyKontroler a ne StrankyKontro­ler(nebo resp. $tridaKontroler), abych zajistil, že to nepřejde na 404(chyba), ale přejde to na StrankyKontroler.

Kde jsem to chtěl zpracovat

if(!empty($parametry[0]))
                {

                //Získání stránky podle url
                $stranka = $spravceStranek->vratStranku($parametry[0]);

A myslel jsem si, že v $parametry[0] bude v tomto případě "onas".

public function vratStranku($url)
{
        return Db::dotazJeden('SELECT `stranka_id`, `titulek`, `obsah`, `url`, `popisek`, `klicova_slova` FROM `stranky` WHERE `url` = ? ', array($url));
}

A načte se tedy stránka onas.

Ta chyba s konverzí array na string je podle mě způsobena tím, že $naparsovanaUrl je string, protože:

public function zpracuj($parametry)
  {
              $naparsovanaURL = $this->parsujURL($parametry[0]);

              if(empty($naparsovanaURL[0]))
                      $this->presmeruj('clanek/uvod');
              // kontroler je 1. parametr URL
              $tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';

              if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                      $this->kontroler = new $tridaKontroleru;
              elseif (SpravceStranek::dotazNaStranku($naparsovanaURL)>0)
                      $this->kontroler = new StrankyKontroler();
              else
                      $this->presmeruj('chyba');
              //Volání kontroleru
      $this->kontroler->zpracuj($naparsovanaURL);

Peter Mlich napsal jsi víceméně to stejné.

Trošku bych se chtěl omluvit, že to tu natahuji, ale pořád mi to není jasné, kde vlastně dělám chybu. Myslel jsem si, že to bude banální....(jako pro Vás)

 
Nahoru Odpovědět 3. října 19:34
Avatar
IT Man
Redaktor
Avatar
Odpovídá na mat.masar
IT Man:3. října 20:55

Ahoj,
hlavně bych rád viděl celou tu chybu, zřejmě mi teď něco uniká, ale nevím, kde může být chyba. Můžeš nám poslat trochu ucelenější kód i přímo s řádkem, kde je ta chyba? :)
Taky si zjisti, jestli ti vratStranku($url) vrací opravdu to, co ty chceš. A to třeba tak, jak zmínil kolega výše, akorát tam také přidáš volání té metody pro získání jejího výsledku.

Nahoru Odpovědět 3. října 20:55
Cokoliv a kdokoliv může jednou uspět.
Avatar
mat.masar
Člen
Avatar
Odpovídá na IT Man
mat.masar:3. října 21:20

Možná to bude mým vyjadřováním. Zkusím poslat ucelenější kus kódu + screeny.

Chyba - fotka "localhost-onas", tabulka v db - phpmyadmin-stranky (nevím teda, jestli vidíš názvy fotek, které jsem přiložil).

Soubor db.php, řádek 20-25 (23 je $navrat->execute)

public static function dotazJeden($dotaz, $parametry = array())
{
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->fetch();
}

Soubor SpravceStranek.php, fce pro vracení stránky

public function vratStranku($url)
{
        return Db::dotazJeden('SELECT `stranka_id`, `titulek`, `obsah`, `url`, `popisek`, `klicova_slova` FROM `stranky` WHERE `url` = ? ', array($url));
}

Soubor StrankyKontro­ler.php celá fce zpracuj

public function zpracuj($parametry)
        {
                        // Vytvoření instance modelu, který nám umožní pracovat se stránkami
                $spravceStranek = new SpravceStranek();
                $spravceUzivatelu = new SpravceUzivatelu();
                $uzivatel = $spravceUzivatelu->vratUzivatele();
                $this->data['admin'] = $uzivatel && $uzivatel['admin'];

                //Je zadáno url stránky ke smazání
                if(!empty($parametry[1]) && $parametry[1] == 'odstranit')
                {
                        $this->overUzivatele(true);
                        $spravceStranek->odstranStranku($parametry[0]);
                        $this->pridejZpravu('Stránka byla úspěšně smazaná');
                        $this->presmeruj('stranka');

                }

                //Je zadáno url stránky
                if(!empty($parametry[0]))
                {

                //Získání stránky podle url
                $stranka = $spravceStranek->vratStranku($parametry[0]);

                //pokud nebyla stránka nalezena, přesměrovani na ChybaKontroler
                if(!$stranka)
                        $this->presmeruj('chyba');

                // Hlavička stránky
                $this->hlavicka = array('titulek' => $stranka['titulek'], 'klicova_slova' => $stranka['klicova_slova'], 'popis' => $stranka['popisek']);

                //Promměnné pro šablonu
                $this->data['titulek'] = $stranka['titulek'];
                $this->data['obsah'] = $stranka['obsah'];

                //Nastavení šablony
                $this->pohled = 'stranka';

                }

                else
                //Není zadáno url stránky, vypíšeme všechny
                {
                        $stranky = $spravceStranek->vratStranky();
                        $this->data['stranky'] = $stranky;
                        $this->pohled = 'stranky';
                }


        }

Soubor SmerovacKontro­ler.php (rozřazovač, jak název napovídá :-) ) fce zpracuj

public function zpracuj($parametry)
  {
              $naparsovanaURL = $this->parsujURL($parametry[0]);

              if(empty($naparsovanaURL[0]))
                      $this->presmeruj('clanek/uvod');
              // kontroler je 1. parametr URL
              $tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';

              if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                      $this->kontroler = new $tridaKontroleru;
              elseif (SpravceStranek::dotazNaStranku($naparsovanaURL)>0)
                      $this->kontroler = new StrankyKontroler();
              else
                      $this->presmeruj('chyba');
              //Volání kontroleru
      $this->kontroler->zpracuj($naparsovanaURL);

      //Nastavení proměnných do šablon
  $this->data['titulek'] = $this->kontroler->hlavicka['titulek'];
  $this->data['popis'] = $this->kontroler->hlavicka['popis'];
  $this->data['klicova_slova'] = $this->kontroler->hlavicka['klicova_slova'];

  //Nastavení hlavní šablony
  $this->pohled = 'rozlozeni';

  //Uložení zpráv do dat šablony
  $this->data['zpravy'] = $this->vratZpravy();
  }

Je to zřejmě trochu přehnané, ale doufám, že to pomůže nejvíc :-D

Edit:
Počítejme s tím, že seznam stránek nemá žádnou přidanou hodnotu. Momentálně to slouží jen jako "mezikrok" Celé jsem toto "postavil" na principu článků, které mi fungují a akorát jsem přepsal proměnné a další části...

Editováno 3. října 21:22
 
Nahoru Odpovědět 3. října 21:20
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. října 8:12

Pokud je radek 23-25 to, co pises, pak bych si tam dal pred

echo '<br>'; var_dump('dotaz=', $dotaz);
echo '<br>'; var_dump('parametry=', $parametry);
 $navrat = self::$spojeni->prepare($dotaz);

Myslim si, ze ten dotazJeden asi pouzivas jeste nekde jinde na neco, kde misto array (do parametry) mu tam das string.
Jeste muzes zkusit to, ze pred volanim dotazu si tam das echo. (ctrl+f si najdes vsechno, kde ho pouzijes dotazJeden)

echo 'volani 1'; // 2,, 3
Db::dotazJeden(...)

Pak budes vedet, odkud jsi jej zavolal. Ale to se da poznat i z toho vypisu sql dotazu.
Myslim, ze jsem mel vic ukecanejsi php, vypise i vsechny predchozi kroky. Takovou tabulku to vypisovalo
https://i.stack.imgur.com/MVjTH.png
Nechapu, proc vysledek dotazu preskladavas do jine array. Indexy se lisi jen v popis vs popisek.
$this->hlavicka = array('titulek' => $stranka['titu­lek'], 'klicova_slova' => $stranka['kli­cova_slova'], 'popis' => $stranka['popi­sek']);

 
Nahoru Odpovědět 4. října 8:12
Avatar
mat.masar
Člen
Avatar
Odpovídá na Peter Mlich
mat.masar:7. října 15:21

S tím dumpem to vypisuje:

string(6) "dotaz=" string(37) "SELECT * FROM stranky WHERE url = ?"
string(10) "parametry=" array(1) { [0]=> array(0) { } }
Notice: Array to string conversion in C:\xampp\htdoc­s\Modely\Db.php on line 25

s připsáním echa

Volani 4
string(6) "dotaz=" string(37) "SELECT * FROM stranky WHERE url = ?"
string(10) "parametry=" array(1) { [0]=> array(0) { } }
Notice: Array to string conversion in C:\xampp\htdoc­s\Modely\Db.php on line 25

A volani 4 je tady:

public function dotazNaStranku($url)
{
        echo "Volani 4";

        Db::dotazJeden('SELECT * FROM `stranky` WHERE url = ?', array($url));
        return $url;
}

A tuto funkci volám na ověření, zda daná stránka existuje ve SmerovacKontroler ...

public function zpracuj($parametry)
  {
              $naparsovanaURL = $this->parsujURL($parametry[0]);

                      ...

              if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                      $this->kontroler = new $tridaKontroleru;
              elseif (SpravceStranek::dotazNaStranku($naparsovanaURL)>0)
                      $this->kontroler = new StrankyKontroler();
                      ...
  }

A $naparsovanaURL se bere z funce parsujURL

private function parsujURL($url)
{
        $naparsovanaURL = parse_url($url);
        $naparsovanaURL["path"] = ltrim($naparsovanaURL["path"], "/");
        $naparsovanaURL["path"] = trim($naparsovanaURL["path"]);

        $rozdelenaCesta = explode("/", $naparsovanaURL["path"]);
        return $rozdelenaCesta;
}

Z čehož vyplývá, že $naparsovanaURL je string, co jiného tam mám ale vložit, aby to bylo pole a zároveň se z toho přebrala url na vyhledání = plnilo by to svou funkci.

Přeskládávat...no nevím co tím myslíš, dává se to do "hlavicka", protože ta se potom předává dál na výpisu konkrétní stránky...

 
Nahoru Odpovědět 7. října 15:21
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8. října 9:50

'Z čehož vyplývá, že $naparsovanaURL je string'
parsujURL($url) ... $rozdelenaCesta = explode("/", $naparsovanaUR­L["path"]); return $rozdelenaCesta; -- vystup funkce -- array
Vystup funkce je array.

$x = array(123); // tve: $naparsovanaURL = $this->parsujURL($parametry[0]);
$y = array($x);    // vysledkem je array(array(123)) // tve: array($url)
$navrat->execute($parametry);

Co ti na to mam rici? Pres funkci parsujURL vytvoris array a zabalis ji do dalsi array, prikaz dotazJeden('SELECT * FROM stranky WHERE url = ?', array($url));. Jedno arrayovani tam byt nema.
Navic nemas osetrene explode. Pokud mu das string bez lomitka, tak ti vrati false, podle dokumentace http://php.net/explode , nadpis Return Values . A false neni array.

Ostatne, var_dump ti to take pise

string(10) "parametry=" array(1) { [0]=> array(0) { } }

$parametry = array( 0 => array() ); // v php bys to vytvoril takto
var_dump($parametry) // array(1) { [0]=> array(0) { } }
Editováno 8. října 9:52
 
Nahoru Odpovědět 8. října 9:50
Avatar
mat.masar
Člen
Avatar
Odpovídá na Peter Mlich
mat.masar:8. října 20:25

Já se moc omlouvám, ale já se v tom strašně ztrácím...možná víc a víc...

Odstranil jsem to další zabalování ->

public function dotazNaStranku($url)
{

        return Db::dotazJeden('SELECT `stranka_id`, `titulek`, `obsah`, `url`, `popisek`, `klicova_slova` FROM `stranky` WHERE url = ?', $url);
}

Ale teď mi to hází zase chybu

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2031 in -> C:\xampp\htdoc­s\Modely\Db.php:23 Stack trace: #0 C:\xampp\htdoc­s\Modely\Db.php(23): PDOStatement-> >execute(Array) #1 C:\xampp\htdoc­s\Modely\Sprav­ceStranek.php(43): Db::dotazJeden('SE­LECT `stranka...', > Array) #2 C:\xampp\htdoc­s\Kontrolery\Sme­rovacKontroler­.php(38): SpravceStranek::do­tazNaStranku(A­rray) #3 > C:\xampp\htdoc­s\index.php(21): SmerovacKontroler->zpracuj(Array) #4 {main} thrown in > C:\xampp\htdoc­s\Modely\Db.php on line 23

Což zase odkazuje sem na řádek $navrat->execute($para­metry)

public static function dotazJeden($dotaz, $parametry = array())
{
        $navrat = self::$spojeni->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->fetch();
}

S tím explodem jsi na něco narazil, zkoušel jsem to a když zadám localhost/onas vyskočí výše zmíněná chyba.. když zadám localhost/onas/ tak se to přesměruje na chybu a když zadám localhost/onas/o­nas tak to vypíše tu stránku kterou jsem chtěl....Jediné co vlastně teď chci, aby to vypisovalo správnou stránku (jako v pripade /onas/onas) jenom při zadání /onas...

 
Nahoru Odpovědět 8. října 20:25
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9. října 7:37

A to explode jsi uz osetril? Nebo cekas na nejaky zazrak? :)

 
Nahoru Odpovědět 9. října 7:37
Avatar
mat.masar
Člen
Avatar
Odpovídá na Peter Mlich
mat.masar:9. října 18:01

Jediné co mě napadlo bylo toto:

private function parsujURL($url)
{
        $naparsovanaURL = parse_url($url);
        $naparsovanaURL["path"] = ltrim($naparsovanaURL["path"], "/");
        $naparsovanaURL["path"] = trim($naparsovanaURL["path"]);

        if (strpos($naparsovanaURL["path"], "/") !== false)
                $rozdelenaCesta = explode("/", $naparsovanaURL["path"]);
        else
                $rozdelenaCesta = array($naparsovanaURL["path"]);

        return $rozdelenaCesta;
}

"Odladil" jsem to i podle toho, že mi to vypisovalo chybu že výsledkem mám string $rozdelenaCesta = $naparsovanaUR­L["path"];, tak jsem to obalil array(), podle příkladu, který jsi psal výše...Nyní to už nevypisuje chybu ohledně nově přidaného kódu, ale jinak se nic nezměnilo...

Znamená to, že to stále není ošetřené? Jinak by to fungovalo? Nebo proč to pořád háže chybu? (uncaught exception).

 
Nahoru Odpovědět 9. října 18:01
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10. října 7:54

Proc tam nepouzijes treba $a = $naparsovanaUR­L["path"] a dal pracujes jen s $a?
To ostatni netusim. Fakt, kdyz clovek nema pred sebou cely program, tak se to resi dost tezko. Jakoze, stale se te na neco vyptavat, co s tim treba vubec nesouvisi....
Rikal jsi snad, ze ti to v nejake kombinaci fungovalo?

Zkus ten dotaz napsat primo, jako string, zda ti funguje.
Pak pouzi tu svou verzi a dej si tam vypis konecneho dotazu, zda se shoduji, pripadne, v cem je rozdil. Nevim, zda to vubec jde, vypsat dotaz, kdyz je tam prikaz execute (coz normalne znamena spustit, provest), pdo takhle nepouzivam. Jsem zvykly poskladat si dotaz jako string. Ne mu davat parametry. V tomhle by ti spis poradil Kit (z forka programujte.com) nebo google.

 
Nahoru Odpovědět 10. října 7:54
Avatar
mat.masar
Člen
Avatar
Odpovídá na Peter Mlich
mat.masar:11. října 16:47

Nikdy mi to právě nefungovalo...Což je ten hlavní problém...

Zkusím napsat Kitovi.

Díky

 
Nahoru Odpovědět 11. října 16:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. října 9:55

Jasne. No, ale zkusil jsi poslat do pdo primo sql dotaz? Cisty, primy, bez tech serepeticek jako parseurl a pod?

jo, a jeste muzes zkusit tenhle kod na pdo
https://www.itnetwork.cz/…ba1bdafb5b8f#…

Editováno 12. října 9:58
Akceptované řešení
+20 Zkušeností
Řešení problému
 
Nahoru Odpovědět 12. října 9:55
Avatar
mat.masar
Člen
Avatar
Odpovídá na Peter Mlich
mat.masar:28. října 19:41

Problém byl v tomto:

$tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';

array_shift měnil url, ikdyz vsechno bylo vpořádku.
Výsledek

public function zpracuj($parametry)
  {
      $naparsovanaURL = $this->parsujURL($parametry[0]);

      $naparsovanaURL2 = $naparsovanaURL;

      if(empty($naparsovanaURL[0]))
          $this->presmeruj('clanek/uvod');
      // kontroler je 1. parametr URL
      $tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL2)) . 'Kontroler';

      if (file_exists('kontrolery/' . $tridaKontroleru . '.php')){
               $this->kontroler = new $tridaKontroleru;
          $naparsovanaURL = $naparsovanaURL2;
      }

      elseif (SpravceStranek::dotazNaStranku($naparsovanaURL)>0) {
          $this->kontroler = new StrankyKontroler();
 
Nahoru Odpovědět 28. října 19:41
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na mat.masar
Peter Mlich:29. října 8:37

Aha. Ano. Ta funkce uklada zpet do pole. V tomto pripade je to to nevyhoda a chyba, ktera se dost obtizne hleda.

Nejspis to bylo vymyslene tak kvuli uspore mista v pameti a casu. Treba pri sortovani obriho pole je vyhodnejsi delat to v nem nez si cele pole duplicitne vykopirovat (treba 100G :), ikdyz dnes je to spis otazka blik, tusim nejnovejsi ssd nebo pameti maji zapis kolem 5G/S ).

Kdybys nekdy podobnou vlastnost chtel zamerne vyuzit, je to &. (pri rozsahlejsich projektech je treba uvolnovat pamet a setrit, kde se da)

function xxx(&$prom) {$prom = 2;}
$a = 1;
xxx($a);
echo $a;
Editováno 29. října 8:38
 
Nahoru Odpovědět 29. října 8:37
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 21 zpráv z 21.