Visualizzazione risultati 1 fino 2 di 2

Discussione: Creare un form per l'inserimento di annunci con foto

  1. #1
    eurocollezione non è connesso Utente giovane
    Data registrazione
    10-10-2007
    Messaggi
    50

    Predefinito Creare un form per l'inserimento di annunci con foto

    Ciao a tutti,
    ho creato un form per inserire annunci nel mio sito. Adesso voglio implementarlo con la possibilità di inviare una foto ma non ci riesco, cioè la foto non arriva con l'email dell'annuncio.

    form html

    <title>ANNUNCIO</title>
    <form action="invio3.php" method="post" enctype="multipart/form-data" id="modulo">
    Compila il modulo con il tuo annuncio !<br>
    <br/>
    <table>
    <tr>

    <td>Nome</td>
    <td><label>
    <input name="nome" type="text" id="nome" size="38" />
    </label></td>
    </tr>

    <td>Città</td>
    <td><label>
    <input name="citta" type="text" id="nome" size="38" />
    </label></td>
    </tr>

    <td>Email</td>
    <td><label>
    <input name="mail" type="text" id="mail" size="38" />
    </label></td>
    </tr>

    <tr>
    <td>Oggetto</td>
    <td><label>
    <input name="object" type="text" id="object" size="38" />
    </label></td>
    </tr>

    <tr>
    <td>Annuncio</td>
    <td>
    <textarea name="body" cols="30" rows="5" id="body"></textarea>
    </td>
    </tr>

    <td>Foto</td>
    <td>
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" id="uploadfile" />
    <input name="userfile" type="file" />
    </td>
    </tr>


    <tr>
    <td><label></label>
    </td>
    <td><label>
    <input type="submit" name="submit" id="submit" value="Invia" />&nbsp; <input type="reset" name="cancella" id="cancella" value="Cancella" />
    </label></td>
    </tr>
    </table>
    </form>

    file invio3.php

    <?php
    // indirizzo di chi riceve la mail è sottolineato ma nel codice non sottilineatelo
    if ((trim($_POST['object']) != "") && (trim($_POST['body']) != "")) { //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
    $to = "eurocollezione@gmail.com";
    $headers = "From: " . $_POST['mail'] . "\n";
    // soggetto della mail
    $subject = "Annuncio proveniente dal tuo sito";

    // corpo messaggio
    $body = "Contenuto del modulo:\n\n";
    $body .= "Inviata da: " . trim(stripslashes($_POST["nome"])) . "\n"; //nome che manda la mail, riprende l'id del campo destinato all'inserimento del nome del mittente
    $body .= "Citta: " . trim(stripslashes($_POST["citta"])) . "\n"; //città da cui proviene la mail, riprende l'id del campo destinato all'inserimento del nome del mittente
    $body .= "E-mail: " . trim(stripslashes($_POST["mail"])) . "\n"; //indirizzo e-mail che manda la mail, riprende l'id del campo destinato all'inserimento della mail del mittente
    $body .= "Oggetto: " . trim(stripslashes($_POST["object"])) . "\n"; //oggetto del messaggio
    $body .= "Testo: " . trim(stripslashes($_POST["body"])) . "\n"; //messaggio
    $body .= "Foto: " . trim(stripslashes($_FILES["uploadfile"])) . "\n"; //foto

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

    echo "L'annuncio è stato inviata con successo. Riceverai una mail di conferma della pubblicazione.";

    } else {// altrimenti
    echo "Deve compilare la form prima di inviare.";

    }

    ?>

    La parte evidenziata è quella che ho aggiunto per l'invio della foto. Dove sbaglio ? Grazie per la risposta

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Usa il tag code per il codice :)
    Codice:
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" id="uploadfile" />
    <input name="userfile" type="file" />
    Codice:
    $body .= "Foto: " . trim(stripslashes($_FILES["uploadfile"])) . "\n"; //foto
    Innanzitutto il primo input non è molto utile: se c'è un limite alla dimensione del file, saperlo è compito del server, non del client (e comunque nel codice PHP non lo stai utilizzando...).

    Poi, nel form HTML l'input per il file si chiama "userfile", quindi in PHP dovresti usare $_FILES["userfile"]. Quest'ultimo comunque è un vettore associativo che contiene varie chiavi, tra cui 'tmp_name' con il percorso (temporaneo) in cui il file è stato caricato. Se vuoi leggere il contenuto dell'immagine, devi aprire e leggere quel file.

    Infine, non poi semplicemente stampare il contenuto di un'immagine nel corpo dell'email, il risultato sarebbe una stringa di codice incomprensibile. Le opzioni sono 3:
    • inviare l'immagine come allegato (eventualmente cancellandola dal tuo server)
    • salvare l'immagine caricata nel tuo server ed inviare un link a tale immagine nell'email
    • salvare l'immagine caricata nel tuo server e comporre l'email in HTML anziché testo semplice, così da poter inserire un tag <img>


    In ogni caso, questa giuda è un buon punto di partenza: http://www.w3schools.com/php/php_file_upload.asp.
    Naturalmente sarebbe anche il caso di rendere il codice più robusto con qualche controllo qua e là (ad esempio, cosa succede se i campi città ed email non sono stati compilati, o se non è stato inviato nessun file? Oppure se il file non è un'immagine?), ma questo sarà fatto in un secondo momento.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •