[RESOLU] CakePHP - Validation de données d'un formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] CakePHP - Validation de données d'un formulaire

Re: CakePHP - Validation de données d'un formulaire

par Ducreyr » 22 oct. 2014, 13:39

Problème résolu en partie !

Problème résiduel :

Les règles de validations fonctionnent, mais il est impossible de voir un quelconque message lors d'une donnée erronée, c'est à dire que la clef "message" ne marche pas. Des idées?

CakePHP - Validation de données d'un formulaire

par Ducreyr » 22 oct. 2014, 08:11

Bonjour à tous,

Débutant avec le framework CakePHP, j'ai un souci au niveau de la validation de mon formulaire "Contact".
Voici comment je procède:

Index.ctp:
<?php echo $this->Html->css('contacts', null, array('inline' => false)) ?>
		<?php echo $this->Html->script('http://maps.google.com/maps/api/js?sensor=false',array('inline' => false)); ?>
		<?php echo $this->Html->script('jquery.gmap.js',array('inline' => false)); ?>
		<?php echo $this->Html->script('contacts.js',array('inline' => false)); ?>
		
		<div id="contacts">
			<div class="container">
				<div id="contact">
					<h2>CONTACT</h2>
			<?php echo $this->Form->create(false, array('url' => array('controller' => 'contacts', 'action' =>'index'))); ?>
			<?php echo $this->Form->input('firstname', array('label' => 'Prénom *', 'required')); ?>
			<?php echo $this->Form->input('lastname', array('label' => 'Nom *', 'required')); ?>
			<?php echo $this->Form->input('societe', array('label' => 'Société')); ?>
			<?php echo $this->Form->input('phone', array('label' => 'Téléphone*', 'required')); ?>
			<?php echo $this->Form->input('email', array('label' => 'E-mail *', 'type' => 'email', 'required')); ?>
			<?php echo $this->Form->input('message', array('label' => 'Message *', 'type' => 'textarea', 'required')); ?>
					<?php echo $this->Form->end('Envoyer'); ?>
					<hr class="hidden" />
				</div>
                         </div>
		</div>
	</div>
ContactsController.php:
<?php
App::uses('AppController', 'Controller');
App::uses('CakeEmail', 'Network/Email');

class ContactsController extends AppController{
	
	public $helpers = array('Html','Form');

    public function beforeFilter(){
        $this->Auth->allow('index');
        parent::beforeFilter();
    }
    function index(){
        $this->set('title_for_layout', " Nous Contacter - Admins");
        if(!empty($this->request->data)){
            $message = "";
            $message .= "Prénom : ".$this->request->data['firstname']."\n";
            $message .= "Nom : ".$this->request->data['lastname']."\n";
            $message .= "Société : ".$this->request->data['societe']."\n";
            $message .= "Téléphone : ".$this->request->data['phone']."\n";
            $message .= "Email : ".$this->request->data['email']."\n";
            $message .= "Message : ".$this->request->data['message']."\n";
            $this->Contact->set($this->request->data);
            if($this->Contact->validates()){
                $Email = new CakeEmail();
                $Email->from(array('[email protected]' => 'Admin Resorts'));
                $Email->to('[email protected]');
                $Email->subject('Contact depuis le site internet');
                $Email->send($message);
            }else{
            }
        }
	}
}
?>
Contact.php:
<?php
class Contact extends AppModel{

    var $name = 'Contact';
    var $useTable = false;


    // Règles de validation des données
    var $validate = array(
        'firstname' => array(
            'rule' => 'alphaNumeric',
            'required' => true,
            'message' => "Veuillez écrire votre prénom."));
}

/*
    public $validate = array(
        'firstname' => array(
            'allowEmpty' => false;
            'message' => 'Veuillez entrer votre prénom.'
        ),
        'lastname' => array(
            'rule' =>'notEmpty',
            'message' => 'Veuillez entrer votre nom.'
        ),
        'email' => array(
            'rule' => array('email',true),
            'message' => 'Veuillez entrer une adresse email valide.'
        ),
        'message' => array(
            'rule' => 'notEmpty',
            'message' => 'Veuillez entrer un message.'
        ),
        'phone' => array(
            'rule' => 'notEmpty',
            'message' => 'Veuillez entrer un numéro de téléphone'
        ),
        
    );
*/

?>
Et quand je teste, je peux voir que seul les informations de base de l'input contenu dans "index.ctp" sont appliqués, c'est à dire, le "required" par exemple. Avez-vous une idée de ce que j'ai omis ?

Merci d'avance pour s'être penché sur le problème,
Bonne journée!

Cdlt, DR