NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: chyba pri UPDATE pomocou PDO

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Rastislav Kopál:23.9.2017 17:30

Zdravim, prezeram dookola moj kod, googlujem, no uz si fakt neviem pomoct kde je chyba.. stranka je robena v mvc architekture podla tutorialu https://www.itnetwork.cz/php/mvc

toto je ProfilController

if ($_POST)
       {
           $fpath = "img/profilovka/". $_FILES["image"]["name"];
           $folder = "img/profilovka/";
           move_uploaded_file($_FILES["image"]["tmp_name"], "$folder" . $_FILES["image"]["name"]);



           $uzivatel = array(
               'pohlavie' => $_POST['pohlavie'],
               'profilovka' => $fpath,
               'pozicia' =>    $_POST['pozicia'],
               'krstne' => $_POST['krstne'],
               'priezvisko' => $_POST['priezvisko'],
               'vyska' => $_POST['vyska'],
               'vaha' => $_POST['vaha'],
               'cislo' => $_POST['cislo'],
           );


           try {
               $spravcaUzivatelov->upravUzivatela($uzivatel,$_SESSION['uzivatel']['meno']);
           }
           catch (chybaUzivatela $error)
           {
               $this->pridajSpravu($error->getMessage());
           }
           $this->presmeruj("profil");
       }

       $this->view = 'profilEdit';

toto je model SpravcaUzivatelov

public function upravUzivatela($uzivatel = array(),$meno)
    {
        try {
            db::dotazJeden('UPDATE uzivatel
                                SET
                                pohlavie = :pohlavie,
                                profilovka = :profilovka,
                                pozicia = :pozicia,
                                krstne = :krstne,
                                priezvisko = :priezvisko,
                                vyska = :vyska,
                                vaha = :vaha,
                                cislo = :cislo
                                WHERE meno = :meno
                                ', $uzivatel ,$meno);
       }
        catch (PDOException $chyba)
        {
            throw new chybaUzivatela('Nieco sa nepodrailo,skuste to znovu.');
        }
    }

v pdo pouzivam tuto metodu

public static function dotazJeden($poziadavka, $parametre = array())
    {
        $navrat = self::$spojenie->prepare($poziadavka);
        $navrat->execute($parametre);
        return $navrat->fetch();
    }

piše mi to tuto chybu.. Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdoc­s\Models\db.php:29 Stack trace: #0 C:\xampp\htdoc­s\Models\db.php(29): PDOStatement->execute(Array) #1 C:\xampp\htdoc­s\Models\sprav­caUzivatelov.php(84): db::dotazJeden('UP­DATE uzivatel...', Array, 'test') #2 C:\xampp\htdoc­s\Controllers\Pro­filEditContro­ller.php(119): spravcaUzivatelov->upravUzivate­la(Array, 'test') #3 C:\xampp\htdoc­s\Controllers\Sme­rovacController­.php(38): ProfilEditCon­troller->spracuj(Array) #4 C:\xampp\htdoc­s\index.php(19): SmerovacController->spracuj(Array) #5 {main} thrown in C:\xampp\htdoc­s\Models\db.php on line 29

Odpovědět
23.9.2017 17:30
"Make Things As Simple As Possible, But Not Simpler." - Albert Einstein
Avatar
Odpovídá na Rastislav Kopál
Petr Štechmüller:23.9.2017 17:37

Ahoj, chyba mluví jasně:

Invalid parameter number

To znamená, že předáváš do funkce nesprávný počet parametrů.
Uprav volání funkce db::dotazJeden takto:

db::dotazJeden('UPDATE blablabla', array($uzivatel, $meno));

Ale ani ted to asi moc fungovat nebude.
Neměl by jsi tam spíš vypsat všechny parametry, které dáváš za ":" v dotazu?

Editováno 23.9.2017 17:39
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
23.9.2017 17:37
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Rastislav Kopál:23.9.2017 18:39

Ahoj, dakujem za odpoved, ale ani po tomto mi to nefunguje , píše to:
*Notice: Array to string conversion in C:\xampp\htdoc­s\Models\db.php on line 29

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdoc­s\Models\db.php:29 Stack trace: #0 C:\xampp\htdoc­s\Models\db.php(29): PDOStatement->execute(Array) #1 C:\xampp\htdoc­s\Models\sprav­caUzivatelov.php(84): db::dotazJeden('UP­DATE uzivatel...', Array) #2 C:\xampp\htdoc­s\Controllers\Pro­filEditContro­ller.php(119): spravcaUzivatelov->upravUzivate­la(Array, 'test') #3 C:\xampp\htdoc­s\Controllers\Sme­rovacController­.php(38): ProfilEditCon­troller->spracuj(Array) #4 C:\xampp\htdoc­s\index.php(19): SmerovacController->spracuj(Array) #5 {main} thrown in C:\xampp\htdoc­s\Models\db.php on line 29*

//hups :D .. ja som to nedočítal do konca, idem to skusiť prerobiť ešte a dám vedieť, zatial dík.

Editováno 23.9.2017 18:41
Nahoru Odpovědět
23.9.2017 18:39
"Make Things As Simple As Possible, But Not Simpler." - Albert Einstein
Avatar
Odpovídá na Petr Štechmüller
Rastislav Kopál:23.9.2017 18:44

jasné.. keby ja dočítam hneď dokonca.. :-)
Ďakujem velmi pekne, už to funguje! +

Nahoru Odpovědět
23.9.2017 18:44
"Make Things As Simple As Possible, But Not Simpler." - Albert Einstein
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 4 zpráv z 4.