Conatrollo file da uploadare

Ciao a tutti, ho un problema riguardo al controllo di alcuni dati: Le DIMENSIONI (witdh e height )

 e dimensioni in KB.

Il controllo lo vedo fare in modo che se per esmpio il file eccede in KB appia un messaggio di tipo alert con scritto "inserire un'immagine di massimo 30 kb" e lo stesso vale per le dimensioni. Il controllo deve essere fatto "all'istante" sempre sulla setassa pagina del form di inserimento in modo che i dati già inseriti nel form rimangano e si apral la finestra di tipo alert che avverte dell'errato inserimento.

Spero possiate darmi una mano ho una certa urgenza (aiutooo)

grazie!!!

 :bye:

inviato 10 anni fa
stellina
X 0 X

per calcolare il peso (byte) di un file si usa la funzione filesize.

Nel caso di un file appena "uploadato" potresti fare così:

$peso_file = filesize($_FILES['file_inviato']['tmp_name']);

if($peso_file > 30*1024)

{

   // mostri un messaggio di errore (30*1024 = 30KB)

Per la dimensione dell'immagine invece puoi usare getimagesize:

list($larghezza, $altezza, $tipo, $attr) = getimagesize($_FILES['file_inviato']['tmp_name']);

if($larghezza > 300 OR $altezza > 250)

{

   // mosta un messaggio di errore

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ma dove inserisco il controllo?

dopo L'INSERT e prima di mysql_query?

risposto 10 anni fa
stellina
X 0 X

questi controlli non richiedono nessuna operazione preliminare, pertanto conviene farli il prima possibile in modo da non fare operazioni inutili in caso di insuccesso

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

non funziona,

prima ho fatto le solite cose:

    $nome_file_temporaneo1 = $_FILES['file_inviato1']['tmp_name'];     $nome_file_vero1 = $_FILES['file_inviato1']['name'];     $tipo_file1 = $_FILES['file_inviato1']['type'];

    $dati_file1 = file_get_contents($nome_file_temporaneo1);

    $dati_file1= addslashes($dati_file1);

   $peso_file = filesize($_FILES['file_inviato1']['tmp_name']);    if($peso_file > 64*1024)    {          echo "<script type=\"text/javascript\"> alert(\"Immagine supera la dimensione massima consentita\"); </script>";    }

    $query1 = "INSERT INTO tabella_files SET                     nome_file = '$nome_file_vero1',                     tipo_file = '$tipo_file1',                     dati_file = '$dati_file1'";

if (@mysql_query($query1) ) {    echo "<p align=center>SUCCESSO!!";

} else {    exit('<p>Errore: ' . mysql_error() . '</p>'); }

...e poi ho il form

<form name="theForm" onSubmit="return form_validator(this)" method=post enctype="multipart/form-data" action="inserisci_new6.php"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="65536" >

Il controllo sul peso però non lo fa :-( nel DB mi inserisce solo il nome del file e non il tipo.

risposto 10 anni fa
stellina
X 0 X

certo che non funziona, hai fatto in modo che venisse visualizzato un messaggio se la dimensione del file è eccessiva. Ma mica hai impedito l'esecuzione della query! :excl:

Se guardi il codice noterai che l'IF sulla dimensione del file decide solo se mostrare o meno un messaggio di errore. In tutti i casi la query viene eseguita.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

quindi come dovrei modificare il codice??

scusa non vorrei essere insistente ma devo risolvere questo problema entro le 5 di questa sera e non riesco più a concludere   :'(

risposto 10 anni fa
stellina
X 0 X
<?php
$nome_file_temporaneo1 = $_FILES['file_inviato1']['tmp_name'];
$nome_file_vero1 = $_FILES['file_inviato1']['name'];
$tipo_file1 = $_FILES['file_inviato1']['type'];

// qui metto un eventuale messaggio di errore
$errore = '';

// qui dichiaro i massimi valori consentiti
$max_peso = 64; // espresso in KB
$max_larghezza = 300;
$max_altezza = 250;

// calcolo peso e dimensioni
$peso_file = filesize($_FILES['file_inviato1']['tmp_name']);
list($larghezza, $altezza, $tipo, $attr) = getimagesize($_FILES['file_inviato1']['tmp_name']);

if($peso_file > ($max_peso*1024))
{
   $errore = "<script type=\"text/javascript\"> alert(\"Immagine supera la dimensione massima consentita ($max_peso KB)\"); </script>";
}
else
{
   if($larghezza > $max_larghezza OR $altezza > $max_altezza)
   {
      $errore = "<script type=\"text/javascript\"> alert(\"Immagine supera le dimensioni massime consentite ($max_larghezza x $max_altezza)\"); </script>";
   }
}


// finiti i controlli se è tutto OK effettuo la query
if(!$errore)
{
   $dati_file1 = file_get_contents($nome_file_temporaneo1);
   $dati_file1= addslashes($dati_file1);
   $query1 = "INSERT INTO tabella_files SET
                    nome_file = '$nome_file_vero1', 
                    tipo_file = '$tipo_file1', 
                    dati_file = '$dati_file1'"; 

   if (@mysql_query($query1) )
   {
      echo "<p align=center>SUCCESSO!!";
   }
   else
   {
      exit('<p>Errore nella query: ' . mysql_error() . '</p>');
   }
}

// adesso mostro l'eventuale errore
echo $errore;

// infine mostro il form
?>
<form name="theForm" onSubmit="return form_validator(this)" method=post enctype="multipart/form-data" action="inserisci_new6.php">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="65536" >

Normalmente queste cose si pagano...  :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

per controllare dimensioni delle immagini dobbiamo avere GD installate vero?

ps

Normalmente queste cose si pagano...  :bye:

ti stai vendendo? :o

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

La funzione getimagesize non richiede la presenza dell'estensione GD

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

credo di aver fatto confusione con una funzione delle GD :'(

fa nulla.

come gianni sei un saggio  ;D

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda