nette a upload osuboru – ověřování typu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- qteck
- Člen | 164
Ahoj,
zajímá mě, jak je to s uploadem, postavil jsem si toto:
<?php
public function renderDefault()
{
$form = new Form;
$form->addSelect('gallery', 'Přiřadit galerii: ', $this->upload->getGalleries());
$form->addText('id_author','Tvoje ID')
->addRule($form::FILLED);
$form->addUpload('img','Snímky: ', true)
->addRule($form::FILLED, 'Je potřeba vybrat nějaké snímky.')
->addRule(Form::IMAGE, 'Obrázek může být pouze ve formátu jpg, png nebo gif.')
->addRule(Form::MAX_FILE_SIZE,'Velikost snímku nesmí překročit 2 mb.', 2*1048576);
$form->addSubmit('upload', 'Nahrát');
$this->template->form = $form;
if($form->isSuccess())
{
$valuesOfForm = $form->getValues();
$path_original = 'images/galleries/'.$valuesOfForm->gallery.'/original/';
foreach($valuesOfForm->img as $img)
{
\Nette\Diagnostics\Debugger::dump($img->name);
\Nette\Diagnostics\Debugger::dump($img->temporaryFile);
\Nette\Diagnostics\Debugger::dump($path_original);
if(move_uploaded_file($img->temporaryFile, $path_original.$img->name))
{
$type = explode('.', $img->name);
$newName = ($this->upload->getIdOfLastPic()+1) . '.' . \Nette\Utils\Strings::lower(end($type));
rename($path_original . $img->name , $path_original . $newName); // na id vložného záznamu
$this->upload->insertPic($newName, $valuesOfForm->id_author, $valuesOfForm->gallery);
}
}
$this->flashMessage('Upload proběhl úspěšně!', 'info');
\Nette\Diagnostics\Debugger::dump($valuesOfForm);
}
}
jedná semi především o to, zda musím něják ověřovat typy? U formulářového pole mám nastaveno že to smí být jenom obrázek, ale otázkou je, zda to není jenom to javascriptové elert okno, které vyskočí po vybrání špatného typu?
Aby mi tam někdo neposlal ze svého vlastního formuláře jeho data kupř. php soubory a tenhle php script to akceptoval.
- Oli
- Člen | 1215
Ten typ se ověřuje určitě i na straně serveru. Například, když to chceš omezit jen na pdf, tak se to vždycky prvně zkusí poslat → js to neověřuje. A vrátí se ti form error, kterej vezme co máš v tom addRule.
Ale klidně si to vyzkoušej. Vypni si js a pošli mu nějakej php soubor :-)