Forum di Matriz
Informazione su form di invio file - Versione stampabile

+- Forum di Matriz (https://www.matriz.it/forum)
+-- Forum: Programmazione Web (https://www.matriz.it/forum/forum-26.html)
+--- Forum: PHP e altri linguaggi lato server (https://www.matriz.it/forum/forum-27.html)
+--- Discussione: Informazione su form di invio file (/thread-204.html)



Informazione su form di invio file - lupo91 - 19-09-2008

Ciao a tutti, ho creato cercando qua e la un form per inviare dei file, in particolare mi servirebbe solo per inviare delle normali immagini di fumetti creati dai miei utenti per un mio progetto (nuova sezione al mio sito).

Ok, il form funziona tutto ok, in pratica fa inserire descrizione del file e la parte di upload (sfoglia, per caricare i file).

Io vorrei che l'immagine inviata prenda il nome del file della descrizione, in questo modo se il file è già esistente sul mio spazio mi viene meglio a gestire il tutto facendo un controllo con questo codice:

Codice PHP:
$nuovo_nome=$percorso.$ultimo_id.".jpg";
//nuovo nome dell'immagine
$inviato=file_exists($file_temp);
//verifica se il file è stato caricato sul server

if ($inviato) {

    echo(
"File già esistente, cambiare nome prego.");
    
// Già esistente

    


Inoltre vorrei che se il file fosse già esistente che venisse automaticamente modificato il nome, magari aggiungendo un numero.

Altra cosa, vorrei che mi fosse inviata una e-mail appena viene allegato il file.

E per ultimo vorrei un controllo in modo che i file inviati siano solo ed esclusivamente immagine nelle estensioni più conosciute come: jpg, gif...
in modo che non vengano inviati virus o file che danneggerebbero il sito.

Il codice già creato del file che gestisci gli upload è il seguente:
Codice PHP:
<?php
// Nelle versioni di PHP precedenti alla 4.1.0 si deve utilizzare  $HTTP_POST_FILES anzichè 
// $_FILES.
$uploaddir 'upload/';
$uploadfile $uploaddir basename($_FILES['userfile']['name']);

//Di seguito l'aggiunta:
$nuovo_nome=$percorso.$ultimo_id.".jpg";
//nuovo nome dell'immagine
$inviato=file_exists($file_temp);
//verifica se il file è stato caricato sul server

if ($inviato) {

    echo(
"File già esistente, cambiare nome prego.");
    
// Già esistente

    
}

echo 
"<pre>";
if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo 
"File inviato correttamente.\n";
} else {
    echo 
"Possibile attacco tramite file upload!\n"
}
echo 
'Alcune infromazioni di debug:';
print_r($_FILES); 

print 
"</pre>";

?>

Se vi servono altra info io sono qui. Big Grin


RE: Informazione su form di invio file - Mattia - 19-09-2008

Ho creato questo script molto velocemente e senza provarlo, quindi potrebbero esserci degli errori:
Codice PHP:
<?php
$estensioni 
= array('jpg','jpeg','png','gif'); // Elenco delle estensioni dei file che si possono caricare
$uploaddir 'upload/'// Percorso della cartella in cui caricare i file
$to 'pippo@pippo.it'// Indirizzo e-mail a cui spedire la notifica del caricamento del file
$err = array();
$descrizione trim(str_replace('/',' ',$_POST['descrizione']));
if(
$descrizione=='')
    
$err[] = 'Devi inserire la descrizione.';
$ext strtolower(substr(strrchr($_FILES['userfile']['name'],'.'),1));
$counter count($estensioni);
$ok false
for($i=0;$i<$counter;$i++)
    if(
$ext==strtolower($estensioni[$i])){
        
$ok true;
        break;
    }
if(!
$ok){
    
$err[] = 'Il file ha un\'estensione non valida.';
}
if(empty(
$err)){
    
$i '';
    while(
file_exists($uploaddir.$descrizione.$i.'.'.$ext))
        if(!
is_int($i))
            
$i 2;
        else
            
$i++;
    
$uploadfile $uploaddir.$descrizione.$i.'.'.$ext;
    if(!
move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile))
        
$err[] = 'C\'&egrave; stato un problema nel caricamento del file.';
}
if(empty(
$err)){
    
mail($to,'File caricato','&Egrave; stato caricato il file '.$descrizione.$i.'.'.$ext);
    echo 
'<p>File caricato correttamente.</p>';
} else {
    echo 
'<ul>';
    
$counter count($err);
    for(
$i=0;$i<$counter;$i++)
        echo 
'<li>'.$err[$i].'</li>';
    echo 
'</ul>';
}
?>



RE: Informazione su form di invio file - lupo91 - 19-09-2008

Mi da il seguente errore:

Codice:
Parse error: syntax error, unexpected T_FOR in /home/mhd-01/www.cimuvi.org/htdocs/upload.php on line 12



RE: Informazione su form di invio file - Mattia - 19-09-2008

Al posto di:
Codice PHP:
$ok false 

Metti:
Codice PHP:
$ok false



RE: Informazione su form di invio file - lupo91 - 19-09-2008

Perfetto funziona.

I file vengono inviati correttamente, e invio file con nome uguale aggiunge il numero e quelli di estensione diversa non li fa inviare.

Per ringraziarti inserisco il sito tra i ringraziamenti.


RE: Informazione su form di invio file - Mattia - 19-09-2008

OK, grazie del link!