Joomla.it Forum
Non solo Joomla... => Sviluppo => : saprile 10 Mar 2015, 16:32:14
-
Buongiorno a tutti, qualcuno potrebbe indicarmi un tutorial (o altro tipo di indicazioni) su come implementare l'inserimento di un file allegato insieme ad altri dati di un form? In pratica ho un form di inserimento record di un componente personalizzato (con n. campi testo), ho la necessità di inserire un file allegato insieme a tutti gli altri campi del form. L'inserimento deve avvenire in due tabelle separate (una per i dati del record e l'altra per i dati dell'allegato) in quanto la relazione tra record e allegato è "1 a n".
Grazie!
-
non credo esistano, ed è abbastanza complicata la gestione perchè inserisci dati sul fs e sul db che sono entità diverse... e una delle due potrebbe fallire.
In pratica non esiste un tutorial perchè è "banale php" che prende i dati da un campo di form di tipo "file".
Ricorda anche che un file va anche controllato e verificato che sia coerente all'estensione e all'header che presenta, prima di effettuare un upload e deve essere molto ben curata la sicurezza perchè riuscire ad uploadare una shell vuol dire controllare l'intero sito e db ;)
-
Si hai ragione, capisco che si tratti di banale codice, ma mi riferivo proprio ad una guida che facesse riferimento proprio alla sicurezza e al mantenimento del principio MVC di Joomla. Non ho trovato nulla di affidabile...
-
Ciao saprile, hai già analizzato questo tutorial?
https://docs.joomla.org/Creating_a_file_uploader_in_your_component
Puoi forzare la scrittura sul secondo database con le classiche api di Joomla:
https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase
-
@giovi... hai visto che in quel tutorial non funziona nessun link?
-
Azz... è vero.. perché non lo segnali alla community?
A saprile sarà più utile questo allora: https://docs.joomla.org/How_to_use_the_filesystem_package#Upload_a_file
NB: nel tag form deve essere presente l'attrubuto enctype="multipart/form-data" altrimenti il file caricato non viene considerato correttamente
-
Grazie Ragazzi, saranno sicuramente utili, vi farò sapere al più presto!!!
Grazie 1000
-
Azz... è vero.. perché non lo segnali alla community?
------------------------------------------------------------------------------
1) perchè non esiste una community
2) perchè finora tutti quelli con cui ho avuto a che fare di j.com mi sono sembrati degli emeriti idioti, senza una basilare cultura necessaria a capire cosa ti sta dicendo il tuo interlocutore.
comunque il motivo per cui non funziona più nulla è probabilmente questo: http://seclists.org/fulldisclosure/2013/Mar/116
Per quanto riguarda il problema dell'upload di un file, come dicevo prima, è molto oneroso curare l'aspetto sicurezza e se si salvano contemporaneamente dei dati riguardanti il file nel database, bisogna gestire le eccezioni e non è banale credimi... prima credo fosse addirittura un massacro, ora hanno lievemente migliorato alcune cose inserendo dei triggers prima e dopo il salvataggio dei dati che si possono sfruttare.
-
Non so se ti pu servire, ma anche io mi sono imbattuta in questo problema stasera....
sono arrivata a questa conclusione: ho il file default.php che contiene lo schema del form
<form method="post" name="vetrina_frm" enctype="multipart/form-data">
<fieldset>
<label for="name">Immagine 1</label>
<input type="file" name="myfile" />
<button type="submit">Submit</button>
</fieldset>
e il file che mi esegue il caricamento dell'allegato in una determinata cartella che posso impostare personalmente
function controllo($parametri){
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
print_r($_FILES);
$filename=$_FILES['myfile']['name'];
$fileTempPath=$_FILES['myfile']['tmp_name'];
$uploadPath=JPATH_SITE."\\media\\com_vetrina\\images\\".$filename.".jpg";
if(JFile::upload($fileTempPath, $uploadPath)){
//your logic like insert into database
echo "Upload success";
}else
{
echo "Upload faild";
}
Poi puoi gestirti come vuoi anche l'inserimento del path nel db, dato che il path è memorizzato in $uploadPath