Pagina 1 di 1

form in PHP

Inviato: ven 27 gen 2012, 17:46
da samiel
Ho un form in PHP per inviare mail.
Inpassato funzionava a dovere, adesso però,
noncapisco comemai, non sembra funzionare
nel senso che le mail non arrivano.

Codice: Seleziona tutto

<div class="overtitle"><p>Segreteria</p></div>
<h1>Richiesta certificati</h1>

<script type="text/javascript">
        var RecaptchaOptions = {
                custom_translations : {
                        instructions_visual : "Scrivi le due parole:",
                        instructions_audio : "Trascrivi ci\u00f2 che senti:",
                        play_again : "Riascolta la traccia audio",
                        cant_hear_this : "Scarica la traccia in formato MP3",
                        visual_challenge : "Modalit\u00e0 visiva",
                        audio_challenge : "Modalit\u00e0 auditiva",
                        refresh_btn : "Chiedi due nuove parole",
                        help_btn : "Aiuto",
                        incorrect_try_again : "Scorretto. Riprova.",
                },
                lang : 'it', // Unavailable while writing this code (just for audio challenge)
                theme : 'clean',
        };
</script>

<?php
if(isset($_POST['name'])) {
// && isset($_POST['email']) && isset($_POST['telefono']) && isset($_POST['luogo']) && isset($_POST['data']) && isset($_POST['classe']) && isset($_POST['anno']) && isset($_POST['numero']) && isset($_POST['tipo']) && isset($_POST['uso'])){
// indirizzo e-mail destinatario
$receiverMail = "mail@mail.com";
// pulizia dei dati inseriti
// print_r($_POST);
$nome = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$telefono = ltrim(rtrim(strip_tags(stripslashes($_POST['tel']))));
$luogo = ltrim(rtrim(strip_tags(stripslashes($_POST['luogo']))));
$data = ltrim(rtrim(strip_tags(stripslashes($_POST['data']))));
$classe = ltrim(rtrim(strip_tags(stripslashes($_POST['classe']))));
$anno = ltrim(rtrim(strip_tags(stripslashes($_POST['anno']))));
$numero = ltrim(rtrim(strip_tags(stripslashes($_POST['numero']))));
$tipo = trim(htmlspecialchars($_POST['tipo'], ENT_QUOTES));
$uso = trim(htmlspecialchars($_POST['uso'], ENT_QUOTES));
// ltrim(rtrim()) == trim()
// lettura dell'indirizzo IP
$ip = getenv("REMOTE_ADDR");
// formattazione del messaggio
$msgformat = "mittente: $nome\nIP del mittente: $ip\ne-mail: $email\ntelefono: $telefono\nnato a: $luogo\nin data: $data\niscritto alla classe: $classe\nnell'a. s.: $anno\nchiede numero: $numero\ncertificati di tipo: $tipo\nad uso: $uso\n";
// verifica dei campi
if(empty($nome) || empty($email) || empty($telefono) || empty($luogo) || empty($data) || empty($classe) || empty($anno) || empty($numero) || empty($tipo) || empty($uso)) {
echo "<h3 class=\"danger\">Il messaggio non &#232; stato inviato <br />
Si prega di compilare tutti i campi</h3>"; }
// verifica dell'indirizzo mail
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "<h3 class=\"danger\">Il messaggio non &#232; stato inviato<br />
L'indirizzo e-mail indicato non &#232; valido</h3>"; }
else{
// invio del messaggio
mail($receiverMail, "Oggetto: richiesta certificati", $msgformat);
echo "<h3>La richiesta &#232; stata inviata correttamente<br />
Il certificato potr&#224; essere ritirato presso la Segreteria<br />
il quinto giorno lavorativo successivo alla richiesta</h3>";
}
}
else{
// inserimento del form
// Per inviare alla stessa pagina, nel form basta mettere action=""
// Il parametro 'name' non serve nel submit e nel reset
echo <<<FRM
<h3>&#200; possibile richiedere un certificato <br /> direttamente da questo form</h3>
<h3 class="spacebottom">Riempire i campi richiesti, <br /> quindi la casella di
controllo <br /> e premere il pulsante "Invia"</h3>
<form action="" method="post">
<fieldset>
<label class="row" for="name">Il sottoscritto:</label><br />
<input type="text" name="name" id="name" size="50" maxlength="50" /><br /><br />
<label class="row" for="email">indirizzo e-mail:</label><br />
<input type="text" name="email" id="email" size="50" maxlength="50" /><br /><br />
<label class="row" for="tel">telefono:</label><br />
<input type="text" name="tel" id="tel" size="50" maxlength="50" /><br /><br />
<label class="row" for="luogo">nato a:</label><br />
<input type="text" name="luogo" id="luogo" size="50" maxlength="50" /><br /><br />
<label class="row" for="data">il giorno:</label><br />
<input type="text" name="data" id="data" size="50" maxlength="50" /><br /><br />
<label class="row" for="classe">iscritto alla classe:</label><br />
<input type="text" name="classe" id="classe" size="50" maxlength="50" /><br /><br />
<label class="row" for="anno">nell'anno scolastico:</label><br />
<input type="text" name="anno" id="anno" size="50" maxlength="50" /><br /><br />
<label class="row" for="numero">chiede numero:</label><br />
<input type="text" name="numero" id="numero" size="50" maxlength="50" /><br /><br />
<label class="row" for="tipo">certificati di:</label><br /><br />
<select name="tipo" size="1" id="tipo">
<option value="iscrizione">iscrizione</option>
<option value="iscrizione e frequenza">iscrizione e frequenza</option>
<option value="dichiarazione promozione">dichiarazione promozione</option>
<option value="promozione con voti">promozione con voti</option>
<option value="diploma">diploma</option>
</select><br /><br />
<label class="row" for="uso">ad uso:</label><br /><br />
<select name="uso" size="1" id="uso">
<option value="assegni familiari">assegni familiari</option>
<option value="assistenza sanitaria">assistenza sanitaria</option>
<option value="sussidio scolastico">sussidio scolastico</option>
<option value="borsa di studio">borsa di studio</option>
<option value="libretto di lavoro">libretto di lavoro</option>
<option value="rinvio obblighi di leva">rinvio obblighi di leva</option>
<option value="altro (usi consentiti dalla legge)">altro (usi consentiti dalla legge)</option>
</select><br /><br />
<p>Casella di controllo</p>
FRM;
// inserimento reCAPTCHA
require_once('recaptchalib.php');
  $publickey = "6LcXGL4SAAAAAJk4fa1MLc5y09rHr8Bxsg9S5L88";
  echo recaptcha_get_html($publickey);
echo <<<FRM
<br />
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</fieldset>
</form>
FRM;
}
?>
Ci trovate errori?
Grazie !!
M

Re: form in PHP

Inviato: ven 27 gen 2012, 23:39
da roberto67
ma che errore ti da? ovviamente qui non posso postare
a parte la parte recaptcha, hai guardato se l'ultima riga dei due blocchi di testo con sintassi heredoc finiscono rigorosamente a capo, cioè senza spazi prima di FRM;?
[...]
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</fieldset>
</form>
FRM;
nel javascript mi pare che l'ultima virgola sia di troppo..

Re: form in PHP

Inviato: sab 28 gen 2012, 13:53
da samiel
Il codice mi sembra a posto.
Non dà alcun errore, anzi avverte
che il messaggio è stato correttamente inviato.
Solo che poi non arriva a destinazione nulla...

M

Re: form in PHP

Inviato: sab 28 gen 2012, 14:05
da conraid
Beh, no, a seconda di come è impostato il server tu non sai se da errore o no, dovresti fare il controllo della funziona, tipo (scrivo di getto controlla)

Codice: Seleziona tutto

if (mail($receiverMail, "Oggetto: richiesta certificati", $msgformat)) {
echo "<h3>La richiesta &#232; stata inviata correttamente<br />
Il certificato potr&#224; essere ritirato presso la Segreteria<br />
il quinto giorno lavorativo successivo alla richiesta</h3>";
} else {
  echo 'errore';
}
inoltre mi sembrerebbe giusto aggiungere un CC all'utente e non scrivere "La richiesta &#232; stata inviata correttamente, Il certificato potr&#224; essere ritirato presso la Segreteria il quinto giorno lavorativo successivo alla richiesta" perché appunto non sai se funziona o meno l'invio. Magari c'è un errore nel server mail e che fai?
Io mettere un banale "la richiesta è stata inviata, attendere conferma via mail" e poi mettere un reply automatico alle mail che arrivano dal form nel server mail o anche nel client se non è possibile nel server, anzi forse è meglio

Re: form in PHP

Inviato: sab 28 gen 2012, 18:05
da samiel
Osservazioni giustissime.
SOlo che ho se spedisco all'indirizzo "naturale" e cioè la Segreteria
non arriva niente. Allora ho modificato la voce $receiverMail = "mail@mail.com";
mettendo il mio indirizzo e non mi arriva niente lo stesso.
Per questo mi è sorto il dubbio che il problema non stia nel server mail della scuola:
perché allora col mio indirizzo dovrebbe funzionare!

M

Re: form in PHP

Inviato: sab 28 gen 2012, 18:33
da conraid
samiel ha scritto:Osservazioni giustissime.
SOlo che ho se spedisco all'indirizzo "naturale" e cioè la Segreteria
non arriva niente. Allora ho modificato la voce $receiverMail = "mail@mail.com";
mettendo il mio indirizzo e non mi arriva niente lo stesso.
Per questo mi è sorto il dubbio che il problema non stia nel server mail della scuola:
perché allora col mio indirizzo dovrebbe funzionare!

M
le considerazioni valgono comunque, devi vedere se la funziona php ritorna un errore oppure no, e da li a monte capire dove sia il problema.

Re: form in PHP

Inviato: sab 28 gen 2012, 19:47
da zoros
forse conviene fare dei test con il codice minimo, tipo "inviomail.php":

Codice: Seleziona tutto

<?php

$intestazioni  = "MIME-Version: 1.0\r\n";
$intestazioni .= "Content-Type: text/html;\r\n Content-Transfer-Encoding: 8bit\r\n charset=iso-8859-1\r\n";

$errorhandler = mail("mail@mail.com", "Una prova", "Testo del messaggio", $intestazioni);

echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html><body>';
echo "Mailer response: " . $errorhandler;
echo '</body></html>';

?>
forse conviene controllare che il record MX sia ok:

Codice: Seleziona tutto

dig -t mx dominio.dom
e vedere se per caso le mail sono finite nella directory spam

Re: form in PHP

Inviato: sab 28 gen 2012, 20:37
da samiel
Ho provato con il codice suggeritomi:

Codice: Seleziona tutto

// invio del messaggio
elseif
(mail($receiverMail, "Oggetto: richiesta certificati", $msgformat)) {
echo "<h3>La richiesta &#232; stata inviata correttamente<br />
Il certificato potr&#224; essere ritirato presso la Segreteria<br />
il quinto giorno lavorativo successivo alla richiesta</h3>";
}
else {
  echo 'errore';
}}
// mail($receiverMail, "Oggetto: richiesta certificati", $msgformat);
// echo "<h3>La richiesta &#232; stata inviata correttamente<br />
// Il certificato potr&#224; essere ritirato presso la Segreteria<br />
// il quinto giorno lavorativo successivo alla richiesta</h3>";
// }
// }
else{
// inserimento del form
COmeprima, ottengo il messaggio di avvenuta spedizione
ma poi del messaggio si perdon le tracce....

M

Re: form in PHP

Inviato: ven 3 feb 2012, 13:34
da conraid
Prova con phpmailer (http://phpmailer.worxware.com/) mettendo un smtp esterno e vedi che succede

Re: form in PHP

Inviato: sab 4 feb 2012, 23:57
da samiel
Domani bambini permettendo provo.
la cosa che mi sconcerta è che quando ho messo un controllo chaptcha
poi ho provato e funzionava tutto. A distanza di tempo mi avvertono
che u messaggi non arrivano più e non capisco cosa sia accaduto
visto che nel frattempo non ho cambiato nulla...


M