- Home
- Categorie
- Coding e Sistemistica
- PHP
- Convalida Form
-
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
-
Ciao pabloso
non ti esce l'errore perché la tua variabile $error non viene mai fatta stampare a video (non c'è nessuna echo)
-
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
-
Ciao
$error è già valorizzato in realtà, con questo codiceif ([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.
-
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?
-
Ciao,
in realtà questi sono pezzi del tuo codice, ti ho solamente detto che nel secondo caso aggiungerei una stampa dell'erroreif (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:
- http://www.giorgiotave.it/guide-webmaster/php/convalida-form/ per la convalida dei form
- http://www.giorgiotave.it/guide-webmaster/php/controlli-form/ alcuni controlli sui form in generale
-
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?
-
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.
-
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
-
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
-
Ciao,
sei riuscito a risolvere il problema?