Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 12-02-11, 00:33   #1 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
Question 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ì
Codice PHP:
<form action='addfoto.php' method=post enctype='multipart/form-data'
a così

Codice PHP:
<form action='addfoto.php' method=post enctype='application/pdf'
Ma leggendo in giro molti lasciano 'multipart/form-data'.

qui di seguito invece il codice della pagina addfoto.php

Codice 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_loc400$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
}
?>
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!
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 00:44   #2 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
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
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 00:55   #3 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
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
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 02:03   #4 (permalink)
 
L'avatar di tigrone
 
Data di registrazione: Oct 2009
Ubicazione: Garlasco... non sono stato io!!!!
Messaggi: 347
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.
__________________
www.tuo-web.com
tigrone non in linea   Rispondi citando
Vecchio 12-02-11, 03:42   #5 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
Quote:
tigrone Visualizza il messaggio
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

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 :-)
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 05:11   #6 (permalink)
 
L'avatar di tigrone
 
Data di registrazione: Oct 2009
Ubicazione: Garlasco... non sono stato io!!!!
Messaggi: 347
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:
Codice:
<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
Codice 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

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.
__________________
www.tuo-web.com
tigrone non in linea   Rispondi citando
Vecchio 12-02-11, 13:17   #7 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
Quote:
tigrone Visualizza il messaggio
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:
Codice:
<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
Codice 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

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
Codice PHP:
$nome_file=$data[codicescheda].$estensione 
Potrebbe essere?
Grazie ancora!

Ultima modifica di Sara1985 : 12-02-11 14:08.
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 13:59   #8 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
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?
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 14:56   #9 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
Risolto!

Nel formo ho aggiunto la voce

Codice:
<input type=hidden name="ccode" value="<?=$ccode?>">
e nella pagina upload ho modificato così

Codice PHP:
$nome_file=$ccode.$estensione//crea il nome per il file 
Un grazie a Tigrone per le dritte!
Sara1985 non in linea   Rispondi citando
Vecchio 12-02-11, 16:09   #10 (permalink)
 
L'avatar di tigrone
 
Data di registrazione: Oct 2009
Ubicazione: Garlasco... non sono stato io!!!!
Messaggi: 347
Quote:
Sara1985 Visualizza il messaggio
Ciao tigrone! ma dormi meno di me???
Una volta ho anche visto l'alba!

Comunque, contento che hai risolto.
__________________
www.tuo-web.com
tigrone non in linea   Rispondi citando
Vecchio 13-02-11, 19:50   #11 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
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
Codice PHP:
$nome_file=$comments.$estensione
Che

Codice PHP:
$nome_file=$data[comments].$estensione
il pdf viene uplodato senza nome, se faccio

Codice PHP:
echo "$data[comments]"
il dato viene stampato correttamente....
Che fare???
Grazie!
Sara1985 non in linea   Rispondi citando
Vecchio 13-02-11, 20:00   #12 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
Risolto.. cambiando da

Codice PHP:
<input type=hidden name="comments" value="<?=$comments?>">
a

Codice PHP:
<input type=hidden name="comments" value="<?=$data[comments]?>">
Sara1985 non in linea   Rispondi citando
Vecchio 22-02-11, 14:55   #13 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
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
Sara1985 non in linea   Rispondi citando
Vecchio 22-02-11, 15:12   #14 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
oppure usare "str_replace" qui?

Codice PHP:
$nome_file=$comments._.$model.$estensione//crea il nome per il file 
Sara1985 non in linea   Rispondi citando
Vecchio 31-01-12, 15:00   #15 (permalink)
User
 
Data di registrazione: Dec 2008
Messaggi: 101
Dopo 4 mesi di forzata assenza da qui torno con i miei questi....
forse era meglio rimanere ammalata

Riprendendo questo codice che fa l'upoload della foto passata da un'altra pagina con un banale

Codice 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
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

Codice 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_loc576$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

}



?>
Grazie per le dritte, sono sempre ben accette!
Sara1985 non in linea   Rispondi citando
Rispondi
Tags:



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:29.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.