• User Newbie

    Problema form php

    Salve a tutti!Vi chiedo cortesemente un grande favore,non essendo esperto di php.
    Devo creare un form mail che abbia i campi obbligatori e che permetta anche di allegare un file (qualsiasi).
    Il suo contenuto deve essere più o meno così :
    Nome*
    Cognome*
    Mail*
    Città
    Telefono*
    Codice fiscale*
    Partita Iva*
    Allega file*

    *= campi obbligatori

    Ho provato molti script, ma con molti script se inserisco l'allegato mi arrivano per email anche tutti i dati nome, cognome, mail, citta', mentre se non inserisco allegato l'email mi arriva vuota.
    Io voglio che anche non inserendo l'allegato l'email venga vista correttamente con tutti i suoi dati.
    E' possibile?

    Vi posto il codice php che ho utilizzato

    <?php 
     
    $to= "mia email"; 
    $nome=$_POST['nome']; 
    $cognome=$_POST['cognome']; 
    $oggetto=$_POST['oggetto']; 
    $mail=$_POST['mail']; 
    $citta=$_POST['citta']; 
    $telefono=$_POST['telefono']; 
    $codice_fiscale=$_POST['codice_fiscale']; 
    $p_iva=$_POST['p_iva']; 
     
    $messaggio=' 
     
    Nome : 
    '.$nome.' 
     
    Cognome : 
    '.$cognome.' 
     
    Oggetto : 
    '.$oggetto.' 
     
    Mail : 
    '.$mail.' 
     
    Città : 
    '.$citta.' 
     
    Telefono : 
    '.$telefono.' 
     
    Codice Fiscale : 
    '.$codice_fiscale.' 
     
    p_iva : 
    '.$p_iva.' 
     
    '; 
     
    $allegato = $_FILES['allegato']['tmp_name']; 
    $allegato_type = $_FILES['allegato']['type']; 
    $allegato_name = $_FILES['allegato']['name']; 
     
    $headers = "From: " . $mail; 
    $msg = ""; 
     
    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 .= $messaggio . "\n\n"; 
    $msg .= "--{$mime_boundary}\n"; 
     
    $msg .= "Content-Disposition: attachment;\n"; 
    $msg .= " filename=\"{$allegato_name}\"\n"; 
    $msg .= "Content-Transfer-Encoding: base64\n\n"; 
    $msg .= $data . "\n\n"; 
     
    $msg .= "--{$mime_boundary}--\n"; 
    } 
    else 
    { 
    echo "<p>Errore!</p>"; 
    } 
     
     
    if (mail($to, $oggetto, $msg, $headers)) 
    { 
    echo "<p>Mail inviata con successo!</p>"; 
    }else{ 
    echo "<p>Errore!</p>"; 
    } 
    ?> 
    

    il file form.html è questo

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""> 
    <html xmlns=""> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <title>Form mail</title> 
     
    <script type="text/javascript" language="javascript"> 
    function valida(){ 
    if (!confirm('Confermi i dati inseriti?')) return false; 
     
    if (document.getElementById('nome').value=='') { 
    alert('Compilare correttamente il campo Nome!'); 
    document.getElementById('nome').focus(); 
    return false; 
    } 
     
    if (document.getElementById('cognome').value=='') { 
    alert('Compilare correttamente il campo Cognome!'); 
    document.getElementById('cognome').focus(); 
    return false; 
    } 
     
    if (document.getElementById('mail').value=='') { 
    alert('Compilare correttamente il campo Mail!'); 
    document.getElementById('mail').focus(); 
    return false; 
    } 
     
    if (document.getElementById('citta').value=='') { 
    alert('Compilare correttamente il campo Città!'); 
    document.getElementById('citta').focus(); 
    return false; 
    } 
     
    if (document.getElementById('telefono').value=='') { 
    alert('Compilare correttamente il campo Telefono!'); 
    document.getElementById('telefono').focus(); 
    return false; 
    } 
     
    if (document.getElementById('codice_fiscale').value=='') { 
    alert('Compilare correttamente il campo Codice_fiscale!'); 
    document.getElementById('codice_fiscale').focus(); 
    return false; 
    } 
     
    if (document.getElementById('p_iva').value=='') { 
    alert('Compilare correttamente il campo P_iva!'); 
    document.getElementById('p_iva').focus(); 
    return false; 
    } 
     
     
    return true; 
    }//valida 
    </script> 
     
    </head> 
     
    <body> 
    <form action="invio.php" method="post" enctype="multipart/form-data" onsubmit="return valida();"> 
    <input type="hidden" name="destinatario" value="emailmia"> 
    <table align="center" width="600" cellpadding="2" cellspacing="2"> 
    <tr> 
    <td>Nome *</td> 
    <td><input type="text" name="nome" id="nome" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Cognome *</td> 
    <td><input type="text" name="cognome" id="cognome" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Oggetto</td> 
    <td><input name="oggetto" type="text" id="oggetto" value="oggetto" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Mail *</td> 
    <td><input type="text" name="mail" id="mail" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Città *</td> 
    <td><input type="text" name="citta" id="citta" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Telefono *</td> 
    <td><input type="text" name="telefono" id="telefono" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Codice fiscale *</td> 
    <td><input type="text" name="codice_fiscale" id="codice_fiscale" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>P iva *</td> 
    <td><input type="text" name="p_iva" id="p_iva" size="30" maxlength="100" /></td> 
    </tr> 
    <tr> 
    <td>Allegato *<br /> 
    </td> 
    <td><input type="file" name="allegato" id="allegato" /></td> 
    </tr> 
    </table> 
    <div align="center"> 
    <input type="submit" value="Invia dati" /> 
    </div> 
    </form> 
    </body> 
    </html>
    
    

    Il problema è che se io mando la mail con allegato allora vedo sia l'allegato inserito sia i dati inseriti, se invece invio senza allegato la mail che arriva è completamente vuota.
    Potete aiutarmi gentilmente?
    Mi spiego meglio:
    Io voglio che sia con allegato sia senza allegato, i dati inseriti arrivino correttamente quando ricevo la mail. Attualmente cosi come è ricevo i dati SOLO se viene inserito l'allegato.
    Potete aiutarmi?


  • User

    Devi gestire anche il caso in cui non ci sia l'allegato
    sostituisci

    
    else 
    { 
       echo "<p>Errore!</p>"; 
    } 
    
    
    

    con

    
    else 
    { 
       $msg .= $messaggio;
    }