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
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'
)
);
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 ;)
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.
array('controller' => 'users', 'action' => 'search')
@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é.