[PHP] inviare form con allegato tramite una mail

iper00

Nuovo Utente
19 Feb 2019
1
0
1
Salve giovani.
Sono nuovo ed ho un piccolisssssimo problema!
Ho creato questo form da un sito che te li crea da zero, in html e con un php provvedo all'invio su un indirizzo email che ho scelto. Fin qui tutto bene! Il problema è la possibilità di mettere un allegato nell'html.....ho seguito varie guide sia qui che in giro su internet. Ma quando credevo di esserci riuscito, mi sbagliavo!
E' una sensazione orribile, che solo Voi potete comprendere :(
Ve ne sarei grato se ci dareste un'occhiata:

HTML

Codice:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>INTESTAZIONE</title>
<link rel="stylesheet" type="text/css" href="view.css" media="all">
<script type="text/javascript" src="view.js"></script>

</head>
<body id="main_body" >
  
    <div align="center"><img id="top" src="top.png" alt=""></div>
    <div id="form_container">
    <form action="elabora_.php" method="post" name = "utente" enctype="multipart/form-data">
        <h1><a>SOCIETA'</a></h1>
        <form id="form_47688" class="appnitro" enctype="multipart/form-data" method="post" action="">
                    <div class="form_description">
        <div align="center"><img src="logocapital.png"></div>
            <div align="center"><p>Servizio Assistenza Dipendenti</p></div>
        </div>                     
            <ul >
                    <li id="li_6" >
        <label class="description" for="element_6">CANTIERE DI APPARTENENZA </label>
        <div>
        <select class="element select medium" id="element_6" name="element_6">
            <option value="" selected="selected" required></option>
<option value="CANTIERE  DI APPARTENENZA" >CANTIERE DI APPARTENENZA</option>
<option value="ALTRO" >ALTRO - SPECIFICARE NEI DETTAGLI</option>
        </select>
        </div>
        </li>        <li id="li_2" >
        <label class="description" for="element_2">NUMERO POSIZIONE </label>
        <div>
            <input id="element_2" name="element_2" class="element text small" type="text" maxlength="5" value="" required pattern="[0-9]{1,5}"/>
        </div><p class="guidelines" id="guide_2"><small>Il numero di posizione è presente sulla Sua busta paga, in alto a sinistra.</small></p>
        </li>        <li id="li_1" >
        <label class="description" for="element_1">COGNOME E NOME </label>
        <div>
            <input id="element_1" name="element_1" class="element text medium" type="text" maxlength="255" value="" required pattern="[A-Z ]+" onkeyup="this.value = this.value.toUpperCase();"/>
        </li>        <li id="li_4" >
        <label class="description" for="element_4">NUMERO DI TELEFONO </label>
        <div>
            <input id="element_4" name="element_4" class="element text medium" type="text" maxlength="255" value="" required pattern="[0-9]+"/>
        </div>
        </li>        <li id="li_5" >
        <label class="description" for="element_5">EMAIL </label>
        <div>
            <input id="element_5" name="element_5" class="element text medium" type="text" maxlength="255" value="" required pattern=".+@.+..+[a-z]"/>
        </div>
        </li>        <li id="li_7" >
        <label class="description" for="element_7">TIPO DI ASSISTENZA </label>
        <span>
            <input id="element_7_1" name="element_7" class="element radio" type="radio" value="ERRORE IN BUSTA PAGA" required/>
<label class="choice" for="element_7_1">ERRORE IN BUSTA PAGA</label>
        </span>
        </li>        <li id="li_3" >
        <label class="description" for="element_3">DETTAGLIO </label>
        <div>
            <textarea id="element_3" name="element_3" class="element textarea large"required pattern="[A-Z ]+" onkeyup="this.value = this.value.toUpperCase();"></textarea>
<tr>
  <td>Allega file:</td>
  <td><input type="file" name="allegato" /></td>
</tr> 
                <li class="buttons">
 
                <input type="hidden" name="form_id" value="47688"/>
              
                <input id="saveForm" class="button_text" type="submit" name="invia" value="INVIA"/>
                <input id="reset" class="button_text" type="reset" name="cancella" value="CANCELLA"/>
                <li class="buttons">
PHP:
<html lang="it">
<head>

<meta charset="utf-8">
<title>INTESTAZIONE</title>
<link rel="stylesheet" href="stili.css">
</head>
<body>
<?php
$mail_to = "mail@mail.it";
$mail_subject = "RICHIESTA ASSISTENZA - ".$_POST['element_6'];
$mail_body .= "\n POSIZIONE: " .$_POST['element_2']. " \n";
$mail_body .= "\n NOMINATIVO: " .$_POST['element_1']. " \n";
$mail_body .= "\n CANTIERE: " .$_POST['element_6']. " \n";
$mail_body .= "\n EMAIL: " .$_POST['element_5']. " \n";
$mail_body .= "\n NUMERO DI TELEFONO: " .$_POST['element_4']. " \n";
$mail_body .= "\n TIPO DI ASSISTENZA: " .$_POST['element_7']. " \n";
$mail_body .= "\n DETTAGLIO: " .$_POST['element_3']. " \n";
$mittente .= "From: <".$_POST['element_1'].">\n";
$mail_body = stripslashes($mail_body);
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];
if (is_uploaded_file($allegato))
{
  $file = fopen($allegato,'rb');
  $data = fread($file, filesize($allegato));
  fclose($file);
  $data = chunk_split(base64_encode($data));
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";
  $msg .= "This is a multi-part message in MIME format.\n\n";
  $msg .= "--{$mime_boundary}\n";
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
  $msg .= $mail_body . "\n\n";
  $msg .= "--{$mime_boundary}\n";
  $msg .= "Content-Disposition: attachment; filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";
  $msg .= "--{$mime_boundary}--\n";
}
else
{
  $msg = $mail_body;
}
if (mail($mail_subject, $mittente, $msg, $headers))
{
  echo "<p>Mail inviata con successo!</p>
  <p>Sarà ns cura ricontattarla. Grazie!</p>";
}else{
  echo "<p>Errore!</p>";
}
?>
Ovviamente quest'ultimo è quello che ho provato per ultimo. Diciamo che da "$allegato = $_FILES['allegato']['tmp_name'];" in poi sta il problema perchè senza, con la chiusura dovuta, il form parte e arriva.
Sono nelle Vs mani.
Grazie.
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.007
295
83
@iper00
Quando posti codice PHP devi usare il tag
php.png
non il tag
code.gif

Grazie
Questa volta te lo ho corretto io
 
  • Like
Reactions: iper00