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.
(Kliknij plus poniżej aby przejść do następnego działu)