Πίσω στο ευρετήριο

Contact form validation with php Posted: 16-Mar-2020 00:54 AM

php, mysql, html tutorial
Δες το Demo Κατέβασε τα αρχεία 13 downloads

Μια φόρμα επικοινωνίας είναι πλέον ένα βασικό στοιχείο σε κάθε ιστοσελίδα. Σε αυτό το παράδειγμα έχουμε μια φόρμα με δυο input πεδία και ένα textarea, "όνομα, email, κείμενο", θα επικυρώσουμε τα πεδία με php και θα εισάγουμε τις τιμές σε έναν πίνακα "messages" στην βάση δεδομένων. Θα χρειαστούμε δυο αρχεία.

  • index.php είναι το αρχείο html που έχουμε γράψει την φόρμα μας
  • script.php είναι το php αρχείο που θα χειριστεί την φόρμα. Και θα γράψει τα αρχεία στην βάση.

Το html αρχείο

Πρώτα απ όλα πρέπει να συμπεριλάβουμε το αρχείο php στην html σελίδα.

  • require 'script.php'... κάθε φορά που φορτώνει η σελίδα θα τρέχει και το scrip.php

<body>
<?php require 'script.php'; ?>   

Έχουμε ανοίξει ένα form tag, και έχουμε ορίσει:

  • action=$_SERVER['PHP_SELF']... δηλώνουμε ότι η φόρμα θα εκετελεστεί στο ίδιο αρχείο που βρισκόμαστε.
  • method=post... λέμε στην φόρμα να στείλει τα δεδομένα με την μέθοδο $_POST.

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
</form>

Μέσα στην φόρμα έχουμε ένα input πεδιο "input field" για το όνομα

  • value="echo @$name..." η μεταβλητή $name έρχεται από το php αρχείο και αποθηκεύει ότι πληκτρολογούμε στο πεδίο.
  • @$name_error... εδώ θα τυπώνεται το όποιο σφάλμα προκύψει στο πεδίο.
  • To @ μπροστά από τις μεταβλητές το βάζουμε όταν οι μεταβλητές δεν έχουν οριστεί, και λέμε στον server να το αγνοήσει.

<input type="text" name="name" value="<?php echo @$name; ?>">
<p class="error"><?php echo @$name_error; ?></p> 

Έχουμε το πεδίο του email και του κειμένου, και ότι ισχύει για το όνομα πιο πάνω, ισχύει και για τα δυο πεδία εδώ.

<input type="text" name="email" value="<?php echo @$email; ?>">
<p class="error"><?php echo @$email_error; ?></p> 

<textarea name="message"><?php echo @$message; ?></textarea> <p class="error"><?php echo @$message_error; ?></p>

Τέλος έχουμε το submit button και δύο p tags όπου θα τυπώνουμε:

  • echo @$success... το μήνυμα ότι όλα πήγαν καλά.
  • echo @$error... εδώ θα τυπώνεται το όποιο σφάλμα προκύψει από τον server και όχι από τα πεδία.

<input type="submit" name="submit" value="Υποβολή">
<p class="success"><?php echo @$success; ?></p>
<p class="error"><?php echo @$error; ?></p>

Kατεβάστε τα αρχεία για να δείτε όλοκληρη την html, πατήστε το link στην αρχή της σελίδας.

Το php αρχείο

Θα ελέγξουμε πρώτα αν η φόρμα έχει υποβληθεί.

  • $_POST[]... πιάνει τις τιμές που στέλνει η φόρμα σε μορφή πίνακα
  • isset()... τσεκάρει αν η $_POST έχει οριστεί.

<?php 
	if(isset($_POST['submit'])){

Παίρνουμε τις τιμές από την $_POST και τις αποθηκεύουμε σε μεταβλητές που έχουμε δώσει τα ίδια ονόματα με τα πεδία της φόρμας. Έτσι βλέποντας την μεταβλητή ξέρουμε αμέσως με ποιο πεδίο έχουμε να κάνουμε.

  • trim()... τριμάρει τους κενούς χαρακτήρες δεξιά και αριστερά.

$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);

