• User Attivo

    Upload da JPG a PDF

    Ciao a tutti!,

    vorrei modificare uno script che partendo dalla compilazione di un form crea delle schede prodotto...dando la possibilità anche di uplodare delle foto relative al prodotto stesso.

    la modifica che vorrei fare è uploadare file PDF invece di JPG.
    Il primo passo che ho fatto è stato, nella pagina del form dove c'è lo "sfoglia" e poi il "carica" relativo alle immagini.. cambiare questo codice da così
    [PHP]<form action='addfoto.php' method=post enctype='multipart/form-data'>
    [/PHP]

    a così

    [PHP]<form action='addfoto.php' method=post enctype='application/pdf'>
    [/PHP]

    Ma leggendo in giro molti lasciano 'multipart/form-data'.

    qui di seguito invece il codice della pagina addfoto.php

    [PHP]
    <?

    require 'config/config.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 > 400) {
    		$newy = round((400 * $imagey) / $imagex);
    		//echo "imagex = $imagex<br>imagey = $imagey<br>newy = $newy<br>"; exit(); // TEST
    		resize($image_loc, 400, $newy, $image_loc);
    	}
    	
    	// crea il thumbnail
    	$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]

    E' ovvio che tutta la parte relativa al ridimensionamento e creazione thumbnails non interessa e va eliminata ma anche così facendo ed ovviamente sostituendo l'estensione jpg con pdf non riesco a fare l'upload.
    Non voglio la pappa pronta, solo qualche dritta su dove agire 🙂
    Grazie! :smile5:


  • User Attivo

    Sto anche dando un occhio a questo, più o meno è la stessa problematica no?
    Ovvero fare in modo che il record abbia il link con il pdf caricato...

    giorgiotave.it/forum/php-mysql/115790-assegnare-ad-ogni-articolo-un-file-pdf.html


  • User Attivo

    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 🙂


  • User Attivo

    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.


  • User Attivo

    @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 🙂


  • User Attivo

    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.


  • User Attivo

    @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!


  • User Attivo

    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?


  • User Attivo

    Risolto! :yuppi:

    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!


  • User Attivo

    @Sara1985 said:

    Ciao tigrone! ma dormi meno di me??? :?:)
    Una volta ho anche visto l'alba! :sun:

    Comunque, contento che hai risolto.


  • User Attivo

    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!


  • User Attivo

    Risolto.. cambiando da

    [PHP]<input type=hidden name="comments" value="<?=$comments?>">[/PHP]

    a

    [PHP]<input type=hidden name="comments" value="<?=$data[comments]?>">[/PHP]


  • User Attivo

    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


  • User Attivo

    oppure usare "str_replace" qui?

    [PHP]
    $nome_file=$comments._.$model.$estensione; //crea il nome per il file
    [/PHP]


  • User Attivo

    Dopo 4 mesi di forzata assenza da qui ❌( torno con i miei questi....
    forse era meglio rimanere ammalata :mmm:

    Riprendendo 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!
    💋:ciauz: