Visualizzazione dei risultati da 1 a 7 su 7

Discussione: form con attachment

  1. #1
    Utente di HTML.it L'avatar di Many17
    Registrato dal
    Sep 2002
    Messaggi
    324

    form con attachment

    Ciao a tutti, prima di scrivere qui ho spulciato mezzo web e forum x vedere se trovavo qualcosa. Dunque ho un form perfettamente funzionante ma ora devo fare in modo che un utente mi invii insieme al testo un allegato (un curriculum).
    Ho aggiunto nel form html insieme ai campi comuni di testo l'enctype="multipart/form-data in questo modo:

    <form action="lavora.php" method="post" enctype="multipart/form-data">

    poi per creare il campo per inviare l'allegato ho messo:

    Curriculum:<input name="allegato" type="file" size="35">

    Ora, qualcuno di voi usa le classi Mime mail class?

    il mio form php senza attachment è così:

    <?php

    /* ini_set("SMTP", "lmnet.it");
    ini_set("smtp_port", "25");
    ini_set("sendmail_from", "mani17@tiscalinet.it"); */

    error_reporting(E_ALL);
    require ( "htmlMimeMail.php" ) ;

    $mail_message = new htmlMimeMail(); // visto che hai usato $mail per altre cose

    $receiverMail = "mani17@tiscalinet.it";

    $nome_cognome = ltrim(rtrim(strip_tags(stripslashes($_POST['nome_cognome']))));
    $indirizzo = ltrim(rtrim(strip_tags(stripslashes($_POST['indirizzo']))));
    $cap = ltrim(rtrim(strip_tags(stripslashes($_POST['cap']))));
    $citta = ltrim(rtrim(strip_tags(stripslashes($_POST['citta']))));
    $eta = ltrim(rtrim(strip_tags(stripslashes($_POST['eta']))));
    $telefono = ltrim(rtrim(strip_tags(stripslashes($_POST['telefono']))));
    $mail = ltrim(rtrim(strip_tags($_POST['mail'])));
    $studio = ltrim(rtrim(strip_tags($_POST['studio'])));
    $testo_contattaci = ltrim(rtrim(strip_tags($_POST['testo_contattaci'])));
    $testo_aspirazioni = ltrim(rtrim(strip_tags($_POST['testo_aspirazioni'])));
    $testo_commenti = ltrim(rtrim(strip_tags($_POST['testo_commenti'])));


    $ip = getenv("REMOTE_ADDR");
    $msgformat = "Da: $nome_cognome ($ip)\r\nINDIRIZZO: $indirizzo\r\nCAP: $cap\r\nCITTA': $citta\r\nETA': $eta\r\nTELEFONO: $telefono\r\nE-MAIL: $mail\r\nTITOLO DI STUDIO: $studio\r\nESPERIENZA MATURATA: $testo_contattaci\r\nASPIRAZIONI: $testo_aspirazioni\r\nALTRI COMMENTI: $testo_commenti";

    $mail_message->setText($msgformat); // prepara il messaggio senza usare il formato html
    $mail_message->setFrom($receiverMail); // indirizzo mittente
    $mail_message->setSubject("Lavora con noi"); // oggetto della mail
    $mail_message->setHeader("Date", date('D, d M y H:i:s O')); // metto la data in standard RFC

    // VALIDATION
    if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) {
    echo "

    La tua richiesta non è stata inviata, indirizzo E-MAIL non valido (scrivi in minuscolo).</p>";
    }
    else {
    if( $result=$mail_message->send(array($receiverMail),'smtp') ){
    // mail('mani17@tiscalinet.it', 'Lavora con noi', $msgformat)){
    echo "

    La tua richiesta è stata inviata!</p>";
    }
    else{
    echo "

    Ci sono stati problemi nell'invio della richiesta.</p>";
    // se vuoi intercettare l'errore togli questo commento // print_r($mail_message->errors);
    echo"
    ";
    echo"
    ";
    echo "<INPUT TYPE=\"BUTTON\" VALUE=\"Riprova\" onClick=\"location.href='lavora.htm'\">";
    }
    }?>

    Devo inserire il codice per l'allegato ma non so come, spero possiate aiutarmi.
    Grazie!

    ps. ho anche già guardato le varie pillole

  2. #2
    devi semplicemente avere un campo input di tipo file <input type=file....> e leggere dentro $_FILES['nome_campo'] quello che ti serve...

    in particolare in $_FILES['nome_campo']['tmp_name'] trovi il path del file sul server, una volta che è stato uploadato... a quel punto vedi tu che farne..

    se vuoi allegarlo devi fare:

    $file = fopen($nomefile, "r");
    $contenuto = fread($file, filesize($nomefile));
    $codifica = chunk_split(base64_encode($contenuto));
    fclose($file);


    poi devi aggiungere questo al corpo del messaggio:

    "\n\n--Message-Boundary\n
    Content-type: $file_type; name=\"$nomefile\"\n
    Content-Transfer-Encoding: BASE64\n
    Content-disposition: attachment; filename=\"$nomefile\"\n\n $encoded_attach1\n
    --Message-Boundary--\n";


  3. #3
    Utente di HTML.it L'avatar di Many17
    Registrato dal
    Sep 2002
    Messaggi
    324
    Grazie per la risposta!
    Credevo fosse più semplice...hem...mi faresti l'esempio con il mio codice? Ecco, ora passo per una sfaticata
    Comunque non è facile per niente, ho capito come fuzionano i form normali ma questi...

    ps I tag html che ho aggiunto sono corretti?

  4. #4
    Utente di HTML.it L'avatar di Many17
    Registrato dal
    Sep 2002
    Messaggi
    324
    Hey Guidoz, forse ho esagerato nel chiedere?

  5. #5
    [supersaibal]Originariamente inviato da Many17
    Hey Guidoz, forse ho esagerato nel chiedere?
    [/supersaibal]
    no.. è solo che a volte anche noi phpisti mangiamo

    m'ero perso la tua risposta insomma

    quanto al tuo codice.. beh.. non ho troppa voglia di trasformarmi in parser umano.. quindi suppongo sia giusto..

    Non è che posso dirti molto di più... ti illustro paso passo cosa devi fare e mi dici dove ti blocchi, ok?

    1) devi mettere nel forum un campo tipo
    <input type="file" name="documento">
    se non l'hai già fatto ovviamente...

    2) nella parte di codice che riceve il form devi prendere il file, spostartelo in una tua directrory [se hai php in safe mode non puoi aprirlo direttamente nella dir temporanea se non erro], leggerlo e dargli la giusta codifica... quindi:
    Codice PHP:
    move_uploaded_file($_FILES['documento']['tmp_name'],"$tua_directory/{$_FILES['documento']['name']}");
    $file fopen($_FILES['documento']['name'], "r");
    $contenuto fread($filefilesize($_FILES['documento']['name']));
    $codifica chunk_split(base64_encode($contenuto));
    fclose($file); 
    3) devi allegarlo alla mail [questo non l'ho mai fatto ma leggendo ho visto che si fa così:

    Codice PHP:
    $boundary md5(uniqid(microtime()));
    $mail_headers .= "MIME-version: 1.0\n";
    $mail_headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
    $mail_headers .= "X-attachments: $file_name\n";
        
    $mail_body "--$boundary\n";
    $mail_body .= "Content-Type: text/plain; charset=us-ascii\n";
    $mail_body .= "Content-Transfer-Encoding: 7bit\n\n";
    $mail_body .= "$Contenuto\n\n";
    $mail_body .= "--$boundary\n";
    $mail_body .= "Content-type: $_FILES['documento']['type']; name=\"$_FILES['documento']['name']"\n"; 
    $mail_body .= "Content-Transfer-Encodingbase64\n";
    $mail_body .= "$encoded_attach\n";
    $mail_body .= "--$boundary--\n";
        
    mail(
    $Destinatario$Soggetto$mail_body$mail_headers)) 
    spero che adesso riuscirai a ricomporre i pezzi del puzzle


  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2000
    Messaggi
    350
    Ciao,
    ho lo stesso problema e ho seguito passo passo quello che hai scritto.
    Quando provo ad inviare il form mi compare questo messaggio:

    Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in ordina.php on line 67

    Sai mica qual'è il problema?
    Grazie. Ciao

    Elena
    pap

  7. #7
    Codice PHP:
    $boundary md5(uniqid(microtime()));
    $mail_headers .= "MIME-version: 1.0\n";
    $mail_headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
    $mail_headers .= "X-attachments: $file_name\n";
        
    $mail_body "--$boundary\n";
    $mail_body .= "Content-Type: text/plain; charset=us-ascii\n";
    $mail_body .= "Content-Transfer-Encoding: 7bit\n\n";
    $mail_body .= "$Contenuto\n\n";
    $mail_body .= "--$boundary\n";
    $mail_body .= "Content-type: $_FILES['documento']['type']; name=\"$_FILES['documento']['name']\n";
    $mail_body .= "Content-Transfer-Encoding: base64n";
    $mail_body .= "$encoded_attachn";
    $mail_body .= "--$boundary--n";
        
    mail($Destinatario$Soggetto$mail_body$mail_headers)) 
    correggi così.. errore di battitura...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.