Avatar
Ondřej Langr (andysekcze):

Ahoj, potřeboval bych jemnou pomoci s uploadem obrázků na MVC(základ stavěn na zdejším seriálu). Potřebuji zjistit co dělám špatně, protože to prostě nefunguje. Pokud někde pletu do kontroleru to co by tam nemělo být tak se omlouvám a doufám že mě opravíte. Díky všem co mi nějak pomohou. :) Zde je kód:

class ProfilKontroler extends Kontroler
{
    public function zpracuj($parametry)
    {
        $spravceSouboru = new SpravceSouboru();
        $spravceUzivatelu = new SpravceUzivatelu();
        $uzivatel = $spravceUzivatelu->vratUzivatele();

        if($uzivatel['admin'] == 1)
            $uzivatel['admin'] = "Tento uživatel má administrátorská oprávnění";
        else
            $uzivatel['admin'] = "Tento uživatel má pouze uživatelská oprávnění";

        $editace = false;

        if ($_POST)
        {
            $uzivatelskaData = array(
                'jmeno' => '',
                'heslo' => '',
            );

            if(isset($_POST['jmeno']))
                $uzivatelskaData['jmeno'] = $_POST['jmeno'];
            if(isset($_POST['heslo']) && isset($_POST['heslo_znovu']))
                if($_POST['heslo'] == $_POST['heslo_znovu'])
                    $uzivatelskaData['heslo'] = $spravceUzivatelu->vratOtisk($_POST['heslo']);
            if(!empty($_FILES['image']['tmp_name']))
                $spravceSouboru->nahrajAvatar($_FILES['image']['tmp_name'],$uzivatel['uzivatele_id']);
            $spravceUzivatelu->aktualizuj($uzivatel['uzivatele_id'],$uzivatelskaData);
            $this->pridejZpravu('Uživatelská data byly úspěšně aktualizovány');
        }
        else
        {
            $uzivatelZobraz = $spravceUzivatelu->vratUzivateleKZobrazeni($parametry[0]);

            if (empty($parametry[0]) && $uzivatel || $uzivatel['uzivatele_id'] == $parametry[0]) {
                $this->data['avatar'] = $uzivatel['avatar'];
                $this->data['jmeno'] = $uzivatel['jmeno'];
                $this->data['admin'] = $uzivatel['admin'];
                $titulek = "Profil uživatele ".$uzivatel['jmeno'] . " | Dáme pařbu";
                $this->hlavicka = array(
                    'titulek' => $titulek,
                    'klicova_slova' => '',
                    'popis' => '',
                );
            } else if (($parametry[0] != $uzivatel['uzivatele_id']) || !(empty($parametry[0]))) {
                if (!$uzivatelZobraz) {
                    $this->pridejZpravu("Uživatel neexistuje");
                    $this->presmeruj('domu');
                }
                else{
                    $this->data['jmeno'] = $uzivatelZobraz['jmeno'];
                    $this->data['avatar'] = $uzivatelZobraz['avatar'];
                    if($uzivatelZobraz['admin'] == 1)
                        $uzivatelZobraz['admin'] = "Tento uživatel má administrátorská oprávnění";
                    else
                        $uzivatelZobraz['admin'] = "Tento uživatel má pouze uživatelská oprávnění";
                    $this->data['admin'] = $uzivatelZobraz['admin'];
                    $titulek = "Profil uživatele " . $uzivatelZobraz['jmeno'] . " | Dáme pařbu";
                    $this->hlavicka = array(
                        'titulek' => $titulek,
                        'klicova_slova' => '',
                        'popis' => '',
                        );
                }
            } else if (empty($parametry[0]) && !$uzivatel) {
                $this->pridejZpravu('Nejsi přihlášený.');
                $this->presmeruj('domu');
            }elseif ($parametry[1] == 'upravit' && $uzivatel && $uzivatel['uzivatele_id'] == $parametry[0])
            {
                $editace = true;
                $titulek = "Editace profilu uživatele" . $uzivatel['jmeno'] . " | Dáme pařbu";
                $this->hlavicka = array(
                    'titulek' => "Editace profilu uživatele " . $uzivatel['jmeno'] . " | Dáme pařbu",
                    'klicova_slova' => '',
                    'popis' => '',
                );


            }
            else {
                $this->pridejZpravu('Uživatel neexistuje');
                $this->presmeruj('domu');
            }
            $this->data['edit'] = $editace;
            $this->pohled = 'profil';
        }
    }
}

