• User

    Convalida Form

    Buongiorno, ho da poco ripreso un vecchio progetto e, non essendo un esperto di php, riscontro questi problemi col form contatti :

    • Il form funziona, ma invia la mail alla mia casella di posta solo se tutti i campi sono compilati
    • Se non compilo un campo non mi esce un messaggio di errore del tipo "compila questo campo" o "campo obbligatorio";
      Uso xampp in locale, qui di seguito il codice php utilizzato:

    <?php

    // check for form submission - if it doesn't exist then send back to contact form
    if (!isset($_POST['save']) || $_POST['save'] != 'contact') {
    header('Location: services3da.html'); exit;
    }

    // get the posted data
    $name = $_POST['contact_name'];
    $email_address = $_POST['contact_email'];
    $phone = $_POST['contact_phone'];
    $message = $_POST['contact_message'];

    // check that a name was entered
    if (empty($name))
    $error = 'You must enter your name.';
    // check that an email address was entered
    elseif (empty($email_address))
    $error = 'You must enter your email address.';
    // check for a valid email address
    elseif (!preg_match('/^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$/', $email_address))
    $error = 'You must enter a valid email address.';
    // check that a phone number was entered
    if (empty($phone))
    $error = 'You must enter your phone number.';
    // check that a message was entered
    elseif (empty($message))
    $error = 'You must enter a message.';

    // check if an error was found - if there was, send the user back to the form
    if (isset($error)) {
    header('Location: services3da.html?e='.urlencode($error)); exit;
    }

    $headers = "From: $email_address\r\n";
    $headers .= "Reply-To: $email_address\r\n";

    // write the email content
    $email_content = "Name: $name\n";
    $email_content .= "Email Address: $email_address\n";
    $email_content .= "Phone Number: $phone\n";
    $email_content .= "Message:\n\n$message";

    // send the email
    //ENTER YOUR INFORMATION BELOW FOR THE FORM TO WORK!
    mail ('[email protected]', 'ARCHITETTO TRONCONI - Contact Form Submission', $email_content, $headers);

    // send the user back to the form
    header('Location: services3da.html?s='.urlencode('Thank you for your message.')); exit;

    ?>

    Quale campo devo implementare?
    Posso gestire il form contatti di un sito con solo questo script PHP o necessito di qualcos'altro?
    Grazie a chiunque voglia aiutarmi!Ciao


  • User Attivo

    Ciao pabloso
    non ti esce l'errore perché la tua variabile $error non viene mai fatta stampare a video (non c'è nessuna echo)


  • User

    Grazie per la risposta PietroR !
    Perdona la mia ignoranza ma devo dare un valore a $error e la riga sotto scrivere echo 'you must enter your name.' ? Come posso fare?
    Grazie Ciao


  • User Attivo

    Ciao
    $error è già valorizzato in realtà, con questo codice

    
    if ([empty](http://www.giorgiotave.it/wikigt/os/Empty)($name))
    $error = 'You must enter your name.';
    
    

    e qua controllo che l'errore ci sia

    
    if (isset($error)) {
    header('Location: services3da.html?e='.urlencode($error)); exit;
    }
    
    

    all'interno dell'if io metterei una echo dell'error. Se posso permettermi, però, con la tua gestione tutte le volte sovrascrivi $error e se ci sono più errori resta solo l'ultimo. Io inizializzerei la variabile $error a null e tutte le volte aggiungerei la stringa in modo tale che possano venire salvati anche più messaggi di errore.


  • User

    Ciao,
    grazie ancora per l'aiuto, immagino che la seconda soluzione sia la più funzionale, ora però ho un pò di confusione in testa...
    Potresti farmi un'esempio pratico?


  • User Attivo

    Ciao,
    in realtà questi sono pezzi del tuo codice, ti ho solamente detto che nel secondo caso aggiungerei una stampa dell'errore

    
    
    if (isset($error)) {echo $error;header('Location: services3da.html?e='.urlencode($error)); exit;}
    

    Detto ciò, su questo sito trovi due passi della guida che fanno al caso tuo:

    1. http://www.giorgiotave.it/guide-webmaster/php/convalida-form/ per la convalida dei form
    2. http://www.giorgiotave.it/guide-webmaster/php/controlli-form/ alcuni controlli sui form in generale

  • User

    Ciao,
    ho sbagliato a scrivere, per seconda soluzione intendevo quella in cui mi consigli di inizializzare la variabile $error a null.
    Ho comunque provato questo codice:
    if (isset($error)) {echo $error;header('Location: services3da.html?e='.urlencode($error)); exit;}
    Ho notato che,come dicevi tu, rimane solo l'ultimo errore ma viene scritto nella barra in alto degli indirizzi:
    localhost/modern-business/services3da.html?e=You+must+enter+your+name.
    Perché non esce l'errore appena sotto il campo non compilato?


  • User Attivo

    Ciao

    Ho notato che,come dicevi tu, rimane solo l'ultimo errore ma viene scritto nella barra in alto degli indirizzi:

    questo dovrebbe accadere per questo codice:

    header('Location: services3da.html?e='.urlencode($error));
    

    Ma hai messo uno spazio apposito per fare uscire l'errore vicino al campo?
    Non hai postato il codice del form e senza vederlo non ti saprei dire. Ti anticipo che dovresti comunque avere un elemento HTML in cui scrivere l'errore.


  • User

    Ciao
    Quindi devo togliere dal mio codice header('Location: services3da.html?e='.urlencode($error)); ?
    Questo è il codice HTML del form:

    <div class="col-sm-4">
    <h3>Contatti</h3>
    <p></p>
    <form method="post" action="contact-form-submission2.php">
    <div class="row">
    <div class="form-group col-lg-4">
    <label for="input1">Nome</label>
    <input type="text" name="contact_name" class="form-control" id="input1">
    </div>
    <div class="form-group col-lg-4">
    <label for="input2">Email</label>
    <input type="email" name="contact_email" class="form-control" id="input2">
    </div>
    <div class="form-group col-lg-4">
    <label for="input3">Telefono</label>
    <input type="phone" name="contact_phone" class="form-control" id="input3">
    </div>
    <div class="clearfix"></div>
    <div class="form-group col-lg-12">
    <label for="input4">Messaggio</label>
    <textarea name="contact_message" class="form-control" rows="6" id="input4"></textarea>
    </div>
    <div class="form-group col-lg-12">
    <input type="hidden" name="save" value="contact">
    <button type="submit" class="btn btn-primary">Invia</button>
    </div>
    </div>
    </form>
    </div>

    Grazie


  • User Attivo

    Ciao ti consiglio di dare un'occhiata a questo tool : Fantastic form builder è un generatore di moduli email che permette la creazione automatizzata di moduli email e moduli per l'inserimento dei dati in database, con possibilità di avere tutti i codici sorgenti e poterli gestire come vuoi senza nessun limite, i moduli creati sono robusti e sicuri con filtro antispam e validazione input


  • User Attivo

    Ciao,
    sei riuscito a risolvere il problema?