Unexpected value prři vkládání z formu do MySQL
- symmetry
- Člen | 71
Zdravím, vkládám do DB dta z formu, problém je s hodnotou
pocházející z fileinputu.
Poud si ji nechám normálně echem vypsat, je vše o.k, pokud se ji pokusím
zapsat do DB, dostanu hlášku:
INSERT INTO tbl_seminars
(seminar_name
,
date_of_start
, date_of_end
, content
,
attachments
, is_allowed
)
VALUES (‚Přepínání mezi taby prohlížeče, v závislosti na odkazu‘,
‚1985–08–10‘,
‚2000–04–08‘, ‚QSSS<br>‘, Unexpected
object, 0)
A právě to mi vrtá hlavou, proč mi dibi nechce vzít klasickou hodnotu stringu?
Kdyby se někdo s podobným prblémem setkal, budu rád za jakoukolliv radu.
kod fromu vypada takto:
<?php
include './libs/nette-0.9-PHP-5.2/Nette/loader.php';
Debug::enable();
$form = new Form;
$form->addGroup('Vložení nového semináře');
$form->addText('nazev', 'Název semináře:')
->addRule(Form::FILLED, 'Vložte název semináře');
$form->addText('start', 'Datum začátku:')
->addRule(Form::FILLED, 'Vložte datum začátku semináře');
$form->addText('end', 'Datum konce:')
->addRule(Form::FILLED, 'Vložte datum konce semináře');
$form->addTextArea('content', 'Informace o semináři:')
->addRule(Form::FILLED, 'Vložte datum konce semináře');
$form->addFile('attachment','Příloha k semináři');
$form->addSubmit('send', 'Odeslat');
//End of form
if($form ->isSubmitted()&&$form ->isValid())
{
$name = $form['nazev']->getValue();
$start = $form['start']->getValue();
$end = $form['end']->getValue();
$content = $form['content']->getValue();
mysql_escape_string($content);
$attachment = $form['attachment']->getValue();
//TODO VALIDATION
$articles = new Articles();
if($articles->SaveNewSeminar($name,$start,$end,$content,$attachment))
{echo 'o.k';}
else
{echo 'vložení se nezdařilo';}
}
echo $form;
?>
A metoda
<?php
public function SaveNewSeminar($name,$start,$end,$content,$attachment) {
$arr = array(
'seminar_name' => $name,
'date_of_start' => $start,
'date_of_end' => $end,
'content' => $content,
'attachments' => $attachment,
'is_allowed' => 0
);
$result = dibi::test('INSERT INTO [tbl_seminars] ',$arr);
if($result)
return TRUE;
}
?>
- redhead
- Člen | 1313
a za druhé, by si měl používat něco jako toto
$values = $form->getValues();
a s tímto polem teprve dále operovat.
Po uploadnutí souboru je ve $values[‚attachments‘] objekt typu HttpUploadedFile, který zastřešuje ten soubor, který musíš někam uložit, a do databáze ukládat jen název (nebo url, nebo co potřebuješ), protože databáze si s objektem tohoto typu sama nedokáže poradit.. (nečekaně :) )
Editoval redhead (10. 11. 2009 22:21)
- symmetry
- Člen | 71
Nemohl by jsi tu prosím tedy uvést nějaký příklad, abych se naučil
získávat správně hodnoty z fomulářů, především z fileinputu?
Pořád mám problém s tím to rozběhnout korektně.
K získávání hodnot bych tedy použil správně toto?:
<?php
$values = $form->getValues();
echo $values['attachment'];
?>
Editoval symmetry (10. 11. 2009 23:16)
- symmetry
- Člen | 71
Díky za nakopnutí, udělal sem to takto, problém teď ale nastal
s uploadem.
Script sice proběhne a tváří se o.k ale k move_upload_file nedojde..
Kde by mohl být problém?
<?php
//Get all values from array
$values = $form->getValues();
//Get separately values
$name = $values['nazev'];
$start = $values['start'];
$end = $values['end'];
$content = $values['content'];
$attachment= $values['attachment']->getName();
//Try upload file
$values['attachment']->move('files');
//Save form values to the DB
$articles = new Articles();
if($articles->SaveNewSeminar($name,$start,$end,$content,$attachment))
{echo 'o.k';}
else
{echo 'vložení se nezdařilo';}
?>
- Ondřej Mirtes
- Člen | 1536
Nemá být v move()
cesta ke konkrétnímu souboru, ne jen do
složky?
Každopádně používej absolutní cesty způsobem:
dirname(__FILE__) . '/directory/file.txt'
Jinak se fakt nedá zjistit, kam se ten soubor uloží.
A isOk()
bys měl kontrolovat před move()
,
indikuje totiž, jestli proběhl v pořádku upload, ne to přesunutí.
- symmetry
- Člen | 71
Tomik napsal(a):
Kam jej opravdu ukládáš? Protože mezi
files
a/files
je rozdíl. Případně zkus zobrazit si i skryté souboru, pokud jsi mu nedal příponu, může se Ti schovávat…
Ukladam je do:
<?php
$values['attachment']->move('/files');
?>
protoze pri uvedeni:
<?php
$values['attachment']->move('files');
?>
Vyhodi exception>>
Unable to move uploaded file ‚C:\Data\Programing\PHP\tmp\php96C3.tmp‘ to
‚files‘.
Editoval symmetry (11. 11. 2009 0:49)