Upload multiplo con archiviazione in cartella

  • Creatore Discussione Creatore Discussione Cosina
  • Data di inizio Data di inizio

Cosina

Utente Attivo
27 Dic 2016
101
0
16
Buongiorno a tutti, il problema è il medesimo, ma con due tipi diversi di form. Ho pensato, quindi, fosse meglio creare due post separati. L'aiuto che mi serve è per dare la possibilità agli utenti di caricare più file usando un solo campo di input. Ho trovato altre discussioni simili, ma usando il database, mentre io, in questo primo form, archivio i file in una cartella. Ecco il codice che utilizzo, ma che, ora, permette il caricamento di un solo file alla volta. Grazie mille per l'attenzione.

HTML:
HTML:
<form action="upload-multiple.php" method="post" enctype="multipart/form-data">
            <p><label>Full name:</label>
            <br><input class="field" type="text" name="name" required /></p>
            <p><label>E-mail:</label>
            <br><input class="field" type="email" name="email" required /></p>
            <p><label>Message: </label>
            <br><textarea  name="message" required ></textarea></p>
            <p><label>File:</label>
             <br><input type="file" value="uploadFile" name="userfile" ></p>
            <p class="p-captcha">Antispam: <br><img class="img-captcha" id="captcha" src="./captcha.php" alt="captcha"/>
               <a class="a-captcha" onclick="reload()"> &orarr;</a><br>
               <label><span class="span-captcha">Type the numbers</span></label><br>
               <input type="text" name="captcha" />
            </p>
            <div class="button-container">
               <input class="contact-button" type="reset" value="Reset">
               <input class="contact-button" type="submit" value="Send">
            </div>
         </form>

PHP:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name']);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name) && (mail($to, $subject, $message, $headers))){
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
 
Ciao Cosina se devi caricare piu file devi usare piu campi input di tipo file,uno per file da caricare solitamente....con form html normali è cosi
 
Ciao Cosina se devi caricare piu file devi usare piu campi input di tipo file,uno per file da caricare solitamente....con form html normali è cosi
Ciao, questo lo so fare, ma mi serviva l'altra soluzione. Ho trovato in rete diverse guide per farlo, mettendo:
<input type="file" value="uploadFile" name="userfile[]" multiple >
nel form html.
Funziona, ma gli esempi sono solo con il campo per l'upload, senza i campi di contatto con la notifica via email. Non sono stata capace di implementare le cose nel codice php in modo funzionante. Grazie
 
permette il caricamento di un solo file alla volta
Per risolvere questo problema devi usare un ciclo for nel codice php.
Innanzitutto questa riga la devi cambiare così (aggiungere le parentesi quadre sul name), in modo da indicare che è un array di file:
HTML:
<br><input type="file" value="uploadFile" name="userfile[]" ></p>

Poi, nel codice PHP devi fare in modo che consideri tutti i file, e non solo uno, quindi prima conti quanti sono i file caricati e poi fai un ciclo, in cui per ognuno esegui le stesse azioni che avevi scritto tu:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

//per ogni file caricato...
for($i=0;$i<$countfiles;$i++){

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'][$i];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'][$i];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'][$i] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'][$i];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name'][$i]);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name) && (mail($to, $subject, $message, $headers))){
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
//qui chiudo il for
}

Ah comunque ti consiglio di usare una libreria come PHPMailer per inviare mail, perché a volte usando la funzione mail() capita che le mail non arrivano.
 
Ah comunque ti consiglio di usare una libreria come PHPMailer per inviare mail, perché a volte usando la funzione mail() capita che le mail non arrivano.
Grazie, Tommy03. Domani provo il codice che mi hai dato. Sei stato gentilissimo. Valuterò anche il discorso della libreria PHPMailer, anche se non so come si implementa. Purtroppo, ho ancora poca dimestichezza con php. Ti saprò dire, intanto ti auguro una buona serata. Grazie ancora. Ciao
 
Per risolvere questo problema devi usare un ciclo for nel codice php.
Innanzitutto questa riga la devi cambiare così (aggiungere le parentesi quadre sul name), in modo da indicare che è un array di file:
HTML:
<br><input type="file" value="uploadFile" name="userfile[]" ></p>

Poi, nel codice PHP devi fare in modo che consideri tutti i file, e non solo uno, quindi prima conti quanti sono i file caricati e poi fai un ciclo, in cui per ognuno esegui le stesse azioni che avevi scritto tu:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

