Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    21

    Inserire file in un database

    Ciao a tutti,
    ho questo problema. Devo inserire in una tabella di un database files di vario tipo (pdf, presentazioni, immagini) tramite un form.
    In un'altra pagina dovrei visualizzare tutta questa tabella, con la possibilità di scaricare tramite i rispettivi link, il pdf, la presentazione e l'immagine per ciascun record.
    Conviene che memorizzi i file dentro la tabella? Oppure c'è un altro modo comunque sicuro?
    Quello che non riesco a fare è come memorizzare un file generico dentro a un campo di un record e poi risalire ad esso con un download.
    Non riesco a trovare della documentazione a riguardo...

    Ringrazio in anticipo!
    Matteo

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    nel db crei un campo nel quale memorizzi il percorso die file
    poi per far scaricare i file

    Codice PHP:
    echo "<TABLE BORDER=8 WIDTH=40% ALIGN=CENTER BORDER=3>
    <TR><TH>Fai clic sui link per scaricare i file</TH></TR>"
    ;
    # elenco dei contenuti di una cartella con link
    $cartella opendir("upload/".$riga['type']."/");
    while (
    $file readdir($cartella)) {
    $array_file[] =$file;
    }
    foreach (
    $array_file as $file) {
    echo 
    "<TR><TD><CENTER>";
    if ( 
    $file == ".." || $file == ".") {
    continue;
    }
    $dimensioni_file=filesize("upload/".$riga['type']."/".$file);
    $dir="upload/".$riga['type']."/".$file;
    echo 
    "<a href=\"

    download.php?nome_file=
    $file&dimensioni_file=$dimensioni_file&dir=$dir

    \">
    $file</a>,
    "
    ;
    echo 
    "</TR></TD></CENTER>";

    Codice PHP:
    $nome_file=stripslashes($_GET['nome_file']);
    $dimensioni_file=stripslashes($_GET['dimensioni_file']);
    $dir=stripslashes($_GET['dir']);
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Type: application/html");
    header("Content-Description: File Transfer");
    header("Content-type: Application/octet-stream");
    header("Content-Disposition: attachment; filename=$nome_file");
    header("Content-Description: Download PHP");
    header("Content-Length: $dimensioni_file");
    readfile($dir); 
    oppure per un download per file specifici senza accettare file di tipo html o php o txt ecc
    ti do il codice per uno specifico

    Codice PHP:
    <?php
    /*
    // download.php
    // funzione per il download di un file anche residente in una parte
    // di filesystem non accessibile direttamente via WEB
    //
    // funzione originale reperibile all'indirizzo
    // [url]http://it2.php.net/manual/en/function.header.php[/url]
     
    // setto la dir base in cui si debbono trovare i file da scaricare
    /*include 'include/conf.inc.php';
    $id=stripslashes($_POST['IDobject']);
    $sql=mysql_query("select type from category where IDcat='$id';");
    $riga=mysql_fetch_array($sql);
    "upload/".$riga['type']; 
     


    $basedir =$_GET['dir'];
    echo $basedir;
    // controllo che il nome del file non sia malformato
    // filename del tipo ../../../etc/passwd creano buchi di sicurezza
    $download_file = $_GET['filename'];
    $have_dir = dirname ($download_file);
    if ($have_dir != '.') die ('Nome file malformato! non ci provare ;-P');
     
    function dl_file($download_file) {
       //Informazioni sul file che si vuole scaricare
       $len = filesize($download_file); //dimensione del file
       $file_extension = strtolower(substr(strrchr($_GET['filename'], "."),1));
     
       //Setta il  Content-Type, basandosi sull'estensione del file
       switch( $file_extension ) {
         case "pdf": $ctype="application/pdf"; break;
         case "exe": $ctype="application/octet-stream"; break;
         case "zip": $ctype="application/zip"; break;
         case "doc": $ctype="application/msword"; break;
         case "xls": $ctype="application/vnd.ms-excel"; break;
         case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
         case "gif": $ctype="image/gif"; break;
         case "png": $ctype="image/png"; break;
         case "jpeg":
         case "jpg": $ctype="image/jpg"; break;
         case "mp3": $ctype="audio/mpeg"; break;
         case "wav": $ctype="audio/x-wav"; break;
         case "mpeg":
         case "mpg":
         case "mpe": $ctype="video/mpeg"; break;
         case "mov": $ctype="video/quicktime"; break;
         case "avi": $ctype="video/x-msvideo"; break;
         
         // Estensioni che non dovrebbero essere scaricate per sicurezza
         case "php":
         case "htm":
         case "html":
         case "txt": die("[b]Non pu&amp;amp;amp;ograve; essere usata per file .". $file_extension ." ![/b]"); break;
         default: $ctype="application/force-download";
       }
     
       // Comincio ad inviare gli headers
       header("Pragma: public");
       header("Expires: 0");
       header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
       header("Cache-Control: public");
       header("Content-Description: File Transfer");
      
       // Setto il content-type
       header("Content-Type: $ctype");
     
       // Forzo il download del file
       $header="Content-Disposition: attachment; filename=".$_GET['filename'].";";
       header($header );
       header("Content-Transfer-Encoding: binary");
       header("Content-Length: ".$len);   
       @readfile($file);
    }
    dl_file($basedir.$download_file);
    */
    $nome_file=stripslashes($_GET['nome_file']);
    $dimensioni_file=stripslashes($_GET['dimensioni_file']);
    $dir=stripslashes($_GET['dir']);
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Type: application/html");
    header("Content-Description: File Transfer");
    header("Content-type: Application/octet-stream");
    header("Content-Disposition: attachment; filename=$nome_file");
    header("Content-Description: Download PHP");
    header("Content-Length: $dimensioni_file");
    readfile($dir);

    ?>

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    21
    Grazie, di sicuro ho uno spunto su cui approfondire. Purtroppo però non è per me molto immediata la cosa... tipo io vorrei avere un form col pulsante Sfoglia esempio:

    <form name="form" enctype="multipart/form-data" method="post" action="save_record.php">
    <input type="file" name="file">
    </form>


    uno per il documento pdf, e in generale uno per ogni file che devo caricare. Poi dentro save_record.php con i campi 'normali' ho per esempio:

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE) die ("Connection error. Check the config.inc.php file.");
    mysql_select_db($db_name, $db) or die ("Database selection error. Check the config.inc.php file.");
    $query = "INSERT INTO person (name, surname, room, tel, fax, webpage, email) VALUES ('$name', '$surname', '$room', '$telephone', '$fax', '$webpage', '$email')";
    if (mysql_query($query, $db))
    echo "The new person $name $surname has been inserted correctly.";
    else
    echo "Insertion error.";
    mysql_close($db);


    In questo esempio non ho messo i campi 'pdf' e 'slides', ma da quello che comprendo dovrei aggiungerli di tipo TEXT alla tabella 'person' inserendo l'indirizzo del relativo file e caricare ciascun file dentro una cartella tipo upload... boh! Sono un po' una schiappetta.. ho fatto un sito con un forum, con login e password utilizzando le sessioni. Di file non ho minima esperienza... se puoi magari essere un po' più alla mia portata!
    Ti ringrazio, un saluto!
    Matteo

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    21
    Un aggiornamento... sono riuscito a fare l'upload di file all'interno di una cartella del server manipolando un po' il codice che mi hai dato.

    Adesso nel server ho una cartella pdf e una cartella slides e li dentro mediante il form ho caricato i relativi file. Questo è il form:

    <form action="save_publication.php" method="post" enctype="multipart/form-data">
    <table width=300 border="0">
    <tr>
    <td>Title</td>
    <td><input type="text" name="title" maxlength="200" size="60">
    </td>
    </tr>
    ............
    <tr>
    <td>Pdf</td>
    <td><input name="pdf" type="file" id="pdf"> </td>
    </tr>
    <tr>
    <td>Slides</td>
    <td><input name="slides" type="file" id="slides"> </td>
    </tr>
    ........
    <tr>
    <td>BibTeX</td>
    <td><input type="textarea" name="bibtex" style="width: 96%; height: 200px; white-space: pre; overflow: auto; background:#F4F4F4;" wrap="off">
    </td>
    </tr>
    </table>
    </form>


    Mentre questo è il filesave_publication.php:

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE) die ("Connection error. Check the config.inc.php file.");
    mysql_select_db($db_name, $db) or die ("Database selection error. Check the config.inc.php file.");
    $query = "INSERT INTO publication (title, ... ,pdf, slides, ... , bibsource)
    VALUES ('$title',...,'$pdf','$slides',...,'$bibtex')";
    if (mysql_query($query, $db))
    echo "The new publication $title has been inserted correctly.";
    else
    echo "Insertion error.";

    mysql_close($db);
    // function upload($max_dim,$upload_dir,$filter,$extensions_ar ray,$form_filename)
    upload(10000000,"pdf/",1,array('.pdf'),'pdf');
    upload(10000000,"slides/",1,array('.pdf','.ppt','.pps'),'slides');


    Ho notato che nei campi 'pdf' e 'slides' della tabella c'è un percorso, ti propongo proprio il mio caso:

    /tmp/phpCaTeC1
    /tmp/phpmMCHWA


    ecc... E' un path temporaneo che non serve a nulla? Mi è venuto un dubbio... sicuramente i file sono stati caricati mediante la funzione upload nelle rispettive cartelle, questo è vero perchè funziona. Ma è possibile che ci sia una copia di questi file all'interno anche di queste strane directory? Posso utilizzarla e se si in che modo?

    Grazie, un saluto!
    Matteo

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    il percorso che vedi nella text è il percorso originale da dove prendi i file da caricare poi in un altra directory
    cmq sul chm della guida php.net ci sono abbastanza chiarimenti di come fare l'upload di file

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    21
    Ancora grazie! Ciao
    Matteo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.