PHP Nette - jak provést upload souboru a zapsat ho do databáze
Ahoj, učím se pracovat v PHP s Nette frameworkem, pročítal jsem si základní návody na vytvoření formulářů - to mi funguje. Ale nevím si rady s tím, jak provést jednoduchý upload souboru na server, soubor pak přejmenovat dle aktuálního data a zapsat jeho název do databáze MySQL. Poradí mně prosím někdo? Díky
Ahoj,
pokud ti jde opravdu o jednoduchý upload souboru na server v Nette, tak můžeš zkusit následujíci konstrukci.
Ta ti nahraje soubor do /www/upload/* , přejmenuje soubor dle hodnoty z formuláře a zapíše cestu k souboru do databáze.
ODPOVĚĎ
Ahoj,
pokud ti jde opravdu o jednoduchý upload souboru na server v Nette, tak můžeš zkusit následujíci konstrukci.
Ta ti nahraje soubor do /www/upload/* , přejmenuje soubor dle hodnoty z formuláře a zapíše cestu k souboru do databáze.
Presenter:
protected function createComponentUploadForm()
{
$form = new Nette\Application\UI\Form;
$form->addText('pojmenovani', 'Pojmenování souboru:')
->setRequired();
$form->addUpload('upload', 'Soubor');
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = [$this, 'uploadFormSucceeded'];
return $form;
}
public function uploadFormSucceeded($form, $values)
{
if (filesize ($values->upload) > 0) { //kdyz je soubor skutecne poslan z formu
$soubor = $values->upload;
$soubor->move("upload/" . $values->upload->name);
if($soubor->isOk()) {
//prejmenovani souboru
$soubor->move('upload/' . $values->pojmenovani. '.txt');
}
$this->database->table('soubory')->insert([
'Soubor' => ('upload/' . $values->pojmenovani. '.txt'),
]);
$this->flashMessage('Soubor byl přidán', 'success');
$this->redirect('this');
} else {
$this->flashMessage('Soubor nebyl přidán', 'failed');
$this->redirect('this');
}
}