//per ogni file caricato...
for($i=0;$i<$countfiles;$i++){

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'][$i];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'][$i];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'][$i] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'][$i];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name'][$i]);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name) && (mail($to, $subject, $message, $headers))){
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
//qui chiudo il for
}

Ah comunque ti consiglio di usare una libreria come PHPMailer per inviare mail, perché a volte usando la funzione mail() capita che le mail non arrivano.

Ciao, ho provato, ma mi da un errore alla linea 30, che dovrebbe essere questa:

if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'])) {

L'errore segnalato è questo:

Warning: is_uploaded_file() expects parameter 1 to be string , array given in...........upload-multiple.php on line 30

Come devo correggere? Grazie mille
 
Ah si, mi ero dimenticato $i, riprova così:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

//per ogni file caricato...
for($i=0;$i<$countfiles;$i++){

  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'][$i];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'][$i];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'][$i] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'][$i];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name'][$i]);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name) && (mail($to, $subject, $message, $headers))){
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
//qui chiudo il for
}
 
Ah si, mi ero dimenticato $i, riprova così:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

//per ogni file caricato...
for($i=0;$i<$countfiles;$i++){

  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'][$i];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'][$i];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'][$i] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'][$i];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name'][$i]);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name) && (mail($to, $subject, $message, $headers))){
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
//qui chiudo il for
}

Provato. Ora mi esce questo avviso:

Notice: Undefined variable: countfiles in /var/..................upload-multiple3.php on line 32

Che corrisponde alla linea:

for($i=0;$i<$countfiles;$i++){
 
Sorry devi mettere $numfiles al posto di $countfiles
Allora, adesso funziona l'invio con l'archiviazione nella cartella, ma c'è ancora un problemino. Mi arriva una notifica email per ogni file inviato. Se l'utente invia 3 file, a me arrivano 3 email di notifica. Scusa se ti stresso
 
Ah si, il problema è che il codice che invia la mail è dentro al for e viene eseguito per ogni file, quindi bisogna metterlo fuori:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

$numsuccess = 0;

//per ogni file caricato...
for($i=0;$i<$numfiles;$i++){

  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'][$i];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'][$i];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'][$i] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'][$i];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name'][$i]);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name)){
$numsuccess++;
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
//qui chiudo il for
}
if($numsuccess == $numfiles){
     mail($to, $subject, $message, $headers);
}
Non so se la mail deve arrivarti in ogni caso, però con questo codice viene inviata solo se tutti i file sono caricati con successo, se invece vuoi che venga inviata sempre e comunque, bisogna spostare la riga con mail() prima del for.

Comunque, ho visto anche l'altra discussione che avevi aperto per l'invio di allegati multipli per mail, e credo proprio che ti converrebbe passare da usare mail() a PHPMailer, perché la funzione mail() fa fatica ad inviare allegati e spesso ci sono problemi con l'invio a determinati domini mail (tipo una volta la usavo e inviava mail solo a Gmail ma non a Virgilio, Libero, ecc). Se vuoi dare un'occhiata, questa è la pagina github della libreria PHPMailer.
 
Ah si, il problema è che il codice che invia la mail è dentro al for e viene eseguito per ogni file, quindi bisogna metterlo fuori:
PHP:
session_start();
if ($_POST['captcha'] != $_SESSION['captcha']) {
    echo '<script type="text/javascript">alert("Captcha errato / Incorrect captcha");window.history.go(-1);</script>';
    die();
}

//Defining mail settings
$to = "[email protected]";
$subject= "Sending files";
$todayis = date("l, F j, Y, g:i a") ;

$name = $_POST['name'];
$email = $_POST['email'];
$message = ($_POST['message']);

$message = "
Date: $todayis
Name: $name
Email: $email
Message: $message
";


//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = './uploads/';

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

$numsuccess = 0;

//per ogni file caricato...
for($i=0;$i<$numfiles;$i++){

  // per prima cosa verifico che il file sia stato effettivamente caricato
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
     echo '<script type="text/javascript">alert("Nessun file inviato /No file sent");window.history.go(-1);</script>';
}

//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'][$i];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'][$i];


// limito la dimensione massima a 4MB
if ($_FILES['userfile']['size'][$i] > 4194304) {
  echo '<script type="text/javascript">alert("Il file supera le dimensioni concesse / The file exceeds the size allowed");window.history.go(-1);</script>';
}

