Bonjour,
Je suis entraine de développer un petit système de recherche dans mon site web et je suis bloqué avec la requête pour lancer la recherche en fonction de ce qui à enter dans le formulaire.

Voici le formulaire pour envoyer la recherche :

<?= $this->Form->create('Post',array('type'=>'GET','url'=>array('action'=>'search'))); ?>
<?= $this->Form->input('q',array('label'=>'Rechercher un article')); ?>
<?= $this->Form->end('Rechercher'); ?>

Voici la fonction :

public function search(){
        if (isset($_GET'q'])) {
            $query = $_GET'q'];
            $s = explode(" ", $query);
            $conditions = array('Post.content'=>$query);
            $results = $this->Post->find('all',
                array('conditions'=>$conditions)
            );
            debug($results);
        } else {
            $this->Session->setFlash("No result",'notif',array('type'=>'error'));
        }
    }

Pourtant dans l'adresse url j'ai les donnée envoyé :

posts/search?q=Je+fait+une+recherche

Je sais que je doit utiliser les LIKE ou AMD et OR dans ma requête sql. Je ne vois pas aucun de ces mots dans ma requête

SELECT `Post`.`id`, `Post`.`name`, `Post`.`slug`, `Post`.`content`, `Post`.`type`, `Post`.`online`, `Post`.`created`, `Post`.`media_id`, `Post`.`category_id`, `Post`.`user_id` FROM `dataMuicalityMaker`.`mu_posts` AS `Post` WHERE `Post`.`content` = 'Je fait une recherche' ORDER BY `Post`.`created` DESC

Merci de votre aide en avance.

6 réponses


Bonjour.
Tu dis que tu sais que tu dois utiliser like , mais tu ne le met pas dans ta requête SQL.
C'est donc normal que le like n'apparaisse pas dans le retour de ta requête.

Essayer cela !

$query = $this->request->query'q'];
$conditions = array('Post.content LIKE'=> '%'.trim($query).'%');
lakamark
Auteur
$conditions = array('Post.content LIKE'=> '%'.trim($query).'%');
$results = $this->Post->find('all',
    array('conditions'=>$conditions)
);

Je met la requête dans une variable et je l'envoi à la vue serach.ctp
et je ne vois rien.

Je fait un debug de $results

c'est un tableau vide qui s'affiche.

array()

bizarre?

Peut-être que :

if($this->request->is('get') && !empty($this->request->data'Post']'q']))

que ton

if(isset($_GET'q']))

fonctionnerait mieux.
Non ?
Je dis ça, mais personnellement j'utilise particulièrement les recherches par méthode post et non get, du coup je peux me tromper sur le système du get.

lakamark
Auteur

Non ça fonctionne pas. Si je met la méthode Post ça me dit :
The request has been black-holed

(vue que j'ai activée la sécurité sur mon site web)

Bonsoir.
Il te suffirait de mettre dans un beforeFilter de ton controller :

$this->Security->allowedActions(array('search'));

Quelque chose comme ça en tout cas.
Vu qu'il n'y a pas d'insertion en base de données, tu ne risques pas grand chose en désactivant la sécurité Csrf pour cette action.