allegato form

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
ciao a tutti seguendo un po di guide ho creato una form da mandare ad un email con la possibilità di allegare un file.

ho solo un problema che quando il file non è txt non parte quasi mai. al contrario se invio un txt arriva sempre.

mi potete aiutare fare qualche accorgimento al codice?

Grazie
Andrea

ecco l'html
Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Form invio email</title>
<style type="text/css">
body {
    background-image: url(/it/sfondoform.PNG);
    background-repeat: repeat;
    color: #ffffff;
    font-family: Verdana, sans-serif;
    font-size: 14px;
}
 
#form {
    width: 450px;
    margin: 0px auto;
    background: #222;
    padding: 25px;
    overflow: hidden;
 
    -moz-border-radius: 0px;
    -webkit-border-radius: 20px;
    border-radius: 30px;
}
 
h1 {
    font-size: 12px;
    color: #FCCC69;
    margin-bottom: 5px;
	text-align:center;
}

label, input, textarea { /* Stili comuni agli elementi del form */
    color: #dedede; /* Colore del testo */
    float: left; /* Float a sinistra */
    font-family: Verdana, sans-serif; /* Tipo di carattere per il testo */
    margin: 5px 0; /* Margini */
	border-radius: 5px;
}
label { /* Stili per la label */
    display: block; /* Impostiamo la label come elemento blocco */
    line-height: 20px; /* Altezza di riga */
    width: 150px; /* Larghezza */
}
 
input, textarea { /* Stili per il campo di testo e per la textarea */
    background: #2C4DE9; /* Colore di sfondo */
    border: 3px solid #ffffff; /* Bordo */
    color: #fff; /* Colore del testo */
    height: 25px; /* Altezza */
    line-height: 25px; /* Altezza di riga */
    width: 200px; /* Larghezza */
    padding: 0px 5px; /* Padding */
}
 
