• User

    problema script invio curriculum

    Salve a tutti,
    avrei necessità del vostro preziosissimo aiuto.
    Ho qualche problema con questo script per l'invio di un curriculum:

    • la mail arriva perfettamente ma tutti i file che allego vengono rinominati in "curriculum.doc";
    • avrei necessità di allegare anche file.pdf;
    • nella conferma dell'invio compare questo errore "Warning: fread() [function.fread]: Length parameter must be greater than 0. in /web/htdocs/xxx.xxxxxx.it/home/xx.php on line **101" **
      (linea 101 indicata nel form di seguito).

    Come posso risolvere?
    Grazie a tutti

    [php]<html>
    <head>
    <title>Send mail with attach</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body bgcolor="#D2D2D2" leftmargin="3" topmargin="3" marginwidth="0" marginheight="0" text="#000000">
    <?
    function validate_upload($thefile) {
    global $thefile_type, $thefile_name, $thefile_size;
    $my_max_file_size = "102400"; # in bytes
    $registered_types = array(
    "application/msword" => ".doc",
    "application/octet-stream" => ".doc"
    ); # these are only a few examples, you can find many more!
    $allowed_types = array("application/msword", "application/octet-stream");
    $start_error = "\n";
    if ($thefile == "none") { # do we even have a file?
    $error .= "\n- Nessun documento allegato.<br>";
    } else { # check if we are allowed to upload this file_type
    if ($thefile_size>$my_max_file_size) $error .= "\n- Il file allegato supera la dimensione massima consentita.<br>";
    if (!in_array($thefile_type, $allowed_types)) {
    $error .= "\n- Il file che hai inserito non è del tipo richiesto:
    <br>\n";
    while ($type = current($allowed_types)) {
    $error .= "\n" . $registered_types[$type] . " (" . $type . ")<br>";
    next($allowed_types);
    }
    $error .= "\n";
    }
    if ($error) {
    $error = $start_error . $error . "\n";
    return $error;
    } else {
    return false;
    }
    }
    } # END validate_upload
    ?>
    <font face="Arial, Helvetica, sans-serif" size="2"><br>
    <?
    if ($op=="invio") {
    $error=0;
    $msg="";
    if ($nome=="") {
    $error=1;
    $msg.="- Il campo nome è vuoto.<br>";
    }
    if ($cognome=="") {
    $error=1;
    $msg.="- Il campo cognome è vuoto.<br>";
    }
    if ($email=="") {
    $error=1;
    $msg.="- Il campo email è vuoto.<br>";
    }
    if ($email!="" && !eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {
    $error=1;
    $msg.="- L'email inserita non è valida.<br>";
    }
    if ($commento=="") {
    $error=1;
    $msg.="- Il campo commento è vuoto.<br>";
    }
    $error_file="";
    if (!$thefile || $thefile=="none" || $thefile=="") {
    $error=1;
    $msg.="- Non hai inserito il curriculum.<br>";
    } else $error_file = validate_upload($thefile);
    if ($error==1 || $error_file!="") {
    echo"<br><br>Attenzione! Si sono verificati i seguenti errori:<br>$msg<br>$error_file<br><a href="javascript:history.back()">Clicca qui</a> per reinserire i dati.";
    } else {
    $emailto="miaemaildotemail.xx"; // INERIRE L'EMAIL QUI!!
    $data=date("j/m/Y");
    $ora=date("h:i:s");

    $headers = "MIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/mixed; boundary="XX-1234DED00099A"\n";
    $headers .= "Content-Transfer-Encoding: 7bit\n";
    $headers .= "From: $email\n";

    $messaggio="--XX-1234DED00099A\n";
    $messaggio.="Content-Type: text/plain; charset=iso-8859-1\n";
    $messaggio.="Content-Transfer-Encoding: 7bit\n\r";
    $messaggio.="Curriculum inviato il $data alle $ora\n\r\nDati inseriti\n";
    $messaggio.="Nome: $nome\n\rCognome: $cognome\n";
    if ($telefono!="") $messaggio.="Telefono: $telefono\n";
    $messaggio.="Email: $email\nCommento:\n$commento\n";
    $oggetto_send="Invio Curriculum";

    $messaggio.="--XX-1234DED00099A\n";
    $messaggio.="Content-Type: application/octet-stream; name="curriculum.doc"\n";
    $messaggio.="Content-Transfer-Encoding: base64\n";
    $messaggio.="Content-Description: "Curriculum"\n";
    $messaggio.="Content-Disposition: attachment\n\r";

    $fp=@fopen($thefile, "r");
    if ($fp) {
    $data = fread($fp, filesize($thefile)); //questa è la riga del warning
    }
    $curr = base64_encode($data);
    $messaggio .= "$curr\n\r--XX-1234DED00099A--\n";
    if (!mail($emailto, $oggetto_send, $messaggio, $headers)) {
    echo"<br><b>Attenzione.</b><br>Si sono verificati degli errori durante l'invio della Email.<br>
    Vi preghiamo di riprovare <a href="javascript: history.back()">cliccando qui.</a><br>
    Se l'errore persiste Vi invitamo a riprovare più tardi. Grazie.";
    }
    else {
    $messaggio_risposta="Grazie per averci contattato.\n\rIl vostro curriculum è stato inoltrato al responsabile del personale.\n\r\n\rDati inseriti\n";
    $messaggio_risposta.="Nome: $nome\n\rCognome: $cognome\n\r";
    if ($telefono!="") $messaggio_risposta.="Telefono: $telefono\n\r";
    $messaggio_risposta.="Commento:\n\r$commento\n\r\n\r";
    $messaggio_risposta.="Distinti saluti,\n\r";
    $oggetto2="Curriculum inoltrato";
    mail($email, $oggetto2, $messaggio_risposta,"From: Prova prova <$emailto>");
    echo "<br><b>Email inviata correttamente.</b><br>
    <br>I dati inseriti sono i seguenti:<br><br>";
    echo"Nome:<b> $nome </b><br>
    Cognome:<b> $cognome</b><br>";
    if ($telefono!="") echo"Telefono: <b>$telefono</b><br>";
    echo"Email: <b>$email</b><br>Commento:<b> ".nl2br($commento)."</b><br>
    <br><br>Grazie per averci contattato.";
    }
    }

    } else {
    ?>
    <br><br>Form per invio curriculum<br><br>
    <form enctype="multipart/form-data" method="post" action="<?=$PHP_SELF?>" name="contatti">
    <table width="550" border="0" cellspacing="3" cellpadding="0">
    <tr>
    <td>Nome *</td>
    <td>
    <input type="text" name="nome" size="30">
    </td>
    </tr>
    <tr>
    <td>Cognome *</td>
    <td>
    <input type="text" name="cognome" size="30">
    </td>
    </tr>
    <tr>
    <td>Telefono</td>
    <td>
    <input type="text" name="telefono" size="30">
    </td>
    </tr>
    <tr>
    <td>Email *</td>
    <td>
    <input type="text" name="email" size="30">
    </td>
    </tr>
    <tr>
    <td>Allega il tuo curriculum<br>(formato .doc - Max 100 Kb) *</td>
    <td>
    <input type="hidden" name="MAX_FILE_SIZE" value="102400">
    <input name="thefile" type="file" SIZE="35">
    </td>
    </tr>
    <tr>
    <td>Commento *</td>
    <td>
    <textarea name="commento" wrap="VIRTUAL" cols="30" rows="5"></textarea>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <div align="center">
    <input type="hidden" name="op" value="invio">
    <input type="submit" name="Submit" value="Invia">
    <input type="reset" name="Submit2" value="Reimposta">
    </div>
    </td>
    </tr>
    </table>
    </form>
    <font size="1">I campi con l'asterisco sono obbligatori.<br>
    <?
    }
    ?>
    </font>

    </table>
    </body>
    </html>
    [/php]


  • User

    Ok, allora...
    Problema errore nella conferma risolto, problema file.pdf risolto, me ne rimane soltanto uno :arrabbiato:
    Il fatto che tutti i file vengano rinominati in "curriculum.doc" dipende da questa stringa:

    [PHP]
    $messaggio.="Content-Type: application/octet-stream; name="curriculum.doc"\n"; //questa è la stringa incriminata
    $messaggio.="Content-Transfer-Encoding: base64\n";
    $messaggio.="Content-Description: "Curriculum"\n";
    $messaggio.="Content-Disposition: attachment\n\r";
    [/PHP]

    ma come posso risolvere?

    Ho provato a fare un pò di modifiche ma non riesco.
    Abbiate pazienza ma studio php da pochissimo.
    Grazie a tutti


  • User

    Ragazzi, nessuno può darmi una mano?


  • User

    In pratica quando gestisci l'header del file allegato lo dichiari name="curriculum.doc"\n
    Devi gestire dinamicamente questo file per poter aver un nome personalizzato per ogni curriculum.

    Spero di averti aiutato. :ciauz:


  • User

    @daniele_tabacco said:

    In pratica quando gestisci l'header del file allegato lo dichiari name="curriculum.doc"\n
    Devi gestire dinamicamente questo file per poter aver un nome personalizzato per ogni curriculum.

    Spero di averti aiutato. :ciauz:
    Grazie per la risposta.
    Come posso gestire dinamicamente il file?
    Se provo ad eliminare la specifica name="curriculum.doc"\n mi arriva l'email con un file senza estensione.
    Come posso risolvere?


  • User

    Infatti non devi eliminarla, ma semplicemente gestirla con del codice PHP.


  • User

    @daniele_tabacco said:

    Infatti non devi eliminarla, ma semplicemente gestirla con del codice PHP.
    Si, questo l'ho capito anche io.
    Forse mi esprimo male.
    Chiedevo in che modo e con quale codice potevo risolvere il problema.
    Grazie


  • User

    per gestirlo dinamicamente dei ottenere in qualche modo il nome del file, per esempio puoi aggiungere un campo al form di invio (se è così che ottieni i dati) che sia
    [html]
    <input type="text" name="nome_file">
    [/html]

    nel codice PHP poi inserisci questo
    [php]
    $messaggio.="Content-Type: application/octet-stream; name="".$_POST["nome_file"].".doc"\n";
    [/php]

    Così ottieni direttamente dall'utente il nome del file da allegare.

    Inoltre per gestire il file pdf, io ho scoperto una libreria, fpdf, open source e facilissa da usare, che ti permette di "stampare" direttamente da php file in formato pdf...

    Spero di esserti stato utile...ciao


  • User

    @Endorama said:

    per gestirlo dinamicamente dei ottenere in qualche modo il nome del file, per esempio puoi aggiungere un campo al form di invio (se è così che ottieni i dati) che sia
    [html]
    <input type="text" name="nome_file">
    [/html]

    nel codice PHP poi inserisci questo
    [php]
    $messaggio.="Content-Type: application/octet-stream; name="".$_POST["nome_file"].".doc"\n";
    [/php]

    Così ottieni direttamente dall'utente il nome del file da allegare.

    Inoltre per gestire il file pdf, io ho scoperto una libreria, fpdf, open source e facilissa da usare, che ti permette di "stampare" direttamente da php file in formato pdf...

    Spero di esserti stato utile...ciao
    Grazie mille, provo e ti faccio sapere.


  • User

    Allora, ho risolto così:
    [php]$messaggio.="Content-Type: application/octet-stream; name="".$_POST["cognome"].".doc"\n";[/php]

    Così l'allegato arriverà "cognome.doc"

    Grazie a tutti ed in particolar modo Endorama per l'aiuto.
    Posto tutto il codice per chi come me avesse la necessità di creare un modulo per un curriculum

    [php]<html>
    <head>
    <title>Compilare il seguente modulo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link href="layout.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <?
    function validate_upload($thefile) {
    global $thefile_type, $thefile_name, $thefile_size;
    $my_max_file_size = "102400"; # in bytes
    $registered_types = array(
    "application/msword" => ".doc",
    "application/octet-stream" => ".doc",
    "application/pdf" => ".pdf"
    ); # these are only a few examples, you can find many more!
    $allowed_types = array("application/msword", "application/octet-stream");
    $start_error = "\n";
    if ($thefile == "none") { # do we even have a file?
    $error .= "\n- Nessun documento allegato.<br>";
    } else { # check if we are allowed to upload this file_type
    if ($thefile_size>$my_max_file_size) $error .= "\n- Il file allegato supera la dimensione massima consentita.<br>";
    if (!in_array($thefile_type, $allowed_types)) {
    $error .= "\n- Il file che hai inserito non è del tipo richiesto:
    <br>\n";
    while ($type = current($allowed_types)) {
    $error .= "\n" . $registered_types[$type] . " (" . $type . ")<br>";
    next($allowed_types);
    }
    $error .= "\n";
    }
    if ($error) {
    $error = $start_error . $error . "\n";
    return $error;
    } else {
    return false;
    }
    }
    } # END validate_upload
    ?>
    <font face="Arial, Helvetica, sans-serif" size="2"><br>
    <?
    if ($op=="invio") {
    $error=0;
    $msg="";
    if ($nome=="") {
    $error=1;
    $msg.="- Il campo nome è vuoto.<br>";
    }
    if ($cognome=="") {
    $error=1;
    $msg.="- Il campo cognome è vuoto.<br>";
    }
    if ($email=="") {
    $error=1;
    $msg.="- Il campo email è vuoto.<br>";
    }
    if ($email!="" && !eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {
    $error=1;
    $msg.="- L'email inserita non è valida.<br>";
    }
    if ($commento=="") {
    $error=1;
    $msg.="- Il campo commento è vuoto.<br>";
    }
    $error_file="";
    if (!$thefile || $thefile=="none" || $thefile=="") {
    $error=1;
    $msg.="- Non hai inserito il curriculum.<br>";
    } else $error_file = validate_upload($thefile);
    if ($error==1 || $error_file!="") {
    echo"<br><br>Attenzione! Si sono verificati i seguenti errori:<br>$msg<br>$error_file<br><a href="javascript:history.back()">Clicca qui</a> per reinserire i dati.";
    } else {
    [email protected]; // INERIRE L'EMAIL QUI!!
    $data=date("j/m/Y");
    $ora=date("h:i:s");

    $headers = "MIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/mixed; boundary="XX-1234DED00099A"\n";
    $headers .= "Content-Transfer-Encoding: 7bit\n";
    $headers .= "From: $email\n";

    $messaggio="--XX-1234DED00099A\n";
    $messaggio.="Content-Type: text/plain; charset=iso-8859-1\n";
    $messaggio.="Content-Transfer-Encoding: 7bit\n\r";
    $messaggio.="Curriculum inviato il $data alle $ora\n\r\nDati inseriti\n";
    $messaggio.="Nome: $nome\n\rCognome: $cognome\n";
    if ($telefono!="") $messaggio.="Telefono: $telefono\n";
    $messaggio.="Email: $email\nCommento:\n$commento\n";
    $oggetto_send="Invio Curriculum";

    $messaggio.="--XX-1234DED00099A\n";
    $messaggio.="Content-Type: application/octet-stream; application/msword; name="".$_POST["cognome"].".doc"\n";
    $messaggio.="Content-Transfer-Encoding: base64\n";
    $messaggio.="Content-Description: "Curriculum"\n";
    $messaggio.="Content-Disposition: attachment\n\r";

    $fp=@fopen($thefile, "r");
    if ($fp) {
    $data = fread($fp, filesize($thefile));
    }
    $curr = base64_encode($data);
    $messaggio .= "$curr\n\r--XX-1234DED00099A--\n";
    if (!mail($emailto, $oggetto_send, $messaggio, $headers)) {
    echo"<br><b>Attenzione.</b><br>Si sono verificati degli errori durante l'invio della Email.<br>
    Vi preghiamo di riprovare <a href="javascript: history.back()">cliccando qui.</a><br>
    Se l'errore persiste Vi invitamo a riprovare più tardi. Grazie.";
    }
    else {
    $messaggio_risposta="Grazie per averci contattato.\n\rIl vostro curriculum è stato inoltrato al responsabile del personale.\n\r\n\rDati inseriti\n";
    $messaggio_risposta.="Nome: $nome\n\rCognome: $cognome\n\r";
    if ($telefono!="") $messaggio_risposta.="Telefono: $telefono\n\r";
    $messaggio_risposta.="Commento:\n\r$commento\n\r\n\r";
    $messaggio_risposta.="Distinti saluti,\n\r";
    $oggetto2="Curriculum inoltrato";
    mail($email, $oggetto2, $messaggio_risposta,"From: Prova prova <$emailto>");
    echo "<br><b>Email inviata correttamente.</b><br>
    <br>I dati inseriti sono i seguenti:<br><br>";
    echo"Nome:<b> $nome </b><br>
    Cognome:<b> $cognome</b><br>";
    if ($telefono!="") echo"Telefono: <b>$telefono</b><br>";
    echo"Email: <b>$email</b><br>Commento:<b> ".nl2br($commento)."</b><br>
    <br><br>Grazie per averci contattato.";
    }
    }

    } else {
    ?>
    <br><br>Compila il mudulo per l´invio del curriculum<br><br>
    <form enctype="multipart/form-data" method="post" action="<?=$PHP_SELF?>" name="contatti">
    <table width="550" border="0" cellspacing="3" cellpadding="0">
    <tr>
    <td>Nome *</td>
    <td>
    <input type="text" name="nome" size="30">
    </td>
    </tr>
    <tr>
    <td>Cognome *</td>
    <td>
    <input type="text" name="cognome" size="30">
    </td>
    </tr>
    <tr>
    <td>Telefono</td>
    <td>
    <input type="text" name="telefono" size="30">
    </td>
    </tr>
    <tr>
    <td>E-mail *</td>
    <td>
    <input type="text" name="email" size="30">
    </td>
    </tr>
    <tr>
    <td>Allega il tuo curriculum<br>(formato .doc- Max 100 Kb) *</td>
    <td>
    <input type="hidden" name="MAX_FILE_SIZE" value="102400">
    <input name="thefile" type="file" SIZE="35">
    </td>
    </tr>
    <tr>
    <td>Commento *</td>
    <td>
    <textarea name="commento" wrap="VIRTUAL" cols="30" rows="5"></textarea>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <div align="center">
    <input type="hidden" name="op" value="invio">
    <input type="submit" name="Submit" value="Invia">
    <input type="reset" name="Submit2" value="Reimposta">
    </div>
    </td>
    </tr>
    </table>
    </form>
    <font size="1">I campi con l'asterisco sono obbligatori.<br>
    <?
    }
    ?>
    </font>

    </table>
    </body>
    </html>
    [/php]


  • User

    Figurati...Mi fa piacere averti dato una mano!!!

    Ciao!


  • User Newbie

    @adwmaster said:

    Posto tutto il codice per chi come me avesse la necessità di creare un modulo per un curriculum

    [php]<html>
    <head>
    <title>Compilare il seguente modulo</title>
    .............cut...............

    </table>
    </body>
    </html>
    [/php]

    Salve, riprendo questo post per avere un aiuto...
    ho preso questo codice, ho cambiato l'email ed ho messo la mia, l'ho caricata sul mio server (hostingvirtuale) ma dopo aver compilato tutti i campi clicco invia e non succede nulla... o meglio ritorna allo stato iniziale, cioè con i campi vuoti

    cosa dovrei fare? grazie a tutti