• User Attivo

    Upload file in php da zero

    Salve ho un form di invio dati che spedisce a invio.php dove risiede il codice che invia la email a un indirizzo di posta elettronica. A questo voglio aggiungere un upload file, quindi quando ho compilato tutto il form in invio.php che invia il form sottoforma di email all'indirizzo di posta elettronica voglio che mi invia anche il file che ho uplodato.

    questo è form.php

    [php]
    <form action="invio.php" method="post" id="modulo">

    //ci sono altri campi ma non sn necessari adesso
    //nome cognome e testo ognuno con il suo id=""

    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input name="file" type="file" class="Stile55" size="30" id="file"/>

    <input name="submit" type="submit" id="submit" value="INVIA" />
     
    <input name="cancella" type="reset" id="cancella" value="RESETTA" />
    </span>
    <label></label></form>

    [/php]
    A questo punto deve interagire invio.php che viene richiamato da:
    <form action="invio.php" method="post" id="modulo">

    invio.php

    [php] <?php
    if ((trim($_POST['oggetto']) != "") && (trim($_POST['testo']) != "") && (trim($_POST['nome']) != "") && (trim($_POST['cognome']) != "") && (trim($_POST['mail']) != "") && (trim($_POST['siamo_di']) != "") && (trim($_POST['provincia']) != "")) { //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
    $to = " \n [email protected]";
    $headers = "From: " . $_POST['mail'] . "\n";
    // oggetto della mail
    $subject = "Modulo proveniente da www.miositonet";

    // corpo messaggio
    $body = "Contenuto del modulo:\n\n";

    $body .= "Inviata da: " . trim(stripslashes($_POST["mail"])) . "\n"; //indirizzo e-mail che manda la mail, come si vede riprende l'id del campo destinato all'inserimento della mail del mittente

    $body .= "nome: " . trim(stripslashes($_POST["nome"])) . "\n";
    $body .= "cognome: " . trim(stripslashes($_POST["cognome"])) . "\n";
    $body .= "oggetto: " . trim(stripslashes($_POST["oggetto"])) . "\n";
    $body .= "testo: " . trim(stripslashes($_POST["testo"])) . "\n";
    $body .= "mail: " . trim(stripslashes($_POST["mail"])) . "\n";

    $body .= "file: " . trim(stripslashes($_POST["file"])) . "\n"; //UPLOAD FILE

    // invio mail
    mail($to, $subject, $body, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...

    echo "La e-mail è stata inviata con successo. Grazie per averci contattato";

    } else {// altrimenti
    echo "Attenzione, deve compilare tutti i campi per l'invio dei dati, grazie.";

    }

    ?>[/php]
    Ok, la email mi arriva ma vorrei aggiungere qualcosa a questo script che mi permetta di uploadare il file ed inviarmelo via email..
    Ho provato un paio di codici ma non funzionavano, mi dava sempre errore di sintassi....... 😞

    Sapreste darmi una mano?

    grazie di cuore :vai:
    :ciauz:


  • User Attivo

    Potresti uploadare il file sul tuo spazio web e magari inviarti il link nel messaggio di posta elettronica...
    Semplice e funzionale :wink3:


  • User Attivo

    come se fa? 🙂

    😢


  • User Attivo

    Allora, partiamo dalle basi: la pagina html deve contenere un form con "enctype=multipart/form-data" per poter caricare i file tramite php.
    La pagina php che accoglie i dati deve avere questo codice:
    [php] if ($_FILES['foto']['name'] != '')
    {
    $updir = "./dir_upload/";
    if (!is_dir($updir))
    mkdir($updir);
    $ext = $_FILES['foto']['type'];
    if ($FILES['foto'] < 500000)
    {
    if (($ext == 'image/jpeg') | ($ext == 'image/jpg') | ($ext == 'image/pjpeg') | ($ext == 'image/gif') | ($ext == 'image/png') | ($ext == 'image/x-png') | ($ext == 'image/bmp') | ($ext == 'image/tiff'))
    {
    $nome = str_replace(' ','
    ',$FILES['foto']['name']);
    $nome = str_replace("'","
    ",$nome);
    $new_path = $updir.$nome;
    if (!move_uploaded_file($_FILES['foto']['tmp_name'],$new_path))
    die ("errore nel caricamento file!");
    else
    {
    $link_allegato = "url_assoluta_del_sito/$new_path";
    /* invia la mail con nel testo la variabile $link_allegato */
    }
    }
    }
    }[/php]Spero sia chiaro, se non fosse così continua a chiedere spiegazioni 😉

    p.s. io l'ho fatto in modo ke controlli l'estensione dei file immagine, e una dimensione non superiore a 500k circa, ma tu puoi metterci quello che vuoi, sia come estensione ke come dimensione.


  • User Attivo

    Ma alla fine che faccio invia modulo testo e file allegato insieme lo invio con il tasto invia modulo vero?

    Poi, io all'inizio del form ho:
    <form action="invio.php" method="post" id="modulo">

    tu mi dici
    "enctype=multipart/form-data"

    Non è che non mi funziona ?


  • User Attivo

    infatti l'enctype va inserito insieme a method, id, e action, risultando:
    <form action="invio.php" method="post" id="modulo" enctype="multipart/form-data">

    Ovviamente per caricare un file, devi mettere nel tuo form:
    <input type="file" name="allegato">

    E carichi il tutto col pulsante "invia" del form.

    p.s. nel codice php che ti ho scritto prima, dove c'è la variabile "$_FILES['foto']", "foto" è il nome dell'input file ke hai nel form html; se nel form metti un input file con name="allegato" (come ho fatto poco prima), nella pagina php richiamerai quel valore con "$_FILES['allegato']".


  • User Attivo

    Stò provando adesso
    ma poi i file allegati dove vanno?


  • User Attivo

    Vanno in una directory che io ho chiamato:
    $updir = "./dir_upload/";
    cioè una cartella che sta nella stessa posizione del file "invio.php" che elabora il tutto.


  • User Attivo

    La crea da sola?
    E il link nella email?


  • User Attivo

    Nel codice php che ti ho scritto prima, se non esiste quella directory te la crea automaticamente.
    Il link da mettere nella mail è l'url assoluto del tuo sito (compreso di http e di www) concatenato la variabile $new_path.


  • User Attivo

    Mi carica i files uploadati sul server, come posso cambiarla directory? La voglio mettere in una cartella che si chiama uploads

    e il link nella mia_email per vedere il file allegato?


  • User Attivo

    Se vuoi cambiare directory, basta cambiare il valore della variabile $updir nel mio script php;
    leggi sopra come è composto il link dell'allegato....


  • User Attivo

    Così?
    $link_allegato = "http://www.miosito.net/uploads.$new_path";


  • User Attivo

    Sostituisci il "." tra uploads e $new_path con "/" e sei a posto!


  • User Attivo

    La cartella si è creata dir_upload mi va bene ma i files non ci sono all'interno, non carica....


  • User Attivo

    Hai provato a togliere il limite sulla dimensione e il filtro sulle estensioni? Se vuoi tenere queste limitazioni, sei costretto a rispettarle...


  • User Attivo

    Ho fatto > al posto di <

    if ($_FILES['file'] > 500000)

    qua dici?
    Non funziona lo stesso.


  • User Attivo

    Prova a scrivere** if (true)**, toglilo per ora il controllo, così vediamo se è quello il problema; e così fai anche dove controlla l'estensione del file da caricare; sono quei 2 gli unici controlli che potresti non rispettare nel caricare il file, perchè i permessi di scrittura nella cartella ci sono tutti (0777 di default), l'unico intoppo possono essere quei 2 controlli.
    Toglili e riprova.


  • User Attivo

    Niente ancora... non carica li files....

    😞


  • User Attivo

    Ma if (true)
    al posto di
    if ($_FILES['file'] < 500000)

    ?

    Ma alla fine non ci vuole ---> ;