Form mail php ritorna sempre messaggio di compilare tutti i campi

Ciao,

ho provato a scrivere un form per l'invio mail. Purtroppo mi ritorna sempre il messaggio di compilare tutti i campi anche se sono tutti compilati. Non riesco a capire dove sia l'errore.

Questa la pagina di process:

            // richiama il file di setting
            require_once('settings.php');
            
            if (isset($_POST['submit'])) {            
            // codice che processa il form
               foreach ($_POST as $key => $value){
                  //elimina eventuali spazi aggiuntivi
                  $temp = trim($value);
                  //se è richiesta ma vuota, aggiungila all'array missing
                  if(!strlen($temp) && in_array($key, $required)){
                     array_push($missing, $key);
                  }
                  // se il campo è aspettato, setta la variabile associata
                  elseif(in_array($key, $expected)){
                     ${$key} = htmlentities($temp);
                  }
               }
               
               if (empty($missing)) {
                  $contenuto_email = "Nome: $name\n\n";
                  $contenuto_email .= "Cognome: $surname\n\n";
                  $contenuto_email .= "Telefono: $tel\n\n";
                  $contenuto_email .= "Cellulare: $cel\n\n";
                  $contenuto_email .= "Messaggio:\n $mess\n\n";
                  // limita la lunghezza a 70 caratteri per la compatibilità
                  $contenuto_email = wordwrap($contenuto_email,70);
                  $contenuto_email .= "Autorizzazione: $yn\n\n";
                  // invia l'email
                  $mail_sent = mail($destinatario,$subject,$contenuto_email, 'From: '.$mail);
                  $info_message = '<p class="info">' . $info_mail_sent . '</p>';
                  if($mail_sent) {
                     // Se l'email viene inviata l'array missing non serve più quindi viene svuotato
                     unset($missing);
                  }
               }
            }

                  
            //se non sono stati compilati i campi obbligatori
            if (isset($_POST['submit']) && isset($missing) && !empty($missing)) :
               $info_message = '<p class="error">' . $error_missing_fields . '</p>';
            elseif (isset($_POST['submit']) && $_POST['submit'] && !$mail_sent) :
               // se ci sono stati problemi con l'invio della mail da parte del server
               $info_message = '<p class="error">' . $error_mail_server . '</p>';
            endif;
                  
            // Mostra una notifica d'errore e di conferma
            if (isset($info_message) && strlen($info_message))
            echo $info_message;
               
            // richiama il form
            require_once('form.php');

Questa la pagina settings:

   //Messaggio di conferma invio mail
   $info_mail_sent = 'La richiesta di contatti &egrave; stata inviata correttamente! La ricontatteremo il prima possibile.';
   
   // Messaggio d'errore per campi mancanti
   $error_missing_fields = 'Per favore, completate tutti i campi del form indicati';
   
   // email del destinatario del form
   $destinatario = 'miaemail@gmail.com';
   
   // evita che qualcuno possa manomettere
   // il form inserendo campi non previsti
   $expected = array('name','surname','tel','cel','mail','subject','mess','yn');
   
   // imposta i campi obbligatori
   $required = array('name','surname','mail','subject','mess','yn');
   
   // array vuoti per i campi obbligatori mancanti
   $missing = array();

Questa la pagina del form:

