Upload a zpracování více fotek s ruznymi ‚name‘
- jeanes
- Člen | 1
Ahoj,
mám klasický form, pomocí kterého (mimo jiné) uploaduji různý počet fotek, které pak chci uložit na různá místa (nikoliv do jednoho adresáře).
V presenteru mám:
$form = new AppForm;
...
$form->addFile('foto', 'Fotky:');
$form->addFile('realizace', 'Realizace:');
...
V šabloně pak pomocí .js rozšiřuji možnost narání více než jedné fotky
<td>
<table id="foto">
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>{$form['foto']->control}</td>
<td><a class="pridat_foto" onclick="fnClickAddRow();" href="javascript:void(0);">[+] přidat další obrázek</a></td>
</tr>
</tbody>
</table>
</td>
.js skript vypada zhruba takto (je stejny jak pro „foto“ tak pro „realizace“)
<script type="text/javascript">
/* Global variable for the DataTables object */
var oTable;
/* Global var for counter */
var giCount = 1;
$(document).ready(function() {
oTable = $("#foto").dataTable({
"bPaginate": false,
"bLengthChange": false,
"bFilter": false,
"bSort": false,
"bInfo": false,
"bAutoWidth": false,
"bProcessing": false,
"bSortClasses": false,
"oLanguage": {
"sZeroRecords": ""
}
});
} );
function fnClickAddRow() {
oTable.fnAddData( [
"<input type=\"file\" class=\"text\" name=\"foto"+giCount+"\" id=\"foto"+giCount+"\" />",
" "
] );
giCount++;
}
</script>
Problém je v tom, že po odeslání a následném zpracování formu se dostanu jen k jedné (vždý té první) fotce, přestože jich tam pomocí .js uploaduji více.
Když pak dám při zpracování formu toto:
...
foreach($_FILES as $image){
echo $image;
}
...
Tak mi to vypíše všechny uploadované fotky, ale já ke zpracování potřebuji dostat nejdříve fotky ‚foto‘ a uložit je kam potřebuji, a pak fotky ‚realizace‘ a též s nima udělat co potřebuji!
Když tkusím třeba toto
$data = $form->getValues();
...
foreach($data['foto'] as $f){
echo $f;
}
foreach($data['realizace'] as $r){
echo $r;
}
Tak mi to vypíše vždy jen tu první uploadovanou a zbytek nic…
Zkoušel jsem i vytvořit kontejner pro každou kategorii fotek (‚foto‘ a ‚realizace‘) a pak pomocí foreach projet vsechny prvky z kazdeho kontejneru, ale presto to vypsalo jen tu prvni… Uz nevim co s tim. Predpokladam, ze to bude nejaka blbost… Prosim o nejake nasmerovani. Dekuji!
- studna
- Člen | 181
Je to logické, kvůli bezpečnosti formulářů. Uplně to samé, jako by si po komponentě
$form = new Form(..);
$form->addText('valX');
chtěl hodnotu Y
$form['valY']->value; // error
Dá se to řešit pomocí session. Třeba nějak podobně:
$form = new Form(..);
$container = $form->addContainer('val');
$container->addFile(0);
if( $sessionFilesCount>1 )
for( $i = 1; $i < $filesCount; $i++)
$container->addFile($i);
Pak musíš nějak vyřešit invalidaci formuláře – aby se ti nesmazaly předchozí vybrané soubory.
Nebo si napíšeš vlastní komponentu(třeba pro ajaxový upload) nebo použiješ nějakou už hotovou, viz doplňky.
Editoval studna (16. 9. 2011 21:44)