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>";
}
?>
 
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');
 
Grandissimoooooooooooo arriva finalemente anche il doc e il pdf
grazie mille

ora ho un altra domanda come faccio per mettere i campi obbligatori?
 
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

}
?>
 
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
 
posta come le stampi
dovrai aggiungere del css tipo
Codice:
p.error {
    color:red;
    font-size: 22px;
}
 
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?
 
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:
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
}
?>
 
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>
 
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