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

Langage PHP Discussion :

Script recherche php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut Script recherche php
    Bonjour chers amis dév,

    je suis en train de créer un système de recherche un peu à la façon facebook ou à la façon instant search de google.

    Mon soucis réside dans la requête je pense au moment ou je tape un premier mot suivi d'un deuxième avec un espace entre les deux.

    Quand je tape le prénom et un espace tout va bien mais dès que je commence à taper le nom après l'espace, il me retourne "aucun résultat".

    Voici mon script :
    Code php : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
    if(!empty($_POST) AND !empty($_POST['search']))
    {
    	extract($_POST);
    	$space=str_replace(' ','', $_POST['search']);
    	$search = strip_tags($space,$_POST['search']);
     
    	require('../include/config.php');
    	$reqSearch=$bdd->query("SELECT nom, prenom, photoProfil FROM membres WHERE nom LIKE '%$search%' OR prenom LIKE '%$search%'  LIMIT 0,8");
    	if($reqSearch->rowCount()>0){
    		while($data = $reqSearch->fetch(PDO::FETCH_OBJ)){
    		echo '<div id="infos">';
        	echo '<img src="./img/photos/'.htmlspecialchars($data->photoProfil).'" width="50" height"50" alt="'.htmlspecialchars($data->photoProfil).'" title="Profil de '.htmlspecialchars($data->prenom).'&nbsp;'.htmlspecialchars($data->nom).'" style="float:left;margin:0 5px 0 0"/>';
     
    		echo '<div style="float:left;width:225px;margin-top:2px;text-align:left">'.htmlspecialchars($data->prenom).'&nbsp;'.htmlspecialchars($data->nom).'</div>';
    		echo '</div>';
    		}
     
    	}
    	else
    	{
    		echo htmlspecialchars('Aucun résultat. pas de chance !');	
    	}
    }
    else
    {
    	echo htmlspecialchars('Aucun résultat. ERREUR envoi formulaire');
    }
    echo '<div id="linkPlus">';
    echo '<span class="linkPlus"><a href="recherches/recherche.php">Afficher plus de résultats</a></span>';
    echo '</div>';
    ?>
    Comme vous pouvez le constater le résultat supprime l'espace mais quand je tape le prenom, il ne retourne plus aucun résultat puisque ça dépasse ce qui existe en réel.

    Le chemin inverse existe aussi. c'est à dire que si je commence à taper le Nom en premier il me le trouve aussi...

    en fait il n'additionne pas les deux colonnes dans lesquelles il effectue la recherche.

    Je vois pas trop comment je peux modifier cela.

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux tester si le nom correspond a un des mots saisis ET si le prenom correspond a un des mots saisis.
    Dans le cas d'un seul mot ça devient si le nom OU le prenom correspond au mot saisi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(!empty($_POST['search']))
    {
    	require('../include/config.php');
            $mots = explode(' ', $_POST['search']));
            if (count($mots) == 1)) {
                 $sth = $bdd->prepare("SELECT nom, prenom, photoProfil FROM membres WHERE nom LIKE ? OR prenom LIKE ? LIMIT 0,8");
     
              }
               else {
                     $sth = $bdd->prepare("SELECT nom, prenom, photoProfil FROM membres WHERE (" . implode(' OR ', array_fill(0, count($mots), 'nom LIKE ?')) . ") AND (" .  implode(' OR ', array_fill(0,  count($mots), 'prenom LIKE ?')) . ") LIMIT 0,8";);
               }
    $param = array_merge($mots, $mots);
    $sth->execute($param);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut
    Merci pour ta réponse rapide mais cependant il me manque un if avant le while. car sinon je ne peux pas émettre de else pour l'affichage de mes echos ^^

    Je vois pas quelle vérification faire à ce niveau-là

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quelles vérifications faire sur quoi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut
    Bah en fait je dois afficher si il n'y a aucun résultat de retourné ^^.

    J'avais cette condition avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($reqSearch->rowCount()>0){
    Juste avant mon WHILE. Mais là du coup, je ne peux plus vérifier si y a un retour ou non.

    Enfin je peux surement le faire mais je vois pas comment ^^

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Cette partie de ton code ne change pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [Calendrier] Recherche script calendrier php (Sans MySql)
    Par lolymeupy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/08/2008, 10h29
  2. recherche de script en php
    Par leclone dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 07/12/2007, 13h00
  3. Pb de script et PHP
    Par blueice dans le forum Langage
    Réponses: 4
    Dernier message: 22/07/2006, 14h21
  4. Réponses: 3
    Dernier message: 24/01/2006, 08h15
  5. [MySQL] Formulaire de recherche PHP + un script d recherche en HTML
    Par Dsphinx dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/11/2005, 19h44

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