- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload da JPG a PDF
-
Ultima cosa
Riesco benissimo tramite script a fare l'upload di un pdf in una cartella, quelloc he non riesco e fare in modo che il file PDF caricato abbia un link di richiamo nella scheda del prodotto; per quello pensavo di sfruttare quella parte di codice che fa la stessa cosa ma con le immagini
-
Se sai:
- il nome del file
- il nome della cartella di upload
Se memorizzi il nome del file nel db, non dovrebbe essere difficile predisporre un link al file in questione col suo percorso corretto.
-
@tigrone said:
Se sai:
- il nome del file
- il nome della cartella di upload
Se memorizzi il nome del file nel db, non dovrebbe essere difficile predisporre un link al file in questione col suo percorso corretto.
Boh io non riesco :bho:
Comunque quando si crea una scheda ad essa viene assegnato un codice random, a me basterebbe che il pdf creato prenda come nome il numero codice della scheda.. poi me la cavo
-
Allora... lascia perdere quel codice che va bene per le immagini (tienilo per quelle).
Fermo restando che hai una cartella sul server e la chiami, ad esempio, 'documenti'... per l'upload dei file... dentro quella cartella ne crei un'altra e la chiami, ad esempio, 'temp'
Puoi rinominare i file con il timestamp, quindi è impossibile che si creino 2 file con lo stesso nome...
Codice per il form:
<form method="post" action="upload.php" enctype="multipart/form-data"> <input type="file" name="pdf" /> <input type="submit" value="Upload" /> </form>
Codice per upload.php
[php]
if (move_uploaded_file($_FILES['pdf']['tmp_name'], 'documenti/temp/'.$_FILES['pdf']['name'])) { //copia il file, col suo nome originario, nella cartella temp
$estensione=strtolower(substr($_FILES['pdf']['name'], strrpos($_FILES['pdf']['name'], "."), strlen($_FILES['pdf']['name'])-strrpos($_FILES['pdf']['name'], "."))); //estrae l'estensione del file
$estensioni=array('.pdf'); //in quest'array puoi mettere le estensioni ammesse
if(!in_array($estensione,$estensioni)) { //se l'estensione del file non è contenuta nell'array, elimina il file e blocca lo script
unlink('documenti/temp/'.$_FILES['pdf']['name']);
exit('<p>Formato file non permesso!</p><p>Unico formato permesso: pdf</p><a href="javascript:history.back()">Torna indietro</a>');
}
$nome_file=time().$estensione; //crea il nome per il file
copy('documenti/temp/'.$_FILES['pdf']['name'], 'documenti/'.$nome_file); //copia il file col nuovo nome nella cartella 'documenti'
unlink('documenti/temp/'.$_FILES['pdf']['name']); //cancella il file originale
}
[/php]Successivamente puoi memorizzare nel db, nel campo corretto, la variabile $nome_file
A questo punto, quando estrarrai i dati con una query, avrai a disposizione il nome del file e sapendo la cartella dove risiede, non avrai difficoltà ad utilizzare il tag <a> per creare il link.
-
@tigrone said:
Allora... lascia perdere quel codice che va bene per le immagini (tienilo per quelle).
Fermo restando che hai una cartella sul server e la chiami, ad esempio, 'documenti'... per l'upload dei file... dentro quella cartella ne crei un'altra e la chiami, ad esempio, 'temp'
Puoi rinominare i file con il timestamp, quindi è impossibile che si creino 2 file con lo stesso nome...
Codice per il form:
<form method="post" action="upload.php" enctype="multipart/form-data"> <input type="file" name="pdf" /> <input type="submit" value="Upload" /> </form>
Codice per upload.php
[php]
if (move_uploaded_file($_FILES['pdf']['tmp_name'], 'documenti/temp/'.$_FILES['pdf']['name'])) { //copia il file, col suo nome originario, nella cartella temp
$estensione=strtolower(substr($_FILES['pdf']['name'], strrpos($_FILES['pdf']['name'], "."), strlen($_FILES['pdf']['name'])-strrpos($_FILES['pdf']['name'], "."))); //estrae l'estensione del file
$estensioni=array('.pdf'); //in quest'array puoi mettere le estensioni ammesse
if(!in_array($estensione,$estensioni)) { //se l'estensione del file non è contenuta nell'array, elimina il file e blocca lo script
unlink('documenti/temp/'.$_FILES['pdf']['name']);
exit('<p>Formato file non permesso!</p><p>Unico formato permesso: pdf</p><a href="javascript:history.back()">Torna indietro</a>');
}
$nome_file=time().$estensione; //crea il nome per il file
copy('documenti/temp/'.$_FILES['pdf']['name'], 'documenti/'.$nome_file); //copia il file col nuovo nome nella cartella 'documenti'
unlink('documenti/temp/'.$_FILES['pdf']['name']); //cancella il file originale
}
[/php]Successivamente puoi memorizzare nel db, nel campo corretto, la variabile $nome_file
A questo punto, quando estrarrai i dati con una query, avrai a disposizione il nome del file e sapendo la cartella dove risiede, non avrai difficoltà ad utilizzare il tag <a> per creare il link.
Ciao tigrone! ma dormi meno di me??? :?:)
Grazie per la dritta, provo a vedere se riesco...
A me basterebbe quindi che
[php]
$nome_file=$data[codicescheda].$estensione
[/php]Potrebbe essere?
Grazie ancora!
-
Oppure non potrebbe essere un'idea lasciare al file .pdf il suo nome (che è anche più comodo per archiviarlo poi) e fare in modo che il link creatosi vada in un campo del record scheda?
-
Risolto!
Nel formo ho aggiunto la voce
<input type=hidden name="ccode" value="<?=$ccode?>">
e nella pagina upload ho modificato così
[PHP]$nome_file=$ccode.$estensione; //crea il nome per il file [/PHP]
Un grazie a Tigrone per le dritte!
-
@Sara1985 said:
Ciao tigrone! ma dormi meno di me??? :?:)
Una volta ho anche visto l'alba!Comunque, contento che hai risolto.
-
Ciao!
avrei una domanda da porre, solo una rifinitura visto che tutto comunque funziona.Io ora chiamo il .pdf con il codice della scheda. Se la scheda è 123456, in automatico il pdf sarà 123456.pdf.
Ho provato a passare alla pagina upload.php un altro dato al posto del codice, il dato arriva tranquillamente e tramite echo lo stampa a video ma il file non si nomina correttamente e viene uplodato come .pdf senza nome.
sia facendo
[php]
$nome_file=$comments.$estensione;
[/php]Che
[php]
$nome_file=$data[comments].$estensione;
[/php]il pdf viene uplodato senza nome, se faccio
[php]
echo "$data[comments]";
[/php]
il dato viene stampato correttamente....
Che fare???
Grazie!
-
Risolto.. cambiando da
[PHP]<input type=hidden name="comments" value="<?=$comments?>">[/PHP]
a
[PHP]<input type=hidden name="comments" value="<?=$data[comments]?>">[/PHP]
-
Ecco ora è sorto un nuovo problemino....
Come detto ho fatto in modo che il link che si crea per la visualizzazione del PDF abbia come nome il nome del PDF stesso.
Il problema sorge quando il file PDF nel nome ha un carattere accentato o "speciale".. tipo "/".
Dovrei usare la funzione urlencode ?
Idee? suggerimenti?
Come sempre.. grazie
-
oppure usare "str_replace" qui?
[PHP]
$nome_file=$comments._.$model.$estensione; //crea il nome per il file
[/PHP]
-
Dopo 4 mesi di forzata assenza da qui ( torno con i miei questi....
forse era meglio rimanere ammalataRiprendendo questo codice che fa l'upoload della foto passata da un'altra pagina con un banale
[PHP]
<form action='addphoto.php' method=post enctype='multipart/form-data' onSubmit='return checkrequired(this)'>
<td colspan=2 valign='top' class='hint'>
<?
// only display image upload form if GD version meets requirements
if(checkgd()) {
echo "
<input class='text' type=file name='image' alt='required' style='width:250'> <img src='common/arrow_left.jpg' align='absmiddle'><br>ecc ecc ecc
[/PHP]
Ovviamente, mettendo brutalmente più campi Input type=file mi processa solo l'ultima foto scelta.
Come posso fare in modo che la pagina qui sotto mi prenda in considerazione tutte le foto selezionate e passate tramite POST?Qui di seguito il codice di addphoto.php
[PHP]
<?require 'config/config.php';
require 'functions.php';
require 'global.php';
require 'secure.php';
// aggiungi foto alla tabella foto
if($image) {
// genera icode $icode = substr(time().rand(10000,99999),-15); // copia la foto nella cartella temp $tempname = './temp/'.$icode.'TEMP.JPG'; copy($image, $tempname); unlink($image); // acquisci dettagli foto $properties = getimagesize($tempname); if($properties[2] == 2) { // if the image is a .jpg $source = imagecreatefromjpeg($tempname); // create image identifier $imagex = imagesx($source); $imagey = imagesy($source); // copia foto nella cartella foto $imagename = $icode.'IMG.JPG'; // this will be stored in db $image_loc = "./images/$imagename"; copy($tempname, $image_loc); unlink($tempname); // ridimensiona foto se necessario if($imagex > 576) { $newy = round((576 * $imagey) / $imagex); //echo "imagex = $imagex<br>imagey = $imagey<br>newy = $newy<br>"; exit(); // TEST resize($image_loc, 576, $newy, $image_loc); } // crea il thumbnail PER LA LISTA $thumbname = $icode.'TMB.JPG'; // this will be stored in db $thumb_loc = "./thumbs/$thumbname"; $thumbx = $maxx; $thumby = round(($imagey * $thumbx) / $imagex); if($thumby > $maxy) { $thumbx = round(($thumbx * $maxy) / $thumby); $thumby = $maxy; } if(resize($image_loc, $thumbx, $thumby, $thumb_loc)) { // salva i dati $link = mysql_connect($dbhost, $dbuser, $dbpass); $query = "INSERT INTO $dbimg VALUES('0','$ccode','$thumbname','$imagename')"; mysql_db_query($dbname, $query, $link); // aggiorna il numimages $query = "UPDATE $dbvin SET numimages=numimages+1 WHERE ccode='$ccode'"; mysql_db_query($dbname, $query, $link); mysql_close($link); // torna alla pagina sommario echo "<script language='JavaScript'> window.location='sommario.php?ccode=$ccode'; </script>"; exit(); } } @unlink($tempname); // cancella il file temp in caso di errore
}
?>
[/PHP]Grazie per le dritte, sono sempre ben accette!