Il form invia, ma solo in apparenza!

Salve a tutti,

avei un piccolo problema con il form dei contatti, sembra fatto bene e mi dà anche la conferma dell'invio del messaggio, ma non giunge niente a destinazione.

Qualcuno mi saprebbe dire dov'è il problema?

Grazie mille!!

Questo il file principale contatti.php

<?php
require_once 'settings.php';
if(isset($_POST['submit'])){
   foreach ($_POST as $key => $value){
    //elimina eventuali spazi aggiuntivi
    $temp = $value ? 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); //in questo caso crea $nome, $email, $sito, $commento
    }
  }
  if ( empty($missing) ){
    //Se l'array missing è vuoto, vuol dire che sono stati inseriti i valori
    //obbligatori. Costruisco il messaggio    
    $contenuto_email = "Nome: $nome\n\n"; //Queste variabili sono create nel passaggio precedente
   $contenuto_email = "Cognome: $cognome\n\n";
   $contenuto_email .= "Residenza: $residenza\n\n";
   $contenuto_email .= "Data di Nascita: $data_nascita\n\n";
   $contenuto_email .= "Tel: $tel\n\n";
    $contenuto_email .= "Email: $email\n\n";
    $contenuto_email .= "Sito Web: $sito\n\n";
    $contenuto_email .= "Messaggio:\n $messaggio\n\n";
    //limita la lunghezza a 70 caratteri per la compatibilità
    $contenuto_email = wordwrap($contenuto_email,70);
    //invia l'email    
    $mail_sent = mail($email,$oggetto,$contenuto_email, 'From: '.$email);
    $info_message = '<p class="info">' . $info_mail_sent . '</p>';
    if($mail_sent){
      //Se l'email viene inviata l'array missing non serve più quindi lo svuoto
      unset($missing);
    }
  }
}
//se non sono stati immessi campi obbligatori
if ( isset( $_POST['submit'] ) && isset($missing) && !empty($missing)) :
   $info_message = '<p class="error">' . $error_missing_fields . '</p>';
elseif ($_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 sia d'errore che di conferma
   if ( isset( $info_message ) && strlen( $info_message ) ) echo $info_message;
   //Include il form
   require_once 'form.php';
 ?>

Questo il file settings.php

<?php
ini_set('display_errors', 'On');
ini_set('error_reporting', E_ALL & ~E_NOTICE);
//email del destinatario del form
$destinatario = 'mail@sito.it';
//oggetto dell'email inviata
$oggetto = 'Mail';


//Messaggio d'errore per campi mancanti
//Error message for missing fields
$error_missing_fields= 'Per favore, completate tutti i campi del form indicati';
//Messaggio d'errore del server mail
//Error message for mail server
$error_mail_server = 'Siamo spiacenti. Si &egrave; verificato un errore e
    l\'email non &egrave; stata inviata. Riprovate pi&ugrave; tardi.';
//Messaggio di conferma invio mail
//Info message for correct mail sent
$info_mail_sent = 'L\'email è stata inviata correttamente!.';


/* Se il form è stato inviato, elenca i campi che ci si aspetta di ricevere.
   Evita che qualcuno possa aggiungere dei campi non previsti */
$expected = array('nome','cognome','residenza','data_nascita','tel','email','sito','messaggio');
//imposta i campi obbligatori
$required = array('nome','cognome','residenza','email','messaggio');
//crea un array vuoto per i campi mancanti
$missing = array();
   
?>

Questo il file form.php

<form action="<?php basename($_SERVER['PHP_SELF']) ?>" method="post" id="form">
  <fieldset>
    <legend><span>Contattaci per qualsiasi informazione</span></legend>
    <ol>
      <li>
        <label for="nome">Nome <abbr title="campo obbligatorio">*</abbr></label>
        <input type="text" name="nome" id="nome" tabindex="1"
          value="<?php if ( isset( $missing ) && isset($nome) ) echo $nome; ?>"
          class="<?php if (isset( $missing ) && in_array('nome',$missing))
         echo 'error';
          ?>"/>
      </li>
//QUI IL RESTO DEI CAMPI
    </ol>
  </fieldset>
  <p class="controls">
   <input type="submit" name="submit" id="submit" value="Invia Mail" tabindex="8" />
  </p>
</form>

Grazie mille ancora

inviato 5 anni fa
MrKid
modificato 5 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Così è un po' difficile dire perché non viene inviata...controlla la configurazione del tuo php per l'invio delle email, in genere si usa sendmail.

Controlla i log del tuo server web per capire se ci sono errori o notifiche che ti aiutano ad indirizzarti verso la soluzione del problema.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
<form action="<?php basename($_SERVER['PHP_SELF']) ?>" method="post" id="form">

Qui c'è un errore: ti manca un echo.

In realtà funziona lo stesso, perché l'action vuoto manda alla pagina stessa, ma potrebbe darti molti grattacapi se tenti di cambiare il parametro di basename().

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