sto utilizzando questo form contact in html+php, devo aggiungere dei tag input e nella parte html non ho avuto problemi, il problema sta quando devo andarli ad operare con il php.
questo è il php che lo gestisce
impostandolo in questo modo mi arriva il campo nome e cognome solo se invio in allegato anche un file, io invece avrei bisogno di farmi arrivare questi campi anche se non allego nulla cosi come succede per il campo messaggio. Se compilo i campi nome, cognome e messaggio senza l'allegato mi arriva nella posta solo il campo messaggio. Mi date una mano
PHP:
<form action="formmail.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="destinatario" value="[email protected]">
<!-- INPUT AGGIUNTI -->
<input type="text" name="nome" />
<input type="text" name="cognome" />
<!-- CHIUSURA INPUT AGGIUNTI -->
<input type="text" name="mittente" value="" />
<input type="text" name="oggetto" value="" />
<textarea cols="20" rows="4" name="messaggio"></textarea>
<input type="file" name="allegato" />
<input type="submit" value="Invia" />
</form>
questo è il php che lo gestisce
PHP:
<?php
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
// CAMPI NOME E COGNOME AGGIUNTI
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
// 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";
// CAMPI NOME E COGNOME AGGIUNTI
$msg .= $nome . "\n\n";
$msg .= $cognome . "\n\n";
$msg .= $messaggio . "\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 = $nome;
$msg = $cognome;
$msg = $messaggio;
}
// Invio la mail
if (mail($destinatario, $oggetto, $msg, $headers))
{
echo "<p>Mail inviata con successo!</p>";
}else{
echo "<p>Errore!</p>";
}
?>
impostandolo in questo modo mi arriva il campo nome e cognome solo se invio in allegato anche un file, io invece avrei bisogno di farmi arrivare questi campi anche se non allego nulla cosi come succede per il campo messaggio. Se compilo i campi nome, cognome e messaggio senza l'allegato mi arriva nella posta solo il campo messaggio. Mi date una mano