Formularze kontaktowe.

Formularze kontaktowe to jedna z postawowych funkcjonalności praktycznie każdej strony.
Stwórzmy controller w folderze application\controllers pod nazwą Contact.php.

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Contact extends CI_Controller {
        //w konstruktorze ładujemy klasy pomocnicze i biblioteki jeśli nie zrobiliśmy tego w pliku autoload.php
        public function __construct(){
            parent::__construct();
            $this->load->helper('form', 'url');
            $this->load->library(array('email','form_validation', 'session'));
        }
        //ładujemy widok contact i $data
        public function contact(){
            $data['title'] = 'Kontakt';
            $this->load->view('contact', $data);
        }

        function send(){
            //reguły walidacji
            $this->form_validation->set_rules('name', 'Imię', 'trim|required|min_length[2]');
            $this->form_validation->set_rules('email', 'E-mail', 'trim|required|valid_email|min_length[5]');
            $this->form_validation->set_rules('message', 'Wiadomość', 'trim|required|min_length[10]');
            //sprawdzanie walidacji i błędy
            if ($this->form_validation->run() == FALSE){
                $this->Contact();
            }else{
                $name = $this->input->post('name');
                $from_email = $this->input->post('email');
                $message = $this->input->post('message');

                //docelowy adres e-mail
                $to_email = 'przykladowy@imail.pl';

                //konfiguracja
                $config['protocol'] = 'sendmail';
                $config['mailtype'] = 'html';
                $config['charset'] = 'utf-8';
                $config['wordwrap'] = TRUE;
                $config['newline'] = "\r\n";
                $this->email->initialize($config);

                //wysyłanie e-mail
                $this->email->from($from_email, $name);
                $this->email->to($to_email);
                $this->email->subject('Pytanie z Przykładowej strony od '.$name);
                $this->email->message('Wiadomość z przykładowej strony:
'.$message); if ($this->email->send()){ // e-mail wysłany $this->session->set_flashdata('msg','
E-mail wysłany!
'); redirect('kontakt'); }else{ //jeśli błędy $this->session->set_flashdata('msg','
Błąd wysyłania
'); redirect('kontakt'); } } } }

Widok, czyli plik contact.php umieszczamy w folderze application\view.

    <!DOCTYPE html>
        <html>
        <head>
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>CodeIgniter - Formularz kontaktowy</title>
            <!--Bootstrap CSS-->
            <link rel="stylesheet" href="<?php echo base_url('assets/css/bootstrap.min.css'); ?>" />
        </head>
        <body>
            <div class="container">
                <div class="row">
                    <div class="col-md-6 col-md-offset-3">
                        <?php $attributes = array('name' => 'contact'); echo form_open("Contact/send", $attributes);?>
                        <fieldset>
                        <h3>Formularz kontaktowy</h3>
                        <div class="form-group">
                            <div class="col-md-12">
                                <label for="name" class="control-label">Imię</label>
                            </div>
                            <div class="col-md-12">
                                <input class="form-control" name="name" placeholder="Wpisz Imię" type="text" value="<?php echo set_value('name'); ?>" />
                                <span class="text-danger"><?php echo form_error('name'); ?></span>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-12">
                                <label for="email" class="control-label">E-mail</label>
                            </div>
                            <div class="col-md-12">
                                <input class="form-control" name="email" placeholder="Wpisz E-mail" type="text" value="<?php echo set_value('email'); ?>" />
                                <span class="text-danger"><?php echo form_error('email'); ?></span>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-12">
                                <label for="message" class="control-label">Wiadomość</label>
                            </div>
                            <div class="col-md-12">
                                <textarea class="form-control" name="message" rows="4" placeholder="Wpisz Wiadomość"><?php echo set_value('message'); ?></textarea>
                                <span class="text-danger"><?php echo form_error('message'); ?></span>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-12">
                                <input name="submit" type="submit" class="btn btn-primary" value="Send" />
                            </div>
                        </div>
                    </fieldset>
                    <?php echo form_close(); ?>
                    <?php echo $this->session->flashdata('msg'); ?>
                    </div>
                </div>
            </div>
            <!-- Optional JavaScript -->
            <!-- jQuery first, then Popper.js, then Bootstrap JS -->
            <script src="<?php echo base_url('assets/js/jquery-3.3.1.slim.min.js'); ?>"></script>
            <script src="<?php echo base_url('assets/js/popper.min.js'); ?>"></script>
            <script src="<?php echo base_url('assets/js/bootstrap.min.js'); ?>"></script>
        </body>
    </html>

Ustalamy routing w pliku application/config/routes.php w przypadku będzie to http://localhost/projekt/kontakt
(po lewej - adres url, po prawej kontroler i metoda)


        $route['kontakt'] = 'contact/contact';
            

Framework CodeIgniter oferuje różne, gotowe reguły walidacji, np.:
trim - usuwa "białe znaki"
required - oznacza, że pole jest wymagane
min_length - minimalna wartość pola
valid_email - sprawdza czy adres e-mail jest poprawny

Wszystkie reguły walidacji dostępne są na stronie frameworka.

Skrypty - Pierwsza aplikacja, integracja, formularze.
Pierwszy projekt, integracja z Bootstrapem, formularz kontaktowy.
keyboard_arrow_down
Stworzenie pierwszej, prostej aplikacji z trzema widokami i kontrolerem. add
Integracja z popularnym frameworkiem css Bootstrap. add
Formularz kontaktowy z walidacją pól. add