Problem polega na tym, że uploadując zdjęcia zapisuje ich dane w bazie, gdy uploaduje jedno zdjęcie jest dobrze, jednak gdy uploaduje więcej zdjęć to kolejne zdjęcia zapisują się kilkukrotnie i nie dostrzegam tu błędów:
function upload($_FILES,$_POST){
$files = Validation::factory($_FILES)
->add_rules('pliki', 'upload::valid', 'upload::required', 'upload::type[gif,jpg,png]', 'upload::size[3M]');
foreach(arr::rotate($_FILES['pliki']) as $i => $file)
{
$filename = upload::save($file);
Image::factory($filename)
->resize(598, 700, Image::AUTO)
//->watermark(new Image(DOCROOT.'watermark.png'))
->save(DOCROOT
.'photos\\'.str_replace(" ","_",$_POST['kategoria'][$i]).'\\'.basename($filename));
Image::factory($filename)
->resize(150, 150, Image::AUTO)
->save(DOCROOT
.'photos\\'.str_replace(" ","_",$_POST['kategoria'][$i]).'\\thumb_'.basename($filename)); //zapisuje nazwe pliku, aby dodać do bazy razem z resztą danych z $_POST
$this->save($_POST);
}
}
function save($_POST){
foreach($this->files as $i => $file){
$this->db->query('INSERT INTO luke_photos SET image="'.$file.'", category="'.$_POST['kategoria'][$i].'", opis="'.$_POST['opis'][$i].'"');
}
}
Zdjęcia uploaduje z takiego formularza: (kolejne wiersze tworzę przez js)
<form method="POST" action="/kohana2/zdjecia/dodaj/" enctype="multipart/form-data"> <td class="input"><input type="file" name="pliki[]" /></td><td class="input" style="float:right;"> <?php foreach($kategorie as $cat){ ?>
<option value="<?php echo $cat['name']; ?>">
<?php echo $cat['name']; ?> </option> <?php } ?>
<tr><td colspan="2">Opis:
<input type="text" name="opis[]" style="width: 370px;border: 1px solid #A0A0A0;"/></td></tr> <input type="button" id="add" value="Więcej" />
Ps. Temat w tym dziale, bo prawdopodobnie problem ma mało wspólnego z samym frameworkiem.
@edit
Problem banalny, że aż mi wstyd. Wywołanie Save() w złym miejscu miałem. Tak czy inaczej nikt tego nie zauważył, a mieliście cały dzień.
Ten post edytował nmts 18.12.2009, 17:37:35