Upload multiplo con archiviazione in cartella

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>';
    }
 

illiterate2020

Utente Attivo
28 Set 2020
57
5
8
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
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
 

Tommy03

Utente Attivo
6 Giu 2018
616
58
28
20
Vicenza
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.
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
 

Tommy03

Utente Attivo
6 Giu 2018
616
58
28
20
Vicenza
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
}
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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++){
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
 

Tommy03

Utente Attivo
6 Giu 2018
616
58
28
20
Vicenza
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.
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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 :)
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
 

Tommy03

Utente Attivo
6 Giu 2018
616
58
28
20
Vicenza
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.
 

Cosina

Utente Attivo
27 Dic 2016
101
0
16
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
Autore Titolo Forum Risposte Data
Cosina Upload multiplo con invio allegati per email PHP 0
L [PHP] problema con upload e javascript (upload multiplo) Javascript 2
P Problema con lettura filesystem del client da server! Upload multiplo foto. PHP 5
R Upload multiplo con creazione di cartella PHP 10
C [PHP] Problema upload file (multiplo) PHP 1
P [PHP] Upload multiplo PHP 4
A Upload multiplo di immagini in PHP PHP 3
L upload + textarea + checkbox in un form multiplo Javascript 7
R upload immagini multiplo e ridimensionamento PHP 0
S [RISOLTO] Fatal error in Upload Multiplo di immagini PHP 2
R upload multiplo di file PHP 7
M upload multiplo di 2 immagini su database mysql PHP 23
L upload multiplo PHP 4
P Risuscito un vecchio script di upload immagine multiplo PHP 10
P Script per upload multiplo file Javascript 3
F upload multiplo Classic ASP 3
P Upload multiplo nella stessa cartella PHP 3
M Upload immagine con javascript problemi con FormData() Javascript 1
Z Upload protetto e sicuro PHP 1
L Modifica file upload in ASP Classic ASP 2
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
P Script upload immagini jQuery 0
L upload image tramite url e cache PHP 10
W Non fa l'upload PHP 0
L Upload di un'immagine all'interno di un database usando php PHP 6
S Upload file senza doverlo selezionare PHP 2
P Upload foto cover e profilo jQuery 0
G Upload file error Apache 0
R Modifica codice per l'upload di più file PHP 1
S Problemi con modulo upload video php (help!) PHP 0
S [PHP] Upload stesso file PHP 14
max1974 [Javascript] dropzone upload to server Javascript 0
S [ASP.Net] [ASP] Upload Image ASP.NET 6
F [PHP] Informazioni upload PHP 11
G [PHP] upload file in server: percorso cartella PHP 2
M Upload 4 file php PHP 11
M [ASP] Upload file da form controllo Classic ASP 5
D [PHP] Upload intera cartella PHP 2
felino [PHP] Uploadify: upload immagini PHP 0
M [PHP] Nome file, upload e rinominare PHP 2
R Configurazione upload ftp su dvr IP Cam e Videosorveglianza 3
M [PHP] upload di un file esistente overwrite PHP 1
N [PHP] Test per l'upload di file attraverso un bot Telegram PHP 2
L [PHP] upload con errore PHP 2
V [PHP] Upload Excel in db PHP 0
jailbait [PHP] Upload immagine e stampa a schermo PHP 0
G PHP upload dati ed immagine PHP 7
F [PHP] Validare form prenotazione appuntamento tattoo con upload image PHP 0
D [PHP] Upload encrypt image PHP 0

Discussioni simili