IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Requête formulaire de recherche [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut Requête formulaire de recherche
    Bonjour,

    J'ai crée un formulaire de recherche qui récupère la valeur entrée par l'utilisateur.
    Je planche à présent sur la requête. Celle-ci doit vérifier si la chaîne existe dans un des champs de mon entité. Exemple. Je tape la chaîne "en" dans ma zone de recherche. Il devrait donc m'afficher les enregistrements contenant "en" tels que enseigne, tienne, etc. Vous voyez le principe.

    1ère question :

    Pourriez-vous me donner quelques infos à ce sujet car je suppose qu'il ne s'agit pas de faire un SELECT sur chaque champ.

    2ème question :

    Comment symfony gère t'il la sécurité de ce type de champ de recherche. Je parle d'injection par exemple. Est-ce les règles de validation qui s'occupe de sécuriser cela ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php public function getSearchList ($formvalue) 
    	{
     
    		$qb = $this->createQueryBuilder('a');
     
    		$qb->where('a.name LIKE :formvalue')
    			  ->orWhere('a.process LIKE :formvalue')
    			  ->setParameter('formvalue', $formvalue);
     
    		return $qb->getQuery()->getResult();
    	}
    Mais sans succès !

  3. #3
    Membre éclairé
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Par défaut
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php public function getSearchList ($formvalue) 
    	{
     
    		$qb = $this->createQueryBuilder('a');
     
    		$qb->where('a.name LIKE :formvalue')
    			  ->orWhere('a.process LIKE :formvalue')
    			  ->setParameter('formvalue', '%'. $formvalue .'%');
     
    		return $qb->getQuery()->getResult();
    	}

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Salut,

    avant de tester, j'ai une autre question. J'essaye en vain de récupérer la chaine entrée dans mon formulaire. Je fais ceci dans mon controleur :

    value est le nom du champ de mon formulaire de recherche dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     <?php
    //...
     
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('value', 'text');
        }
    //...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <?php
    $request = $this->getRequest();
    $formvalue= $request->request->get('value');
    Mon code me semble pourtant correcte.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Ok c'est bon ça fonctionne j'ai pu récupérer ma valeur passée par mon formulaire.

    Ma requête marche également. Merci d'ailleurs.

    Autre question simple. Si je veux utiliser une chaîne et non un paramètre dans ma requête, quelle sera la synthaxe ? J'ai essayé ceci mais ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	<?php public function getSearchList ($formvalue) 
    	{
     
    		$qb = $this->createQueryBuilder('a');
     
    		$qb->where('a.name LIKE :formvalue')
    				  ->orWhere('a.process LIKE :formvalue')
    				  ->andWhere('a.active = active') // LIGNE QUI POSE PROBLEME
    				  ->setParameter('formvalue', '%'.$formvalue.'%');
     
    		return $qb->getQuery()->getResult();
    	}

    J'ai cette erreur :

    [Semantical Error] line 0, col 125 near 'active': Error: 'active' is not defined.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Par défaut
    Ca ressemble a un erreur "sql" ...
    Pour tester une valeur de type string il faut la mettre entre côtes ? non?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	<?php public function getSearchList ($formvalue) 
    	{
     
    		$qb = $this->createQueryBuilder('a');
     
    		$qb->where('a.name LIKE :formvalue')
    				  ->orWhere('a.process LIKE :formvalue')
    				  ->andWhere("a.active = 'active' ") // peut-être ? 
    				  ->setParameter('formvalue', '%'.$formvalue.'%');
     
    		return $qb->getQuery()->getResult();
    	}

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    Ouais en effet, ça fonctionne. J'avais pas pensé à remplacer les ' par des ".

    Merci.

    J'en profite pour poser une autre question vu qu'il s'agit toujours de ce formulaire de recherche.

    Ce formulaire se trouve en haut de ma page index.htmt.twig.
    Voici ma route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    candidate:
        pattern:  /
        defaults: { _controller: "AdlHiringBundle:Candidate:index" }
    Ma méthode indexAction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
      <?php  public function indexAction()
        {
    		$request = $this->get('request');
     
    		$SearchCandidate = new SearchCandidate();
    		$search_form=$this->createForm(new CandidateSearchType(), $SearchCandidate);
     
    		if($request->getMethod()=='POST')
    		{
    				$formvalue= $request->request->get('value');
    				$em = $this->getDoctrine()->getEntityManager(); 
    				$candidate = $em->getRepository('AdlHiringBundle:Candidate')->getSearchList($formvalue);
     
    		}else{
     
    		$em = $this->getDoctrine()->getEntityManager(); 
    		$candidate = $em->getRepository('AdlHiringBundle:Candidate')->findBy(array('active'=>'active'));
    		}
     
            return $this->render('AdlHiringBundle:Candidate:index.html.twig', array(
                'entity' => $candidate,
                'search_form' => $search_form->createView()
            ));
        }
    Ce que je ne comprends pas c'est que rien ne se passe quand je valide le formulaire de recherche.
    Pourtant il passe bien dans mon IF. Je ne vois pas ce qui cloche.

    Dois-je utiliser une méthode séparée ? Comment faire dans ce cas pour ne pas devoir créer une nouvelle vue ?
    J'aimerais en effet faire les traitement sur cette vue avec une seule méthode. Est-ce possible ?

  8. #8
    Membre éclairé
    Profil pro
    IED Web
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : IED Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Par défaut
    "Rien ne se passe", c'est à dire ?

    Vérifie les objets entités renvoyés par tes requêtes BDD. Pour ton $candidate, utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          $e = \Doctrine\Common\Util\Debug::export($candidate, 3);
            $this->get('logger')->info(print_r($e, 1));
    Si le resultat te semble conforme c'est que le problème se passe au niveau du rendu du template. et là aussi, il faut faire du debug avec
    pour connaitre ton objet et savoir le parcourir dans le but de l'afficher.

    Sinon ça, Symfony2 est pas des framework les plus simples et il faut connaitre les basiques du bon dev hein? Utiliser un debugger pour faire du contrôle pas à pas sur tes valeurs, bien analyser les logs php et symfony2, et bien sûr lire la doc, ce qui dans le cas de symfony2, ne se réduit pas à son site dédié mais aussi aux sites respectifs de Doctrine et Twig à minima. (Et Swiftmail, etc..)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 97
    Par défaut
    C'est ok ça fonctionne. Justement grâce au debug de netbeans.
    En fait je devais juste récupérer la valeur searchvalue de mon tableau :

    $formvalue= $request->request->get('value');

    Merci quand même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Formulaire de recherche: Requête sur l'ensemble des attributs d'une base de données
    Par arthur.moreau dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/07/2014, 09h09
  2. [Toutes versions] requête multiple dans formulaire de recherche multi critère.
    Par Lyude dans le forum IHM
    Réponses: 16
    Dernier message: 11/05/2010, 18h51
  3. Réponses: 2
    Dernier message: 04/05/2007, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo