Visualizzazione risultati 1 fino 7 di 7

Discussione: php caricare file sul db

  1. #1
    Guest

    Predefinito php caricare file sul db

    Ciao sapete dirmi come caricare un file sul db tipo un immagine...
    Codice PHP:
    $_FILES['file']['size'] non deve superare una cerca dimensione
    $_FILES
    ['file']['type'] deve essere formato immagine

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Qui trovi una guida su come fare l'uploader dei file (e il downloader!) con PHP e MySQL. Non l'ho testata su AV, ma non dovrebbero esserci problemi: http://www.php-mysql-tutorial.com/wi...database.aspx#

    Per quanto riguarda le tue richieste, ti dovrebbe bastare modificare l'uploader in modo che rifiuti il file quando:
    - ['type'] non inizia con la stringa 'image/'
    - ['size'] non supera la dimensione da te impostata.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Sai dirmi dove sbaglio....
    Codice PHP:
    <?php
    if(isset($_POST["carica"])){
    $nome_temporaneo = $_FILES['file']['tmp_name'];
    $nome = $_FILES['file']['name'];
    $size = $_FILES['file']['size'];
    $tipo = $_FILES['file']['type'];
    $contenuto = addslashes(file_get_contents($nome_temporaneo));

    if(
    $size < 50){
    if(
    eregi('image/',$tipo)){
    mysql_connect("localhost", "hotmailpower", "") or die("Impossibile connettersi al database");
    mysql_select_db("my_hotmaillpower") or die("Impossibile selezionare il database");

    if(
    mysql_query("INSERT INTO upload (nome,size,tipo,file)VALUES('$nome','$size','$tipo','$contenuto')")){
    echo
    "
    File caricato con successo.<br>
    Nome: <b>
    {$nome}</b><br>
    Tipo: <b>
    {$size}</b><br>
    Dimensione: <b>
    {$tipo}</b><br>";
    }else{
    echo
    "Errori nell'upload del file";
    }

    }else{
    echo
    "Il file non e un immagine";
    }}else{
    echo
    "Supera le dimensioni dell'upload per il file";
    }}
    ?>
    <form enctype="multipart/form-data" action="" name="File" method="post">
    <table border="0">
    <tr>
    <td>Carica un file:</td>
    </tr>
    <tr>
    <td><input class="text" type="file" name="file"></td>
    </tr>
    <tr>
    <td><input type="submit" name="carica" value="carica"></td>
    </tr>
    </table>
    </form>
    Ultima modifica di hotmailpower : 30-04-2010 alle ore 21.00.24

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Penso che il motivo principale sia questo:
    Codice PHP:
    if($size < 50){
    Sei sicuro che l'immagine deve occupare meno di 50 bytes?

    Poi giusto una correzione, ereg/i è ormai deprecata e in questo caso è anche inutile.
    Ti basta usare stripos

    Codice PHP:
    if(stripos($tipo, 'image/') !== false) {
    E magari aggiungi error_reporting(E_ALL) all'inizio dello script in modo da risolvere eventuali errori!

  5. #5
    Guest

    Predefinito

    ti ringrazio funziona...
    ma vorrei migliorare il codice per la sicurezza del sito come potrei fare.....
    codice:
    Codice PHP:
    <?php
    if(isset($_POST["carica"])){
    $nome_temporaneo = $_FILES['file']['tmp_name'];
    $nome = $_FILES['file']['name'];
    $size = $_FILES['file']['size'];
    $tipo = $_FILES['file']['type'];
    $contenuto = addslashes(file_get_contents($nome_temporaneo));

    if(
    $size < 50000){
    if(
    stripos($tipo, 'image/') !== false){
    mysql_connect("localhost", "hotmailpower", "") or die("Impossibile connettersi al database");
    mysql_select_db("my_hotmaillpower") or die("Impossibile selezionare il database");

    if(
    mysql_query("INSERT INTO upload (nome,size,tipo,file)VALUES('$nome','$size','$tipo','$contenuto')")){
    echo
    "
    File caricato con successo.<br>
    Nome: <b>
    {$nome}</b><br>
    Tipo: <b>
    {$tipo}</b><br>
    Dimensione: <b>
    {$size} kb</b><br>";
    }else{
    echo
    "Errori nell'upload del file";
    }

    }else{
    echo
    "Il file non e un immagine";
    }}else{
    echo
    "Supera le dimensioni dell'upload per il file";
    }}
    ?>
    <form enctype="multipart/form-data" action="" name="File" method="post">
    <table border="0">
    <tr>
    <td>Carica un file:</td>
    </tr>
    <tr>
    <td><input class="text" type="file" name="file"></td>
    </tr>
    <tr>
    <td><input type="submit" name="carica" value="carica"></td>
    </tr>
    </table>
    </form>

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non mi sembra di notare problemi di sicurezza, a parte un probabile rischio di SQL injection: prima di inserirlo nella query, almeno il nome ti consiglierei di "filtrarlo" attraverso la funzione mysql_real_escape_string().

    Se il tuo timore è quello che qualcuno possa caricarti degli script malevoli, non preoccuparti più di tanto: potrebbe anche riuscire a caricarli, ma su AV non riuscirebbero ad essere eseguiti...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    Guest

    Predefinito

    Vorrei che si aggiornasse la pagina il modulo non faccia di inviare di nuovo il file al db....
    Come posso fare che due nomi uguali nel db non esistano in caso se si accerta che ci siano la possibilità di cambiare il nome del file con un campo input....

    lo modificato cosi....
    Codice PHP:
    <?php
    if(isset($_POST["carica"])){
    $nome_temporaneo = $_FILES['file']['tmp_name'];
    $nome = mysql_real_escape_string($_FILES['file']['name']);
    $size = mysql_real_escape_string($_FILES['file']['size']);
    $tipo = mysql_real_escape_string($_FILES['file']['type']);
    $contenuto = addslashes(file_get_contents($nome_temporaneo));

    if(
    $size < 50000){
    if(
    stripos($tipo, 'image/') !== false){
    mysql_connect("localhost", "hotmailpower", "") or die("Impossibile connettersi al database");
    mysql_select_db("my_hotmaillpower") or die("Impossibile selezionare il database");

    if(
    mysql_query("INSERT INTO upload (nome,size,tipo,file)VALUES('$nome','$size','$tipo','$contenuto')")){
    echo
    "
    File caricato con successo.<br>
    Nome: <b>
    {$nome}</b><br>
    Tipo: <b>
    {$tipo}</b><br>
    Dimensione: <b>
    {$size} kb</b><br>";
    }else{
    echo
    "Errori nell'upload del file";
    }

    }else{
    echo
    "Il file non e un immagine";
    }}else{
    echo
    "Supera le dimensioni dell'upload per il file";
    }}
    ?>
    <form enctype="multipart/form-data" action="" name="File" method="post">
    <table border="0">
    <tr>
    <td>Carica un file:</td>
    </tr>
    <tr>
    <td><input class="text" type="file" name="file"></td>
    </tr>
    <tr>
    <td><input type="submit" name="carica" value="carica"></td>
    </tr>
    </table>
    </form>
    la tabella che uso e cosi che ne pensi...
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `upload` (
    `
    id` int(11) NOT NULL AUTO_INCREMENT,
    `
    nome` varchar(30) NOT NULL,
    `
    tipo` varchar(30) NOT NULL,
    `
    size` int(11) NOT NULL,
    `
    file` mediumblob NOT NULL,
    PRIMARY KEY (`id`)
    )
    ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    Ultima modifica di hotmailpower : 01-05-2010 alle ore 11.15.40

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •