Form a tendina non invia dati

samiel

Nuovo Utente
6 Mar 2008
12
0
0
Devo creare un form per la richiesta di certificati. Questo il codice:
Codice:
<?php
if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['msg']) && isset($_POST['uso'])){
// indirizzo e-mail destinatario
// $receiverMail   = "[email protected]";
$receiverMail   = "[email protected]";
// pulizia dei dati inseriti
$name   = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$msg = ltrim(rtrim(strip_tags($_POST['msg'])));
// lettura dell'indirizzo IP
$ip = getenv("REMOTE_ADDR");
// formattazione del messaggio ( \n per le messe a capo )
// $msgformat   = "Messaggio da: $name ($ip)\nEmail: $email\n\n$msg";
$msgformat   = "Mittente: $name \nIP del mittente: ($ip)\nE-mail: $email\n$msg \ncertificato: $uso";
// verifica campi obbligatori
if(empty($name) || empty($email) || empty($msg)) {
echo "<h3>Il messaggio non è stato inviato</h3>
<h3>Si prega di compilare tutti i campi</h3>"; }
//verifica l'indirizzo mail
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "<h3>Il messaggio non è stato inviato</h3>
<h3>L'indirizzo e-mail indicato non è valido</h3>"; }
else{
//invio del messaggio
mail($receiverMail, $subject, $msgformat, "From: $name <$email>");
echo "<h3>Il messaggio è stato inviato correttamente</h3>
<h3>Nei limiti del possibile, <br /> risponderemo entro 24 ore</h3>
<h3>Grazie di averci scritto</h3>";
}
}
else{
// metti il form
// $self=$_SERVER['PHP_SELF'];
$self=$_SERVER['index.php?pagina=informazioni'];
echo <<<FRM
<h2>Richiesta informazioni</h2>
<h3>Riempire i campi richiesti <br /> e premere il pulsante "Invia"</h3>
<br /><br />
<form action="$self" method="post">
Nome e cognome:<br /><br />
<input name="name" size="50" maxlength="40" />
<br /><br /><br />
Indirizzo e-mail:<br /><br />
<input name="email" size="50" maxlength="40" />
<br /><br /><br />
Quali informazioni si desiderano? <br /><br />
<textarea name="msg" cols="50" rows="12"></textarea>
<br /><br /><br />
ad uso <select name="uso">
<option selected>assegni familiari</option>
<option selected>assistenza sanitaria</option>
<option selected>sussidio scolastico</option>
<option selected>borsa di studio</option>
<option selected>libretto di lavoro</option>
<option selected>rinvio obblighi di leva</option>
<option selected)>altro (usi consentiti dalla legge)</option>
</select>

<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</form>
FRM;
}
 ?>
Ora, il messaggio arriva correttamente a destinazione,
ma la voce "uso" e differenza delle altre è vuota.
In altre parole, la mail che arriva contiene:
Codice:
Mittente: ffffffffffffffff 
IP del mittente: (80.171.232.52)
E-mail: [email protected]
ggggggggggggggggggggggg 
certificato:
Cioè la voce selezionata nel menu a discesa
non viene in effetti trasmessa...
Dove sta l'errore?
Grazie
M.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Prova:
PHP:
<select name="uso">
<option value="assegni familiari">assegni familiari</option>
<option value="assistenza sanitaria">assistenza sanitaria</option>
.........
<option value="altro">altro (usi consentiti dalla legge)</option>
</select>
 

samiel

Nuovo Utente
6 Mar 2008
12
0
0
Avevo già provato, anzi si tratta forse
della forma più "canonica" di quella
che ho adottato io. Ma non va...
L'errore deve stare altrove...

M.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Il problema è che utilizzi $uso senza settare il valore della variabile,
lo stesso lo fai per $subject; prova così:

PHP:
$name   = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$msg = ltrim(rtrim(strip_tags($_POST['msg'])));
$uso = trim(htmlspecialchars($_POST['uso'], ENT_QUOTES));
$subject = "Invio messaggio";

probabimente non hai l'error_reporting del PHP.in su E_ALL e non ti vengono stampati tutti gli errori.
 

samiel

