Twilight SEO

Standing at the border line. Beautiful color spectrum of Search Engine Optimization. White, Gray, Black Hat SEO learning by doing.

Cake PHP: Simple Contact Form Tutorial!

Posted in cakephp by ruru on the February 8th, 2008

This guide provide a quick tutorial covering simple contact form for CakePHP v1.2, based on this post
Download code example here! CakePHP 1.2 Simple Contact Form.zip

1. Create the VIEW in cake/app/views/contact/contact.ctp

PHP:
  1. <?php if (isset($success)) { ?>
  2.     <p><?= $success?></p>
  3. <?php } else { ?>
  4.     <?php if (isset($error)) { ?>
  5.         <p><?= $error?></p>
  6.     <?}?>
  7.     <?php echo $form->create(null,array('action' => 'contact', 'enctype' => 'multipart/form-data')); ?>
  8.     <p>
  9.         <?php echo $form->label('Page.name','Name: ',null); ?>
  10.         <?php echo $form->text('Page.name', array('size' => '25'))?>
  11.     </p>
  12.     <p>
  13.         <?php echo $form->label('Page.email','Email: ',null); ?>
  14.         <?php echo $form->text('Page.email', array('size' => '25'))?>
  15.     </p>
  16.     <p>
  17.         <?php echo $form->label('Page.message','Message: ',null); ?>
  18.         <?php echo $form->textarea('Page.message', array('cols' => '40', 'rows' => '10'))?>
  19.     </p>
  20.     <p>
  21.         <?php echo $form->submit('Send email')?>
  22.     </p>
  23.     <p>
  24.         All fields are required!
  25.     </p>
  26.     <?php echo $form->end();?>
  27. <?php }?>

2. Create Email COMPONENT, cake/app/controllers/components/email.php

PHP:
  1. <?php
  2. class EmailComponent extends Object {
  3.     function email($email, $name, $message) {
  4.         $f_mail = "name@domain.com";
  5.         $f_name = "WebMaster domain.com";
  6.         $f_message = "\nName : $name"; // start building the message
  7.         $f_message .= "\n\nE-mail : $email";
  8.         $f_message .= "\n\nMessage \n : $message";
  9.         $headers = "From: www.domain.com <administrator@domain.com>\n";
  10.         $headers .= "X-Sender: <admin @domain.com>\n";
  11.         $headers .= "X-Mailer: PHP\n";
  12.         $headers .= "Reply-To:$f_mail\n\n";
  13.         $subject = "Message from your website domain.com";
  14.         mail ( "$f_mail", "$subject", "$f_message", $headers ); // send the email
  15.     }
  16.    
  17.     // this function checks to see if the email supplied by the visitor is a valid one
  18.     function validMail($email) {
  19.         $pattern = "^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
  20.         // the regex for an email addres
  21.         if (eregi ( $pattern, $email ))
  22.             $ll = 1; else
  23.             $ll = 0;
  24.         return $ll;
  25.     }
  26. }
  27. ?>

3. Create the CONTROLLER, cake/app/controllers/contact_controller.php

PHP:
  1. <?php
  2. class ContactController extends AppController {
  3.     var $uses = array ( );
  4.     var $components = array ('Email' );
  5.     var $name = 'Contact';
  6.    
  7.     function contact() {
  8.         $this->pageTitle = 'Contact';
  9.         if (! empty ( $this->data )) {
  10.             $email = $this->data ['Page'] ['email'];
  11.             $name = $this->data ['Page'] ['name'];
  12.             $message = $this->data ['Page'] ['message'];
  13.             $error = 0;
  14.             // start filter vars
  15.             if (strlen ( trim ( $email ) ) <3) {
  16.                 $error = 1;
  17.             }
  18.             if (strlen ( trim ( $message ) ) <4) {
  19.                 $error = 1;
  20.             }
  21.             // verify email address
  22.             if ((strlen ( trim ( $email ) ) <3) || ($this->Email->validMail ( $email ) == 0)) {
  23.                 $error = 1;
  24.             }
  25.             if ($error == 0) {
  26.                 $this->Email->email ( $email, $name, $message ); //here is the email sent
  27.                 $this->set ( 'success', 'The message was sent <br />Thank you!' );
  28.                 // setting "succes" variable for displaying if email was sent.
  29.             } else {
  30.                 $this->set ( 'error', 'Please complete all fields' );
  31.                 // this is in case of error
  32.             }
  33.         } else {
  34.         }
  35.     }
  36. }
  37. ?>

FINALLY
After all that just test it in your favorite web browser http://localhost/cake/contact/contact

Tags: php4, cakephp, code example

Leave a Reply




Cannot find your answer here?
Feel free to get in touch and ask PHP-ist anything, just anything :)