[Risolto] inviare dati alla mail tramite un form

Ciao a tutti,

sto costruendo un mio sito, premetto che conosco un po' di HTML e sto cercando di capire

come inserire un form per l'invio di messaggi. Ho scritto anche il codice .php a cui fa riferimento il form.

Ho fatto delle prove e sono arrivata fino a questo punto (vedi codice sotto)

Il problema è che quando pubblico la pagina, e faccio la prova con l'invio del messaggio, mi da un errore:

nel senso che mi chiede dove salvare il file "invio.php".

In sostanza non riesco a far inviare i dati alla mia mail.

Qualcuno mi può aiutare? ???

ecco il codice php chiamato "invio.php"

<?php
//recupero i valori dai campi del form
$nome = $_POST['nome'];
$oggetto = $_POST['oggetto'];
$email = $_POST['mail'];
$msg = $_POST['msg'];
//stabilisco delle variabili aggiuntive per l'invio dell'email
$dati = "From: ".$nome;
$dati .= "Reply-to: ".$email;
$dati .= "X-Mailer: PHP/".phpversion();
//invio l'email
mail("$destinatario", "$oggetto", "$msg", "$dati");
?>

ecco il form:

<form id="contacts-form" method="post"  action="invio.php">
                  <fieldset>
                        <div class="col-1">
                           <label>Scrivi il tuo nome / <em>Enter Your Name:</em><br /><input type="text"  name="nome" value=""/></label>
                           <label>Scrivi la tua e-mail /<em> Enter Your E-mail:</em><br /><input type="text" name="mail" value=""/></label>
                           <label>Scrivi l'oggetto della mail /<em> Enter e-mail subject:</em><br /><input type="text" name="oggetto" value=""/></label>
                    </div>
                        <div class="col-2">
                            Scrivi il tuo messaggio / <em>Enter Your Message:</em><br /><textarea name="msg" cols="31" rows="6"></textarea>
                           <div class="alignright"><a href="#" onclick="document.getElementById('contacts-form').reset()">cancella/clear</a>
                           &nbsp; &nbsp; &nbsp; &nbsp;<a href="#" onclick="document.getElementById('contacts-form').submit()">invia/submit</a>
                           </div>
                        
                    </fieldset>
                 </form>
inviato 6 anni fa
cristinar
modificato 6 anni fa
Mario Santagiuliana
X 0 X

Il problema è che quando pubblico la pagina, e faccio la prova con l'invio del messaggio, mi da un errore:

nel senso che mi chiede dove salvare il file "invio.php".

Il server web dove pubblichi il tuo codice ha abilitato l'esecuzione del php?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ciao Marios,

ho guardato nel pannello di controllo di aruba su cui appoggia il mio sito, ecco alcune info:

Tipo di servizio :   Hosting Windows

Numero di E-mail configurate : 1

Spazio disponibile :  Illimitato

Versione PHP

Versione Asp/Asp.Net/Mdac

Quindi credo di si, che supporti il php.

Il codice sarebbe giusto come l'ho scritto?

Grazie

Cri :)

risposto 6 anni fa
cristinar
X 0 X

Il codice è corretto, tanto più se ti funziona in locale. Hai un problema con il server e i file da esso ospitati.

Non conosco il servizio da te utilizzato su Aruba, non conosco i suoi prodotti.

"Versione di Php" però non dice nulla se puoi usare o meno il php.

Il file che hai caricato ha l'estensione php non txt (del tipo invia.php.txt con .txt nascosto) vero?

Facciamo una prova.

Crea un semplice file test.php contenente:

<?php
echo "Il php funziona";
?>

Caricalo sulla homepage del tuo sito, vai al tuo sito www.example.com/test.php

Ti compare la scritta che php funziona?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Wow, mi dice:

Il php funziona

!!! wow!!!

Bene, però nemmeno in locale mi funziona il mio codice.

Per esempio la variabile $destinatario a cosa mi serve se non ho riscontro nel form?

Non dovrei scrivere da qualche parte l'indirizzo della mia mail? oppure devo sostituire &destinatario con la mia mail?

Non capisco cosa non va nel codice..

grazie cri

risposto 6 anni fa
cristinar
X 0 X
Bene, però nemmeno in locale mi funziona il mio codice.

 :o avevo capito funzionava...

Allora esattamente cosa deve fare questo script? Ti server per fare in modo che gli utenti ti contattino tramite la pagina del form?

In tal caso elimina direttamente $destinatario e metti direttamente il tuo indirizzo email.

Appena verificato l'effettivo funzionamento dello script è il caso che inizi a mettere qualche controllo in più sui dati che ricevi dal form!!! Questo per questioni di sicurezza.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Siii, cambiando $destinatario e mettendo il mio indirizzo funziona, cioè spedisce il messaggio nella mia mail.

Però:

quando do invio mi apre una pagina bianca, posso creare una pagina in cui dico che la mail è stata inviata corretamnete con la grafica inerente al mio sito?

E poi, che tipo di controlli devo mettere?

Grzie grazie grazie!!!!

Mi stai davvero aiutando :)

risposto 6 anni fa
cristinar
X 0 X

Il codice di avviso lo puoi mettere direttamente sotto il tuo script invio.

