Form a tendina non invia dati

  • Creatore Discussione Creatore Discussione samiel
  • Data di inizio Data di inizio

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   = "info@liceofranchetti.it";
$receiverMail   = "mauro.sacchetto@tele2.it";
// 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: oioiuoiu@poipoi.it
ggggggggggggggggggggggg 
certificato:
Cioè la voce selezionata nel menu a discesa
non viene in effetti trasmessa...
Dove sta l'errore?
Grazie
M.
 
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>
 
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.
 
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.
 
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 = "mauro.sacchetto@tele2.it";
// 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:
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] => prova@prova.it
    [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
 
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
 
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