input { padding-left: 10px;
 
textarea { /* Stili specifici per la teaxtarea */
    background: #1C1C1C; /* Sfondo  */
    font-size: 14px;
    height: 200px;
    width: 320px;
    overflow: hidden; /* disabilitare la scrollbar in IE */
}
</style>
</head>

<body>
<form name="mailform" action="formmail.php" method="POST" enctype="multipart/form-data">
<div id="form">
 <h1>Compila il form sottostante per candidarti<br /><br />
    *Campi obbligatori</h1>

<input type="hidden" name="destinatario" value="[email protected]">

<table border="0">
<tr>
  <td><label>Tua Mail*</label></td>
  <td><input type="text" name="mittente" value="" /></td>
</tr>

<tr>
  <td><label>Oggetto*</label></td>
  <td><input type="text" name="oggetto" value="" /></td>
</tr>

<tr>
    <td><label>Nome*</label></td>
    <td><input type="text" name="nome" /><br /></td>
  </tr>

   <tr>
    <td><label>Cognome*</label></td>
    <td><input type="text" name="cognome" /><br /></td>
  </tr>

  <tr>
    <td><label>Data di nascita*</label> </td>
    <td><input type="text" name="datanasc" value="gg/mm/aaaa" /><br /></td>
  </tr>

  <tr>
    <td><label>Sesso*</label> </td>
    <td><input type="text" name="sesso" value="M/F" /><br /></td>
    </tr>

  <tr>
    <td><label>Codice fiscale*</label></td>
    <td><input type="text" name="codfisc" /><br /></td>
  </tr>

  <tr>
    <td><label>Città*</label></td>
    <td><input type="text" name="citta" /><br /></td>
  </tr>

  <tr>
    <td><label>Indirizzo*</label></td>
    <td><input type="text" name="indirizzo" /><br /></td>
  </tr>

  <tr>
    <td><label>Cap*</label></td>
    <td><input type="text" name="cap" /><br /></td>
  </tr>

  <tr>
    <td><label>Telefono*</label></td>
    <td><input type="text" name="telefono" /><br /></td>
  </tr>
  
<tr>
  <td><label>Messaggio</label></td>
  <td><textarea cols="20" rows="4" name="messaggio"></textarea></td>
  </tr>

<tr>
  <td><label>Allega file</label></td>
  <td><input type="file" name="allegato" /></td>
</tr>
    
<tr>
    <td><label><a href="/Home/lavora%20con%20noi/condizioni.html" target="_blank" >Privacy</a></label></td>
    <td> <input name="privacy" type="checkbox" value="html" checked="checked" /></td>
  </tr>

<tr>
  <td> <input type="submit" name="Submit" value="Invia!" /></td>
    <td>  <input type="reset" name="Submit2" value="Cancella" /></td>
</tr>

</table>
</div
</form>
</body>
</html>

php
Codice:
<?php
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$datanasc=$_POST['datanasc'];
$sesso=$_POST['sesso'];
$codfisc=$_POST['codfisc'];
$citta=$_POST['citta'];
$indirizzo=$_POST['indirizzo'];
$cap=$_POST['cap'];
$telefono=$_POST['telefono'];
$privacy=$_POST['privacy'];
$Submit=$_POST['Submit'];

// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];

// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mittente;
$msg = "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  // Apro e leggo il file allegato
  $file = fopen($allegato,'rb');
  $data = fread($file, filesize($allegato));
  fclose($file);

  // Adatto il file al formato MIME base64 usando base64_encode
  $data = chunk_split(base64_encode($data));

  // Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  
  // Aggiungo le intestazioni necessarie per l'allegato
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $msg .= "This is a multi-part message in MIME format.\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Questa è la parte "testuale" del messaggio
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
  $msg .= $messaggio . "\n\n";
  $msg .= $nome . "\n\n";
  $msg .= $cognome . "\n\n";
  $msg .= $datanasc . "\n\n";
  $msg .= $sesso . "\n\n";
  $msg .= $codfisc . "\n\n";
  $msg .= $citta . "\n\n";
  $msg .= $indirizzo . "\n\n";
  $msg .= $cap . "\n\n";
  $msg .= $telefono . "\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Aggiungo l'allegato al messaggio
  $msg .= "Content-Disposition: attachment;\n";
  $msg .= " filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";

  // chiudo con il separatore
  $msg .= "--{$mime_boundary}--\n";
}
else
{
  $msg = $messaggio;
}

// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
  echo "<p>Mail inviata con successo!</p>";
}else{
  echo "<p>Errore!</p>";
}
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Prova a sostituire gli headers che non sono uguali a come li hai scritti tu
poi non mi pare che esista il parametro rb per la funzione fopen()
PHP:
$file = fopen($allegato, 'rb');
prova con r
PHP:
$file = fopen($allegato, 'r');
 

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
Grandissimoooooooooooo arriva finalemente anche il doc e il pdf
grazie mille

ora ho un altra domanda come faccio per mettere i campi obbligatori?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
nel link postato ci sono anche i controlli sui campi obbligatori
in generale si puo fare in questo modo
PHP:
<?php

$controllo_campi_obbligatori = array();

$campi_obbligatori = array("nome", "cognome", "codfisc");

foreach ($campi_obbligatori as $value) {

    if (!isset($_POST[$value]) || empty($_POST[$value])) {

        $controllo_campi_obbligatori[] = "il campo $value è un campo obbligatorio";

    }
}

if (count($controllo_campi_obbligatori) == 0) {

    // codice per iviare la mail

} else {

    // campi obbligatori non completi

}
?>
 

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
grazie mille funziona.

Ultimissima cosa spero cosi da non romperti più
è che mi vengono man mano le cose che voglio aggiustare :p

io vorrei che le le scritte che provengono dal php ti mail spedita errore siano più grandi e colorate solo nel php non so come formattarle
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
posta come le stampi
dovrai aggiungere del css tipo
Codice:
p.error {
    color:red;
    font-size: 22px;
}
 

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
ma dove lo devo aggiungere? nel html o nel php?