Altrimenti alla fine di tutto usi la funzione headers e fai dunque un redirect alla pagina che ti interessa.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ho cambiato il php aggiungendo i controlli, diciamo che ho fatto un copia e incolla cambiando poi i nomi di riferimento, mi sembra funzioni tutto, ma è normale che mi serva di "zobaz.altavista.org..."?

E poi per personalizzare la pagina di risposta dell'invio form come faccio ad integrarlo alla mia grafica?

devo richiamare una pagina html?

ace :)

<?php
//recupero i valori dai campi del form
$nome = $_POST['nome'];
$oggetto = $_POST['oggetto'];
$email = $_POST['mail'];
$msg = $_POST['msg'];
//stabilisco delle variabili aggiuntive per l'invio dell'email
$dati = "From: ".$nome;
$dati .= "Reply-to: ".$email;
$dati .= "X-Mailer: PHP/".phpversion();
//invio l'email
mail("miamail@gmail.com", "$oggetto", "$msg", "$dati");
 if($nome=="") {
        header("Refresh: 5; url=http://zobaz.altervista.org/testing/headerRefresh/");
        echo "Devi inserire il tuo nome.";
    }
    elseif(!ereg("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$mail)) {
        header("Refresh: 5; url=http://zobaz.altervista.org/testing/headerRefresh/");
        echo "Devi inserire un formato di e-mail valido per il mittente.";
    }
    elseif ($msg=="") {
        header("Refresh: 5; url=http://zobaz.altervista.org/testing/headerRefresh/");
        echo "Hai dimenticato il messaggio.";
    }
    elseif(mail($mail, "Richiesta informazioni  da $nome", $msg, "From:<$mail>\n")) {
        header("Refresh: 5; url=http://www.zobaz.it");
        echo "Mail inviata con successo, le risponderemo nel pi&ugrave; breve tempo possibile.";
    }
    else {
        header("Refresh: 5; url=http://zobaz.altervista.org/testing/headerRefresh/");
        echo "Si è verificato un errore durante l'invio.";
    }


?>
risposto 6 anni fa
cristinar
X 0 X

..un'altra cosa che non mi piace che nella mail, al ppsto del semplice nome e indirizzo mail, mi scrive:

NomeContatto Reply-to:nomecontatto@gmail.comX-Mailer: PHP/5.2.12

posso forse togliere dal file .php il codice  "xmailer:PHP" e "replay-to"?

Oppure sono necessari? :-\

risposto 6 anni fa
cristinar
X 0 X

Hai sbagliato a fare il controllo: si fa prima di inviare l'email!!!

Se tutto è in ordine allora invia l'email se no non si fa niente e si stampano gli errori.

Inoltre i controlli dovresti farli sui dati in ingresso (tipo eliminare i tag html se non ti interessano ecc. ecc., qui devi vedere te cosa vuoi filtrare).

Inoltre hai fatto un copia e incolla spudorato di un codice.

Il Php è un linguaggio di programmazione, devi ragionare su quello che fai.

Perchè se c'è un errore lanci un header e poi un echo?

Per l'ultima domanda devi impostare meglio l'header della tua email.

Fa riferimento alla documentazione ufficiale:

http://php.net/manual/en/function.mail.php

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Grazie per l'aiuto che mi hai dato fin ora, proverò a risolvere le ultime cose :)

risposto 6 anni fa
cristinar
X 0 X

Ciao Marios!

ho modificato il codice alle mie esigenze, e funziona tutto grazie anche ai tuoi consigli.

Volevo ringraziarti :)

Non avendo mai studiato php posso sentirmi giustificata di aver preso pezzi di codice qua e là, si? :P

Ecco il codice:

<?php

$nome = $_POST['nome'];
$oggetto = $_POST['oggetto'];
$email = $_POST['mail'];
$msg = $_POST['msg'];

if($nome=="") {
        header("Refresh: 5; url=http://www.miosito.com/");
        echo "Devi inserire il tuo nome.";
    }
    elseif(!ereg("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})",$mail)) {
        header("Refresh: 5; url=http://www.miosito.com/");
        echo "Devi inserire un formato di e-mail valido per il mittente.";
    }
    elseif ($msg=="") {
        header("Refresh: 5; url=http://www.miosito.com/");
        echo "Hai dimenticato il messaggio.";
    }
    elseif(mail($mail, "Richiesta informazioni da $nome", $msg, "From:<$mail>\n")) {
        header("Refresh: 5; url=http://www.miosito.com");
        echo "Mail inviata con successo, le risponderemo nel pi&ugrave; breve tempo possibile.";
   echo "Tra 5 secondi sarai reindirizzato al sito."; 
    }
    else {
        header("Refresh: 5; url=http://www.miosito.com/");   
        echo "Si è verificato un errore durante l'invio.";   }


$dati = "From: ".$nome;
$dati .= "Reply-to: ".$email;

mail("miosito@gmail.com", "$oggetto", "$msg", "$dati"); 
?>

al posto del testo nell'echo credo che farò caricare una pagina con un'immagine che riprenda la grafica del mio sito.

cioè aggiungerò:

echo "<img alt=\"\" src=\"nuova.png\">";

ciao a prestoo!!

Cri ;)

risposto 6 anni fa
cristinar
X 0 X

Bene così.

E' più che corretto sfruttare codice già esistente :) , l'importante è farlo con testa e consapevolezza. Questo per evitare danni altrui e specialmente danni a se stessi (di sicurezza e altro).

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda