form in PHP

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

form in PHP

Messaggio 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

roberto67
Packager
Packager
Messaggi: 361
Iscritto il: lun 14 set 2009, 18:55
Slackware: 15.0 multilib
Desktop: plasma 5
Contatta:

Re: form in PHP

Messaggio 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..

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: form in PHP

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: form in PHP

Messaggio 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

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: form in PHP

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: form in PHP

Messaggio 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.

Avatar utente
zoros
Linux 4.x
Linux 4.x
Messaggi: 1361
Iscritto il: lun 28 mag 2007, 22:51
Nome Cognome: Fabio`Zorba`
Slackware: 14.1
Kernel: 3.10.30-smp
Desktop: KDE-3.5(works!)
Località: Gorizia
Contatta:

Re: form in PHP

Messaggio 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
vorrei riavere le mie firme ...

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: form in PHP

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: form in PHP

Messaggio da conraid »

Prova con phpmailer (http://phpmailer.worxware.com/) mettendo un smtp esterno e vedi che succede

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: form in PHP

Messaggio 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

Rispondi