Ma poi invece per far si che il messaggio di errore venga visualizzato nella stessa pagina del form come si fa?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ma dove lo devo aggiungere? nel html o nel php?
nell'html trai i tag <style> e </style> e l'errore devi racchiuderlo nela tag p con classe error
HTML:
<p class='errore'> messaggio di errore </p>
Ma poi invece per far si che il messaggio di errore venga visualizzato nella stessa pagina del form come si fa?
metti tutto in una pagina sia il codice php che quello html
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
la pagina stessa
non potrà pero avere estensione html ma php
PHP:
<?php
if (isset($_POST['invia']) && $_POST['invia'] == "Invia") {
    // codice per invio mail
} else {
    ?>
    <form method='post' action="<?php echo $_SERVER['PHP_SELF']; ?>">

        <input type="submit" name="invia" value="Invia"/>
    </form>
    <?php
}
?>
 

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
non ho ben capito come devo metterlo pero guardando un vacchio php ho aggiunto la possibilità di far vedere il messaggio sotto il form
unico problema è che quando lo apro gia mi fa vedere il messaggio con scritto campi mancanti
intero codice php
Codice:
<?php
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$datanasc=$_POST['datanasc'];
$sesso=$_POST['sesso'];
$codfisc=$_POST['codfisc'];
$citta=$_POST['citta'];
$indirizzo=$_POST['indirizzo'];
$cap=$_POST['cap'];
$telefono=$_POST['telefono'];
$privacy=$_POST['privacy'];
$Submit=$_POST['Submit'];

$controllo_campi_obbligatori = array();

$campi_obbligatori = array("mittente","oggetto","messaggio","nome", "cognome","datanasc","sesso", "codfisc","citta","indirizzo","cap","telefono","privacy");

foreach ($campi_obbligatori as $value) {

    if (!isset($_POST[$value]) || empty($_POST[$value])) {

        $controllo_campi_obbligatori[] = "il campo $value è un campo obbligatorio";

    }
}

if (count($controllo_campi_obbligatori) == 0) {

// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];

// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $mittente;
$msg = "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
  // Apro e leggo il file allegato
  $file = fopen($allegato,'r');
  $data = fread($file, filesize($allegato));
  fclose($file);

  // Adatto il file al formato MIME base64 usando base64_encode
  $data = chunk_split(base64_encode($data));

  // Genero il "separatore"
  // Serve per dividere, appunto, le varie parti del messaggio.
  // Nel nostro caso separerà la parte testuale dall'allegato
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  
  // Aggiungo le intestazioni necessarie per l'allegato
  $headers .= "\nMIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed;\n";
  $headers .= " boundary=\"{$mime_boundary}\"";

  // Definisco il tipo di messaggio (MIME/multi-part)
  $msg .= "This is a multi-part message in MIME format.\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Questa è la parte "testuale" del messaggio
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
  $msg .= $messaggio . "\n\n";
  $msg .= $nome . "\n\n";
  $msg .= $cognome . "\n\n";
  $msg .= $datanasc . "\n\n";
  $msg .= $sesso . "\n\n";
  $msg .= $codfisc . "\n\n";
  $msg .= $citta . "\n\n";
  $msg .= $indirizzo . "\n\n";
  $msg .= $cap . "\n\n";
  $msg .= $telefono . "\n\n";

  // Metto il separatore
  $msg .= "--{$mime_boundary}\n";

  // Aggiungo l'allegato al messaggio
  $msg .= "Content-Disposition: attachment;\n";
  $msg .= " filename=\"{$allegato_name}\"\n";
  $msg .= "Content-Transfer-Encoding: base64\n\n";
  $msg .= $data . "\n\n";

  // chiudo con il separatore
  $msg .= "--{$mime_boundary}--\n";
}
else
{
  $msg = $messaggio;
}

// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
  $ok="Mail inviata con successo!";
}else{
  $ok="Errore!";
}

} else {

    // campi obbligatori non completi
	$ok="Campi mancanti!";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Form invio email</title>
<style type="text/css">
body {
    background-image: url(/Home/lavora%20con%20noi/sfondoform.PNG);
    background-repeat: repeat;
    color: #ffffff;
    font-family: Verdana, sans-serif;
    font-size: 16px;
}
 
#form {
    width: 450px;
    margin: 0px auto;
    background: #222;
    padding: 25px;
    overflow: hidden;
 
    -moz-border-radius: 0px;
    -webkit-border-radius: 20px;
    border-radius: 30px;
}
 
h1 {
    font-size: 12px;
    color: #FCCC69;
    margin-bottom: 5px;
	text-align:center;
}

label, input, textarea { /* Stili comuni agli elementi del form */
    color: #dedede; /* Colore del testo */
    float: left; /* Float a sinistra */
    font-family: Verdana, sans-serif; /* Tipo di carattere per il testo */
    margin: 5px 0; /* Margini */
	border-radius: 5px;
}
label { /* Stili per la label */
    display: block; /* Impostiamo la label come elemento blocco */
    line-height: 20px; /* Altezza di riga */
    width: 150px; /* Larghezza */
}
 
input, textarea { /* Stili per il campo di testo e per la textarea */
    background: #2C4DE9; /* Colore di sfondo */
    border: 3px solid #ffffff; /* Bordo */
    color: #fff; /* Colore del testo */
    height: 25px; /* Altezza */
    line-height: 25px; /* Altezza di riga */
    width: 200px; /* Larghezza */
    padding: 0px 5px; /* Padding */
}
 