Θα ξεκινήσουμε την επικύρωση της φόρμας με το όνομα.

  • empty()... τσεκάρει εάν το πεδίο είναι άδειο, "κενό".
  • $name_error... τυπώνει το σφάλμα κάτω από το πεδίο του ονόματος στην φόρμα.

if(empty($name)){
	$name_error = "Πρέπει να συμπληρώσεις ένα όνομα";
}

Εφόσον η $name έχει τιμή, τότε θα ελέγξουμε τους χαρακτήρες της. Τα ονόματα αποτελούνται μόνο από γράμματα, άρα και εμείς θα αποκλείσουμε οτιδήποτε άλλο, εκτός από space.

  • $pattern = "/[^a-zA-Zp{Greek}s]++/u"... επιτρέπονται μόνο γράμματα και space. Τσεκάρει και ελληνικούς χαρακτήρες.
  • preg_match()... τσεκάρει το string (αλφαριθμητικό) που του δίνουμε, ενάντια του μοτίβου που ορίζουμε.

else{
	$pattern = '/[^a-zA-Zp{Greek}s]++/u';
	if(preg_match($pattern, $name)){
		$name_error =  "Το πεδίο δέχετε μόνο γράμματα";
	}

Εφόσον το όνομα είναι έγκυρο προχωράμε στο email. Το ίδιο και εδώ με την empty() ελέγχουμε αν το πεδίο είναι κενό και τυπώνουμε το ανάλογο μήνυμα.

else{
if(empty($email)){
	$email_error = "Πρέπει να συμπληρώσεις το email σου";
}

Περάσαμε τον έλεγχο της empty() και συνεχίζουμε με το να δούμε αν το email έχει το φορμάτ που πρέπει.

  • filter_var($email, FILTER_VALIDATE_EMAIL)... ελέγχει το φορματ του email και μας επιστρέφει true or false.

else{
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
	$email_error = "Το email δεν είναι έγκυρο";	
}

Ακριβώς τις ίδιες ενέργειες έχουμε και για την $message θα την ελέγξουμε αν έχει τιμή και θα την περάσουμε από την filter_var() άλλα με διαφορετικό flag.

  • FILTER_SANITIZE_STRING... αφαιρεί τις αγκύλες < > από το κείμενο για να μη δημιουργηθεί θέμα ασφαλείας.

else{
if(empty($message)){
	$message_error = "Πρέπει να γράψεις το μήνυμα σου";
}
else{
	$message = filter_var($message, FILTER_SANITIZE_STRING);

Μετά από τα πεδία θα επικοινωνήσουμε με την βάση mysql και θα εισάγουμε τα στοιχεία στον πίνακα messages.

Ο πίνακας, "table", messages έχει 4 στήλες, (id, name, email, message).

  • mysqli_connect()... μας συνδέει με την mysql, παίρνει 4 παραμέτρους ('host','username','password','db_name') και μας επιστρέφει true η false.
  • mysqli_connect_error()... μας λέει ποιο είναι το πρόβλημα εαν δεν μπορούμε να συνδεθούμε.

$conn = mysqli_connect('localhost','username','password','db_name');
if(!$conn){ /* Αν δεν υπάρχει σύνδεση τυπώνουμε το σφάλμα. */
	die('Δεν υπάρχει σύνδεση με την mysql - '. mysqli_connect_error());
}else{ 
	$sql = "INSERT INTO messages(name,email,message)
			VALUES('$name', '$email', '$message')
	";

Τρέχουμε την mysqli_query και εισάγουμε τα στοιχεία στον πίνακα messages, τυπώνουμε το επιτυχές μήνυμα και καθαρίζουμε της μεταβλητές από τις τιμές τους.

  • mysqli_query($conn, $sql)... εκτελεί τις ενέργειες που της δίνουμε στην δεύτερη παράμετρο, στην πρώτη παράμετρο έχουμε την σύνδεση.
  • mysqli_close($conn)... κλείνουμε την σύνδεση.
  • mysqli_error($conn)... μας επιστρέφει το όποιο σφάλμα.

if(mysqli_query($conn, $sql)){
	$success = "Ευχαριστούμε για την εγγραφή";
	$name = "";
	$email = "";
	$message = "";
	mysqli_close($conn);
}else{
	/* Εαν παρουσιαστεί σφάλμα κατά την εγγραφή το τυπώνουμε με την $error */
	$error = "Παρουσιάστηκε σφάλμα στην βάση - ". mysqli_error($conn);
	} } } } } } } } 
	/* Οι αγκύλες κλεισίματος } πρέπει να είναι 8, όσα και τα if()
	 που έχουμε*/