// verificare se il file esiste gia nella cartella
$target_file = './uploads/' . $_FILES['userfile']['name'][$i];
if (file_exists($target_file)) {
    echo '<script type="text/javascript">alert("Il file esiste gia / The file already exists");window.history.go(-1);</script>';
}

// verificare estensione file caricato
$ext_ok = array('jpg', 'png', 'doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name'][$i]);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo '<script type="text/javascript">alert("Il file ha una estensione non ammessa / The file has an extension not allowed");window.history.go(-1);</script>';
}

//copio il file dalla sua posizione temporanea alla mia cartella uploads
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name)){
$numsuccess++;
        echo '<script type="text/javascript">alert("Successo!");window.history.go(-1);</script>';
    }
    else {
        echo '<script type="text/javascript">alert("Error loading file");window.history.go(-1);</script>';
    }
//qui chiudo il for
}
if($numsuccess == $numfiles){
     mail($to, $subject, $message, $headers);
}
Non so se la mail deve arrivarti in ogni caso, però con questo codice viene inviata solo se tutti i file sono caricati con successo, se invece vuoi che venga inviata sempre e comunque, bisogna spostare la riga con mail() prima del for.

Comunque, ho visto anche l'altra discussione che avevi aperto per l'invio di allegati multipli per mail, e credo proprio che ti converrebbe passare da usare mail() a PHPMailer, perché la funzione mail() fa fatica ad inviare allegati e spesso ci sono problemi con l'invio a determinati domini mail (tipo una volta la usavo e inviava mail solo a Gmail ma non a Virgilio, Libero, ecc). Se vuoi dare un'occhiata, questa è la pagina github della libreria PHPMailer.

Grazie Tommy, ora funziona perfettamente. Certamente seguirò il tuo consiglio di provare ad usare PHPMailer, ma devo studiarci un po' perchè non l'ho ancora mai usato. Guarderò github. Sei stato molto gentile a dedicarmi il tuo tempo. Ti auguro una buona serata. Ciao :)
 
Ciao Tommy, scusa se disturbo ancora. Nel codice mi hai scritto questo appunto:

//conto quanti file sono stati caricati, se vuoi puoi mettere un limite con un if
$numfiles = count($_FILES['userfile']['name']);

Potresti, gentilmente, mostrarmi come implementare questo "if" per limitare il numero di file da allegare? Mille e mille grazie
 
Allora, puoi fare in due modi:
1) usi PHP, in questo caso riceverai un errore come gli altri (cioè il form si invia, ma poi torna indietro e mostra l'alert):
PHP:
if($numfiles > 5){
echo '<script type="text/javascript">alert("Puoi inviare al massimo 5 file");window.history.go(-1);</script>';
}
(questo codice va messo subito dopo la riga del $numfiles)

2) l'alternativa è usare Javascript, in questo modo se l'utente carica più di 5 file il form proprio non si invia:
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#send").click(function(){
var campo = $("#userfile");
if(parseInt(campo.get(0).files.length) > 5){
alert("Non puoi inviare più di 5 file");
}
});
});
</script>
Questo codice va messo nel file con il form, tra <head> e </head>, e inoltre devi aggiungere id="send" dentro all'input del bottone Send e id="userfile" dentro all'input con name userfile.
 
Allora, puoi fare in due modi:
1) usi PHP, in questo caso riceverai un errore come gli altri (cioè il form si invia, ma poi torna indietro e mostra l'alert):
PHP:
if($numfiles > 5){
echo '<script type="text/javascript">alert("Puoi inviare al massimo 5 file");window.history.go(-1);</script>';
}
(questo codice va messo subito dopo la riga del $numfiles)

2) l'alternativa è usare Javascript, in questo modo se l'utente carica più di 5 file il form proprio non si invia:
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#send").click(function(){
var campo = $("#userfile");
if(parseInt(campo.get(0).files.length) > 5){
alert("Non puoi inviare più di 5 file");
}
});
});
</script>
Questo codice va messo nel file con il form, tra <head> e </head>, e inoltre devi aggiungere id="send" dentro all'input del bottone Send e id="userfile" dentro all'input con name userfile.
Ti ringrazio, provo con entrambi i metodi. Grazie grazie grazie, ciao
 

Discussioni simili