nefunkční formulář když nenahraju obrázek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
docky
Člen | 59
+
0
-

Ahoj , mam problém.
Když mám formulář (úprava profilu) bez uploadu pro avatar, tak vše funguje ale když tam dám upload a chci změnit třeba jméno bez toho, abych nahrál avatar tak to nejde (kdyz nahraju avatar tak vse funguje).
Děkuji všem za odpověd.

Tirus91
Člen | 199
+
0
-

@docky
dej sem aspoň kód jak zpracováváš formulář a jak ho renderuješ

docky
Člen | 59
+
0
-
	protected function createComponentEditForm(){
    $form = new UI\Form;

    $form->addText('name', '');

    $form->addText('email', '')
         ->addRule(Form::EMAIL, 'Špatně zapsaný email')
         ->setType('email');

    $type = array(
        '0' => 'GTA',
        '1' => 'Counter Strike T',
        '2' => 'Counter Strike CT',
    );

    $form->addSelect('tema', '', $type);

    $form->addText('www', '');

    $form->addText('skype', '');

    $form->addText('steam', '');

    $form->addText('fb', '');

    $form->addText('youtube', '');

    $form->addText('rockstar', '');

    $form->addText('twich', '');

    $form->addUpload('avatar', '')
         ->addRule(Form::IMAGE, 'Avatar musí být JPEG, PNG nebo GIF.')
         ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 64 kB.', 64 * 1024 /* v bytech */);

    $form->addSubmit('send', 'HOTOVO');

    $form->onSuccess[] = array($this, 'editSucceeded');
    return $form;
}
public function editSucceeded($form) {
        $values = $form->values;

        $user = $this->getUser();
        $name = str_shuffle(md5(md5(rand(0, 100)."".time()."".rand(0, 100)))).'.png';
        $imgUrl = $this->context->parameters['wwwDir'] . '/img/upload/avatars/' . $name;
        $values->avatar->move($imgUrl);

        $values->avatar = $name;

        $this->database->table('users')->where('id',$user->identity->data["id"])->update($values);
        $this->flashMessage('Upraveno');
    	$this->redirect('this');

    }

Editoval docky (6. 6. 2015 18:47)

Mysteria
Člen | 797
+
+1
-
$form->addUpload('avatar', '')
	->addCondition(Form::FILLED)
         ->addRule(Form::IMAGE, 'Avatar musí být JPEG, PNG nebo GIF.')
         ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 64 kB.', 64 * 1024 /* v bytech */);
Tirus91
Člen | 199
+
+1
-

@Mysteria
ve zpracování formuláře ještě vždy počítá s avatarem a nemá to moc ošetřený

@docky
níž máš trochu upravený kód, ale na 100% si nejsem jist že to bude chodit :) ale je tam toho víc ošetřenýho

protected function createComponentEditForm()
    {
        $form = new Form();

        $form->addText('name', '');

        $form->addText('email', '')
            ->addRule(Form::EMAIL, 'Špatně zapsaný email')
            ->setType('email');

        $type = array(
            '0' => 'GTA',
            '1' => 'Counter Strike T',
            '2' => 'Counter Strike CT',
        );

        $form->addSelect('tema', '', $type);

        $form->addText('www', '');

        $form->addText('skype', '');

        $form->addText('steam', '');

        $form->addText('fb', '');

        $form->addText('youtube', '');

        $form->addText('rockstar', '');

        $form->addText('twich', '');

        $form->addUpload('avatar', '')
            ->addCondition(Form::FILLED)
            ->addRule(Form::IMAGE, 'Avatar musí být JPEG, PNG nebo GIF.')
            ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 64 kB.', 64 * 1024 /* v bytech */);

        $form->addSubmit('send', 'HOTOVO');

        $form->onSuccess[] = function ($form, $values) {
            if ($this->editSucceeded($form, $values)) {
                $this->flashMessage('Upraveno', 'success');
            }else{
                $form->addError('Data se nepodarilo ulozit');
                return false;
            }
            $this->redirect('this');
        };
        return $form;
    }


    public function editSucceeded(Form $form, Nette\Utils\ArrayHash $values)
    {
        if ($values->avatar->isOk()) {
            $name = str_shuffle(md5(md5(rand(0, 100) . "" . time() . "" . rand(0, 100)))) . '.png';
            $imgUrl = $this->context->parameters['wwwDir'] . '/img/upload/avatars/' . $name;
            $values->avatar->move($imgUrl);
            $values->avatar = $name;
        } else {
            unset($values->avatar); //tady zalezi jak to ma cele fungovat v pripade, ze do inputu nevlozi zadny soubor..
        }

        try {
            $this->database->table('users')->where('id', $this->getUser()->id)->update($values);
        }catch (\Exception $ex){
            \Tracy\Debugger::log($ex);
            return false;
        }
        return true;
    }

Editoval Tirus91 (6. 6. 2015 19:08)

docky
Člen | 59
+
0
-

super to funguje , děkuju moc. :)

Tirus91
Člen | 199
+
0
-

@docky
pár vsuvek k tvému kódu. Odděl si práci s DB od presenteru. Udělej si nějaky model, který ti to bude zajišťovat. Taky v případě, kdy si jouda (uživatel) změní nějaká data či avatara, tak se ti to zpět neprojeví do jeho identity, takže v $this->getUser()->getIdentity() bude mít ta původní (stará) data.
k avataru jen řeknu ještě jednu věc. Co rozlišení obrázku? ;)

docky
Člen | 59
+
0
-

no jo, teď na to koukám že se to neprojevilo v identitě. Rozlišení obrázku jsem zkoušel řešit ale bohužel marně :(

// edit

tak ořezání obrazku jsem vyresil :)

Editoval docky (6. 6. 2015 19:46)

Tirus91
Člen | 199
+
0
-

@docky
udělej si nějaký model, který ti vždy vrátí novou identitu a při změně uděláš něco jako

$this->getUser()->login($this->usermodel->getIdentity($this->getUser()->id));
docky
Člen | 59
+
0
-

dobře , díky moc za pomoc