<form id="form_contact" action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
            <ol>
               <li>
                  <label for="name">Nome <abbr title="Campo obbligatorio">*</abbr></label>
                  <input type="text" name="name" tabindex="1" value="<?php if (isset($missing) && isset($name)) echo $name; ?>" class="<?php if (isset($missing) && in_array('name',$missing)) echo 'error'; ?>" />
               </li>
               <li>
                  <label for="surname">Cognome <abbr title="Campo obbligatorio">*</abbr></label>
                  <input type="text" name="surname" tabindex="2" value="<?php if (isset($missing) && isset($surname)) echo $surname; ?>" class="<?php if (isset($missing) && in_array('surname',$missing)) echo 'error'; ?>" />
               </li>
               <li>
                  <label for="tel">Telefono</label>
                  <input type="text" name="tel" tabindex="3" value="<?php if (isset($missing) && isset($tel)) echo $tel; ?>" class="<?php if (isset($missing) && in_array('tel',$missing)) echo 'error'; ?>" />
               </li>
               <li>
                  <label for="cel">Cellulare</label>
                  <input type="text" name="cel" tabindex="4" value="<?php if (isset($missing) && isset($cel)) echo $cel; ?>" class="<?php if (isset($missing) && in_array('cel',$missing)) echo 'error'; ?>" />
               </li>
               <li>
                  <label for="mail">Email <abbr title="Campo obbligatorio">*</abbr></label> 
                  <input type="text" name="mail" tabindex="5" value="<?php if (isset($missing) && isset($mail)) echo $mail; ?>" class="<?php if (isset($missing) && in_array('mail',$missing)) echo 'error'; ?>" />
               </li>
               <li>
                  <label for="subject">Oggetto richiesta <abbr title="Campo obbligatorio">*</abbr></label> 
                  <select name="subject" tabindex="6" class="<?php if (isset($missing) && in_array('subject',$missing)) echo 'missing'; ?>">
                     <option selected>- Scegli -</option>
                     <option value="<?php if (isset($missing) && isset($subject)) echo $subject; ?>">Richiesta 1</option>
                     <option value="<?php if (isset($missing) && isset($subject)) echo $subject; ?>">Richiesta 2</option>
                     <option value="<?php if (isset($missing) && isset($subject)) echo $subject; ?>">Richiesta 3</option>
                  </select>
               </li>
               <li>
                  <label for="mess">Messaggio <abbr title="Campo obbligatorio">*</abbr></label> <textarea name="mess" tabindex="7" class="<?php if (isset($missing) && in_array('mess',$missing)) echo 'error'; ?>"><?php if (isset($missing) && isset($mess)) echo $mess; ?></textarea>
               </li>
               <li>
                  <label for="priv">Informativa sulla privacy <abbr title="Campo obbligatorio">*</abbr></label> <textarea>Testo privacy</textarea>
               </li>
               <li>
                  <label id="auth" for="yn">
                  <input type="radio" name="yn" tabindex="8" checked="checked" value="<?php if (isset($missing) && isset($yn)) echo $yn; ?>" class="<?php if (isset($missing) && in_array('yn',$missing)) echo 'error'; ?>" /> Autorizzo &nbsp; &nbsp;
                  <input type="radio" name="yn" tabindex="9" value="<?php if (isset($missing) && isset($yn)) echo $yn; ?>" class="<?php if (isset($missing) && in_array('yn',$missing)) echo 'error'; ?>" /> Non autorizzo</label>
               </li>
            </ol>
               <p class="controls">
                  <input type="submit" name="submit" tabindex="10" value="Invia richiesta" />
               </p>
         </form>
inviato 5 anni fa
gabar-el
X 0 X

"Ritornare" in italiano è un verbo esclusivamente intranstivio. Il "return" inglese si traduce con "restituire".

Fatta questa premessa, prova a fare un var_dump() delle variabili in base alle quali decidi se c'è l'errore o meno. Un var_dump anche di $_POST potrebbe aiutare.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Grazie della spiegazione :)

Mi diresti meglio come utilizzare var_dump e dove?

Ho provato ma non mi "torna" nulla... :(

risposto 5 anni fa
gabar-el
X 0 X

In linea generale, se hai un pezzo di codice con un if che deve verificare le variabili $pippo e $pluto, si tratta di mettere (prima dell'if stesso)

<?php
// ...
var_dump($pippo, $pluto);
// ...
risposto 5 anni fa
Massimiliano Arione
X 0 X

Mmhh... ok, mi restituisce le variabili. Ma ora che faccio?

risposto 5 anni fa
gabar-el
X 0 X
Mmhh... ok, mi restituisce le variabili. Ma ora che faccio?

Non so, vedi tu. Cosa vorresti fare?

risposto 5 anni fa
Massimiliano Arione
X 0 X

Mmhh.. non capisco se mi prendi in giro o cosa.

Il mio problema è che mi restituisce sempre il solito messaggio d'errore come accennavo in apertura di post.

risposto 5 anni fa
gabar-el
X 0 X

Non ti sta prendendo in giro.

Tramite var_dump hai verificato che le tue variabili sono corrette e che il codice restituisce in modo errato un determinato messaggio.

Ora devi controllare il tuo codice e capire dove sbagli, devi avere delle condizioni di if errate.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Ok, grazie per la spiegazione.

Non riesco a capire comunque cosa c'è che non va. Ho provato ad eliminare il campo privacy e non ricevo più un errore circa i campi compilati, ma ad ogni modo non invia la mail.... :(

risposto 5 anni fa
gabar-el
X 0 X

Crea un codice base di invio email, poi aggiungi i vari pezzi e controlli dove non funziona.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Mmhh... pensavo questo fosse già abbastanza base. Soprattutto perché ho eliminato parti del codice che non tornano l'errore ma comunque non inviano la mail. Stavo provando perché non sono ancora in grado di creare un form e ho seguito questo tutorial

risposto 5 anni fa
gabar-el
modificato 5 anni fa
X 0 X

Ok, prova a vedere anche la sezione articoli di phpnews :)

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Ho capito che commetto qualche errore nei campi della richiesta oggetto e della richiesta autorizzazione. Eliminandoli infatti funziona bene. Non so come inserire il codice essendo uno un menu a tendina (non so cosa inserire in ogni select come value) e l'altro un campo radio (stesso discorso).

Sareste così gentili da spiegarmi come sistemare questi due campi?

risposto 5 anni fa
gabar-el
X 0 X

Per forum non è semplice spiegare. Esistono delle guide apposite che spiegano come fare...

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