Bonjour,
j'ai un problème je suis entrain de faire un moteur de recherche tout marche bien mais quand on ne tape rien dans le formulaire en cliquant sur le bouton recherche ça affiche les données au lieu de ne rien afficher, voici mon code:

  public function search() {

      $this->loadModel('Event');
      $this->loadModel('User');
      if($this->request->is('post')){
          $rech=$this->request->data;

         $this->Session->write('rech',$rech);
        $this->redirect(array('action'=>$this->request->params['action']));

          }elseif($this->Session->check('rech')){

          $this->request->data=$this->Session->read('rech');}

          $nom_rech=""; $event_rech="";
              if(isset($this->request->data['nom_rech']))$nom_rech=$this->request->data['nom_rech'];
             if(isset($this->request->data['event_rech']))$event_rech=$this->request->data['event_rech'];
                 $this->paginate = array('conditions'=> array('OR'=>array('nom LIKE' =>$nom_rech.'%' ,'eglise LIKE' =>$nom_rech.'%'),'AND'=>array('event LIKE' =>$event_rech.'%')),'limit' =>5);

                 $users = $this->Paginate('Event'); 
                 $this->set('users',$users);

         }

je voudrais que si on ne tape rien dnas le formulaire l'action search ne s'effectue pas, mais comment je peux faire ça?
merci

8 réponses


Tu mets une régle de validation au niveau de ton Model du style :

public $validate = array(       
        'search' => array(
            'rule' => 'notEmpty',
            'message' => 'Veuillez préciser votre terme de recherche'
        )
    );
wenz
Auteur

merci pour ta réponse mais je n'ai pas de table search.

wenz
Auteur

voic le code du formulaire

 <?php echo $this->Form->create(false,array('action'=>'../users/search')); ?>
<table border="0"  align="center" width="490">
    <tr valign="middle">
<td width="208"><?php echo $this->Form->input('nom_rech',array('class'=>'form-control','label'=>false,'div'=>false,'placeholder'=>array(__("NOM OU EGLISE",true)),'style'=>'width:190px;height:32px;'));?></td>
<td width="95"><?php echo $this->Form->input('event_rech',array('class'=>'form-control','label'=>false,'div'=>false,'placeholder'=>array(__("PUBLICATION",true)),'style'=>'width:190px;height:32px;'));?></td>
        <td width="173">
        <?php echo $this->Form->button( __('<i class="glyphicon glyphicon-search" style="color:#137fc0;"></i>',true),array('style'=>'height:70px; background:none; border:none;color:#fff; size:3em;','escape'=>false));
         $this->Form->End();?>
        </td>
    </tr>
</table>    
<?php echo $this->Form->end(); ?>

Je vois que ton action search est dans le controller User. Dans ce cas, tu mets la règle de validation dans le model User et tout devrait fonctionner ;)

wenz
Auteur

ça ne marche pas

Salut. tu peut mettre un required sur les champs

<td width="208">
   <?php echo $this->Form->input('nom_rech',array('class'=>'form-control','label'=>false,'div'=>false,'placeholder'=>array(__("NOM OU EGLISE",true),"required"),'style'=>'width:190px;height:32px;'));?>
   </td>
<td width="95">
    <?php echo $this->Form->input('event_rech',array('class'=>'form-control','label'=>false,'div'=>false,'placeholder'=>array(__("PUBLICATION",true),"required"),'style'=>'width:190px;height:32px;'));?>
    </td>

ou carrement au moment ou tu execute l'action search, tu précise un condition de plus dans un if

if(!empty($this->request->data['nom_rerch'] ) && !empty($this->request->data['event_rerch'])){
 \*ta requete ici*\

}

Bonjour.
Pour commencer, j'ai quelques remarques.

  • Pourquoi fais-tu un chargement du modèle User, alors qu'à priori ton action est dans le controller Users ?
  • Il faut que tu m'expliques la valeur de ta clé action dans le create de ton formulaire (../users/search), à la place de juste ta clé action, tu devrais avoir quelque chose comme :
    array('controller' => 'users', 'action' => 'search')
  • Je ne trouve pas logique ta condition if - elseif

@Romano83: Je vois que ton action search est dans le controller User. Dans ce cas, tu mets la règle de validation dans le model User et tout devrait fonctionner ;)
Vu qu'il ne définit aucune clé de modèle dans le create de son formulaire, son controller ne va pas appeler le modèle, donc les règles de validations ne seront pas appelées par défaut, donc, soit il définit la clé du modèle User dans son create, ou alors il doit faire la vérification manuellement depuis l'action de son controller.

je voudrais que si on ne tape rien dnas le formulaire l'action search ne s'effectue pas, mais comment je peux faire ça?
Si tu veux que l'action search ne soit pas appelée lors de l'appui du bouton submit de ton formulaire, il faut que l'un de tes input de ton formulaire soit défini comme requis (required), par contre, si tu acceptes que l'action soit appelée mais qu'elle ne donne pas suite même si une requête est posté par le formulaire, il te faut modifier :

if($this->request->is('post')){

par :

if($this->request->is('post') && !empty($this->request->data)){

De cette manière, même si le formulaire envoit une requête postée, si aucune donnée n'est transmise, le code qui se trouve dans la condition if, ne sera pas exécuté.