Nuovo Utente
6 Mar 2008
12
0
0
Allora... quella soluzione mi dava errore, ma la pagina
era provvisoria. Adesso ho realizzato quella completa,
Ma anche se inserisco tutti i dati, mi dice che non puà inviare
perché mancano dei campi...
Prova a vedere il codice (mi scuso per la lunghezza):
Codice:
<?php
if(isset($_POST['nome']) && 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 = "[email protected]";
// pulizia dei dati inseriti
$nome = ltrim(rtrim(strip_tags(stripslashes($_POST['nome']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$telefono = ltrim(rtrim(strip_tags(stripslashes($_POST['telefono']))));
$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\n chiede numero: $numero\n certificati di tipo: $tipo\n ad uso: $uso\n";
// verifica campi
if(empty($name) || empty($email) || empty($telefono) || empty($luogo) || empty($data) || empty($classe) || empty($anno) || empty($numero) || empty($tipo) || empty($uso)) {
echo "<h3>Il messaggio non è stato inviato</h3>
<h3>Si prega di compilare tutti i campi</h3>"; }
// verifica l'indirizzo mail
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "<h3>Il messaggio non è stato inviato</h3>
<h3>L'indirizzo e-mail indicato non è valido</h3>"; }
else{
// invio del messaggio
mail($receiverMail, $msgformat, "From: $name <$email>");
echo "<h3>Il messaggio è stato inviato correttamente</h3>
<h3>Nei limiti del possibile, <br /> risponderemo entro 24 ore</h3>
<h3>Grazie di averci scritto</h3>";
}
}
else{
// inserimento del form
$self=$_SERVER['index.php?pagina=certificati'];
echo <<<FRM
<h3>È possibile richiedere un certificato <br /> direttamente da questo form</h3>
<h3>Riempire i campi richiesti <br /> e premere il pulsante "Invia"</h3>
<br /><br />
<form action="$self" method="post">
Il sottoscritto <input name="nome" size="50" maxlength="40" />
<br /><br />
indirizzo email <input name="email" size="50" maxlength="40" />
<br /><br />
numero di telefono <input name="telefono" size="50" maxlength="40" />
<br /><br />
nato a <input name="luogo" size="50" maxlength="40" />
<br /><br />
il giorno <input name="data" size="50" maxlength="40" />
<br /><br />
iscritto alla classe <input name="classe" size="50" maxlength="40" />
<br /><br />
nell'anno scolastico <input name="anno" size="50" maxlength="40" />
<br /><br />
chiede numero <input name="numero" size="50" maxlength="40" />
<br /><br />
certificati di <select name="tipo" size="1">
<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 />
ad uso <select name="uso" size="1">
<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 /><br />
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</form>
FRM;
}
 ?>
C'è senz'altro qualche errore sintattico.
probabimente non hai l'error_reporting del PHP.in su E_ALL e non ti vengono stampati tutti gli errori
Interessante, soprattutto per un niubbo come me:
dovrei vedere php.ini?

Mille grazie
M.
 
Ultima modifica:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
c'è un modo molto semplice per visualizzare tutti i dati inviati tramite POST, basta stampare l'intero contenuto dell'array POST:

PHP:
echo "<pre>";
print_r($_POST);
echo "</pre>";

facendo una prova con il tuo codice ho ottenuto:

PHP:
Array
(
    [nome] => prova
    [email] => [email protected]
    [telefono] => prova
    [luogo] => prova
    [data] => prova
    [classe] => prova
    [anno] => prova
    [numero] => prova
    [tipo] => iscrizione e frequenza
    [uso] => sussidio scolastico
)

l'errore è qui:
PHP:
if(empty($name)

perchè la variabile si chiama $nome non $name
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
error_reporting è una variabile che permette di mostrare gli errori prodotti dai codici PHP, molti usano settare questa direttiva su:
PHP:
E_ALL & ~E_NOTICE

questo non è corretto perchè nasconde gli errori che (anche se meno gravi), possono compromettere il funzionamento di uno script (come nel tuo caso)

il setaggio corretto è:
PHP:
E_ALL
 

samiel

Nuovo Utente
6 Mar 2008
12
0
0
Ah, che errore idiota...
Ho sistemato anche il resto:
mail($receiverMail, "From: $name <$email>", $msgformat)
e non viceversa (prima $msgformat e dopo il campo From),
altrimenti il testo del msg finiva nello header delle email.
Perfetto, grazie mille!
M.
 
Discussioni simili
Autore Titolo Forum Risposte Data
V [PHP] Form con elenco a tendina con dati DB PHP 20
T form con select a tendina dinamici Javascript 5
J FORM: Menu a tendina con tantissime occorrenze HTML e CSS 0
S passare un valore da un form a un file .php con metodo post PHP 4
K Form che manda dati doppi PHP 1
K Problema form update PHP 2
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
K form Inserimento record mysql PHP 2
I Form con selettore HTML e CSS 0
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
D Form contatti non funzionante HTML e CSS 0
A Stampare dati da form PHP 8
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
I Form HTML e CSS 17
otto9due $_FILE non passa i dati dal form PHP 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
felino Form action costum e parametri in queryString WordPress 1
M Come recuperare molteplici input form PHP 1
M Collegamento tra form html e script php PHP 4
L form immagini per il database PHP 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L inserimento form dati multipli ? PHP 0
L Problemi form Pagina php HTML e CSS 3
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
D Devo far funzionare un form di contatti PHP 4
B form gestione input PHP 2
V PHP form intersecate PHP 0
8 Javascript - PDF Form Javascript 0
J Form inserimento dati in database Ajax 1
E Gestione profilo utente tramite Form PHP 3
R [C#] Form principale si blocca mentre un altro Thread lavora .NET Framework 0
M Problema con controllo form in real time jQuery 6
D Form validazione Javascript 2
R form recovery pass PHP 0
V Symfony e i form PHP 3
M form con checkbox PHP 8
S come aggiustare un form di contatto? HTML e CSS 3
F query e form con select multipla PHP 17
MarcoGrazia Verifica di una stringa o di un nome proveniente da form Snippet PHP 0
A Inserimento dati nel database tramite form + altre operazioni PHP 18
websilvia Contact form using Bootstrap 3.3.4 PHP 8
Alex_70 Button non funziona nella form PHP 2
C Form email php su pagina index.html? PHP 21
W Rinominare Documenti Con Form Asp Classic ASP 9
S Invio email da form PHP 8

Discussioni simili