//Databázová metoda zmen
 public function zmen($tabulka, $hodnoty = array(), $podminka, $parametry = array()){
        return self::dotaz("UPDATE `$tabulka` SET `".
            implode('` = ?, `', array_keys($hodnoty)).
            "` = ? " . $podminka,
            array_merge(array_values($hodnoty), $parametry));
    }

//metoda aktualizuj
public function aktualizuj($id,$uzivatelskeData)
    {
        Db::zmen('uzivatele', $uzivatelskeData , "WHERE uzivatele_id = ?", array($id));
    }
//metoda pro upload
public function pridejObrazek($slozka, $uzivatelovoID)
        {
    // konfigurace
    $uploadDir = $slozka; // adresar, kam se maji nahrat obrazky (bez lomitka na konci)
    $allowedExt = array('jpg', 'jpeg', 'png', 'gif', 'svg'); // pole s povolenymi priponami

    // zpracovani uploadu
    if(isset($_FILES['image']) && is_array($_FILES['image']['name'])) {

        $counter = 0;
        $allowedExt = array_flip($allowedExt);
        foreach($_FILES['image']['name'] as $klic => $nazev)
        {
            $fileName = basename($nazev);

            $tmpName = $_FILES['image']['tmp_name'][$klic];

            // kontrola souboru
            if(!is_uploaded_file($tmpName) || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))]))
            {
                // neplatny soubor nebo pripona
                throw new ChybaUzivatele("Neplatná přípona souboru.");
            }

            // presun souboru
            if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) {
                ++$counter;
                if($uzivatelovoID)
                    rename("{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}", "{$uploadDir}".DIRECTORY_SEPARATOR."{$uzivatelovoID}");
            }

            }
        }
        }
//profil.phtml - pohled
<div id="article-background">
    <?php if($edit): ?>
        <form method="post" enctype="multipart/form-data">
            Změnit avatar<br/>
            <input type="file" name="image" />
            Změnit Jméno<br />
            <input type="text" name="jmeno" value="<?= $jmeno ?>"/><br />
            Změnnit Heslo<br />
            <input type="password" name="heslo" /><br />
            Heslo znovu<br />
            <input type="password" name="heslo_znovu"/>
            <input type="submit" name="ok" value="Potvrdit">
        </form>
    <?php endif ?>
    <?php if(!$edit): ?>
        <img src=" <?= $avatar ?>" alt="avatar" width="124px" height="124px"/>
        <?= $jmeno ?><br />
        <?= $admin ?>
    <?php endif; ?>
</div>
Odpovědět 26. července 21:30
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
Lukáš Černý :

mohl by jsi pridat i funkci "nahrajAvatar" (SpravceSoubo­ru::nahrajAva­tar)? :)

 
Nahoru Odpovědět  +1 27. července 0:40
Avatar
Odpovídá na Lukáš Černý
Ondřej Langr (andysekcze):

Mohl no, ale můj problém to jaksi moc nepořeší :)

Nahoru Odpovědět 27. července 9:36
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
VitekST
Člen
Avatar
VitekST:

Zkontroloval sis práva na serveru? => na Linuxu příkazy chown, chmod

Jinak, zkus to zjednodušit jak to jde, případně si můžeš udělat novou stránku kde bude probíhat upload jen jednoho souboru, ať se ti to dobře ladí.

Pak to samozřejmě vrať do původního stavu.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 27. července 18:04
Avatar
Odpovídá na VitekST
Ondřej Langr (andysekcze):

Jop, díky za nasměrování na správnou cestu :) uznávám ti řešení ;) :)

Nahoru Odpovědět 28. července 10:07
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Ondřej Langr (andysekcze)
mkub:

staci nastavit na ten adresar prava rwx pre vlastnika a rx pre ostatnych, dalej nastavit vlastnika toho adresara na uzivatela a skupinu, pod ktrym bezi server a zabudni na prava 777, co je bezpecnostne riziko a hocikto ti to potom moze vykradnut a tam pomenit

 
Nahoru Odpovědět 28. července 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 6 zpráv z 6.