input { padding-left: 10px;
 
textarea { /* Stili specifici per la teaxtarea */
    background: #1C1C1C; /* Sfondo  */
    font-size: 12px;
    height: 200px;
    width: 320px;
    overflow: hidden; /* disabilitare la scrollbar in IE */
}
</style>
</head>

<body>
<form name="mailform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<div id="form">
 <h1>Compila il form sottostante per candidarti<br /><br />
    *Campi obbligatori</h1>

<input type="hidden" name="destinatario" value="[email protected]">

<table border="0">
<tr>
  <td><label>Tua Mail*</label></td>
  <td><input type="text" name="mittente" value="" /></td>
</tr>

<tr>
  <td><label>Oggetto*</label></td>
  <td><input type="text" name="oggetto" value="" /></td>
</tr>

<tr>
    <td><label>Nome*</label></td>
    <td><input type="text" name="nome" /><br /></td>
  </tr>

   <tr>
    <td><label>Cognome*</label></td>
    <td><input type="text" name="cognome" /><br /></td>
  </tr>

  <tr>
    <td><label>Data di nascita*</label> </td>
    <td><input type="text" name="datanasc" value="gg/mm/aaaa" /><br /></td>
  </tr>

  <tr>
    <td><label>Sesso*</label> </td>
    <td><input type="text" name="sesso" value="M/F" /><br /></td>
    </tr>

  <tr>
    <td><label>Codice fiscale*</label></td>
    <td><input type="text" name="codfisc" /><br /></td>
  </tr>

  <tr>
    <td><label>Città*</label></td>
    <td><input type="text" name="citta" /><br /></td>
  </tr>

  <tr>
    <td><label>Indirizzo*</label></td>
    <td><input type="text" name="indirizzo" /><br /></td>
  </tr>

  <tr>
    <td><label>Cap*</label></td>
    <td><input type="text" name="cap" /><br /></td>
  </tr>

  <tr>
    <td><label>Telefono*</label></td>
    <td><input type="text" name="telefono" /><br /></td>
  </tr>
  
<tr>
  <td><label>Messaggio*</label></td>
  <td><textarea name="messaggio" >Scrivi qui... </textarea></td>
  </tr>

<tr>
  <td><label>Allega file*</label></td>
  <td><input type="file" name="allegato" /></td>
</tr>
    
<tr>
    <td><label><a href="/Home/lavora%20con%20noi/condizioni.html" target="_blank" >Privacy</a></label></td>
    <td> <input name="privacy" type="checkbox" value="html" checked="checked" /></td>
  </tr>

<tr>
  <td> <input type="submit" name="Submit" value="Invia!" /></td>
    <td>  <input type="reset" name="Submit2" value="Cancella" /></td>
</tr>

</table>
<?php if(isset($errore)){ echo $errore; }else{ if(isset($ok)){ echo $ok; } } ?>
</div>
</form>
</body>
</html>
 

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
risolto ho aggiunto il controllo del tasto invia che avevo saltato ora devo mettere solo il colore
 

Andrea.mm12

Nuovo Utente
18 Lug 2013
14
0
0
per il colore ho fatto cosi

Codice:
<font color="red"><?php if(isset($errore)){ echo $errore; }else{?></font><font color="green"><?php if(isset($ok)){ echo $ok; } } ?></font>
 
Discussioni simili
Autore Titolo Forum Risposte Data
I [PHP] inviare form con allegato tramite una mail PHP 1
A Creare da form un PDF da inviare come allegato. PHP 1
B Problema form mail per invio doppio allegato PHP 1
L Sviluppare form mail con allegato PHP 6
L come passare il campo allegato dal file html al fiel php per spedirlo con un form PHP 12
V problemi con l'invio di allegato in un form PHP 17
Task Mc Allegato in form PHP 3
M form mail con allegato e immagine Classic ASP 4
E Form invio e-mail con allegato PHP 51
E Form invio e-mail con allegato PHP 0
N Form invio Mail con Allegato PHP 2
S Memorizzare nome file allegato da form registrazione PHP 1
M Form non parte l'allegato.... PHP 5
A Aiuto per form email con allegato PHP 4
M [Cerco retribuito] Form info varie con allegato FLASH + PHP Offerte e Richieste di Lavoro e/o Collaborazione 0
E aiuto form allegato.con funzione mail PHP 8
E allegato via mail tramite form php PHP 7
D Problema con allegato tramite form mail PHP 2
rollobix Form Mail con file allegato Presenta il tuo Sito 8
R Form con allegato errato PHP 1
D SALVARE "MASCHERA" + "ALLEGATO PDF" IN UN UNICO PDF MS Access 0
G [PHP] Creare mail con allegato nascosto e bottone di richiamo PHP 0
otto9due Creare immagine dinamica timer (come esempio allegato) jQuery 4
V PHPmailer allegato PHP 0
P Nome del file allegato alla email inviata con CDOSYS Classic ASP 0
D Email con allegato PHP 2
marino51 non riesco a caricare un allegato percgè non riesco a ridimensionare la finestra Supporto Mr.Webmaster 0
1 Errore di istallazione programma vb2010 con access in allegato MS Access 8
M Mail in html con allegato non coesistono? PHP 6
A Problema allegato email PHP 2
I scrivere solo il percorso (e nome file) di un file allegato (type="file") PHP 1
R invio email php con allegato PHP 1
M email con allegato PHP 3
N PhpMailer e salvataggio allegato sul server PHP 11
IImanuII Allegato controllo dimensioni PHP 17
L [PHP e FTP upload] controllo file allegato PHP 6
metalgemini PHPmailer non arriva allegato PHP 10
piccino PHPMailer: inserire allegato PHP 5
D For invio mail-allegato con smtp PHP 9
M invio email con più di un allegato PHP 1
A allegato in invio e-mails PHP 2
A Mail con allegato sul server PHP 3
I problema a mandare allegato pdf con phpmailerl PHP 2
N errore visualizzazione allegato jpg PHP 6
C Inviare mail con allegato PDF non uppato PHP 2
N problema:mail con allegato a piu utenti da db PHP 17
L [CSS] Div e menu sovrapposti, attributi 'absolute', 'relative' (schema in allegato) HTML e CSS 0
K newsletter con allegato e html Classic ASP 5
R PhpMailer inserire Allegato PHP 1
S invio allegato con webmail PHP 0

Discussioni simili