Author G. Grammozis

Σχόλια και ερωτήσεις μέσω facebook

Παρόμοια php tutorials

Image upload with php 17-Feb-2020 18:17 PM Σε αυτό το tutorial θα ανεβάσουμε μια φωτό στον server, και θα επικυρώσουμε (validate) αν η φωτό είναι έγκυρη.
Uploading an article with image 01-Mar-2020 22:13 PM Έχουμε μια φόρμα με τρία πεδία, τίτλο,άρθρο, και εικόνα, θα ανεβάσουμε την εικόνα στον server και θα εισάγουμε τα στοιχεία σε μια mysql βάση. Contact form validation with php 16-Mar-2020 00:54 AM Θα επικυρώσουμε μια φόρμα επικοινωνίας με php, και θα εισάγουμε τις τιμές σε μια βάση δεδομένων. Register form with php and ajax 24-Feb-2020 16:39 PM Εχουμε μια φόρμα εγγραφής στην οποία τα δεδομένα θα σταλούν με Ajax στο php αρχείο για επικύρωση. Image resizing with php 09-Mar-2020 19:16 PM Ενα php script για να τροποποιούμε τις διαστάσεις των φωτόγραφίων κατά το upload.

css Tutorials

Resposive navbar with css and javascript 05-Mar-2020 21:24 PM Ένα responsive οριζόντιο μενού πλοήγησης για μικρή και μεγάλη οθόνη, με css και λίγη javascript. Sticky navbar με css και javascript 28-Feb-2020 18:32 PM Έχουμε ένα οριζόντιο μενού όπου θα κολλάει στήν αρχή της σελίδας όταν κάνουμε scroll. Responsive grid layout 04-Mar-2020 17:15 PM Έχουμε μια responsive ιστοσελίδα που προσαρμόζεται σε όλες τις οθόνες Highlight selected menu page 12-Mar-2020 11:56 AM Έχουμε ένα οριζόντιο μενού όπου θα αλλάζουμε το background-color του link στην επιλεγμένη σελίδα.

javascript Tutorials

javascript and css slideshow 21-Feb-2020 01:27 AM Slideshow με fade effect, κείμενο, cta button, και responsive design γραμμένο σε css και javascript Show hide password with javascript 10-Mar-2020 23:28 PM Ένα javascript που εμφανίζει τα γράμματα όταν πληκτρολογούμε στο πεδίο password. Image preview with javascript 19-Feb-2020 16:04 PM Άμεση απεικόνιση της εικόνας σε file upload ενέργεια Autofill select combo box 27-Feb-2020 00:10 AM Θα δούμε πως μπορούμε να συνδυάσουμε δυο select drop-down menu έτσι ώστε επιλέγοντας το πρώτο να δίνουμε τις ανάλογες τιμές στο δεύτερο.

webDev Αναφορές

PHP Net Το σπίτι της php είναι η πιο έγκυρη πηγή εκμάθησης. Javascript Μozilla MDN web docs Τα πάντα για την Javascript. Όρεξη να έχεις να διαβάζεις. CSS Μozilla MDN web docs Απο βασικά styles εως animation, εδω θα τα μάθεις όλα. Programming Notes for Professionals Μια φοβερή συλλογή από PDF αρχεία, από Android εώς C++. Αξίζει να κατεβάσετε και να μελετήσετε τα αρχεία.

PHPDev Tutorials | Site developed by PHPDev.gr Visit PHPDev

scrollTo('top')