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 :

moteur de recherche / affichage lorsqu'un résultat est nul


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut moteur de recherche / affichage lorsqu'un résultat est nul
    Bonjour,

    J'ai réalisé un moteur de recherche interne qui fonctionne merveilleusement bien. Je voudrais l'améliorer, et notamment lorsque la recherche ne donne rien. Lorsque je lance la requête, j'ai un écran blanc. J'aimerais donc qu'un message du genre "La recherche n'a donné aucun résultat".

    J'ai bien essayé de mettre une condition pour ce faire, mais toujours cet écran blanc, je sèche...

    Voici mon code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php
    mysql_select_db(""); // Sélection de la base 
     
            // Connexion à la BDD ici !
    $textfieldsql = mysql_real_escape_string($_POST['textfield']);
            // Récupération des données type de commerce
            if (isset($_POST['type']) && $_POST['type'] != "no") {
    $type = " AND type = '".mysql_real_escape_string($_POST['type'])."'";
            }
            else { $type = ""; }
     
           // Récupération des données de secteur d'activité
    if (isset($_POST[secteur]) && $_POST[secteur] != "no") { 
    $secteur = " AND secteur LIKE '%".mysql_real_escape_string($_POST['secteur'])."%'"; 
    } 
    else { $secteur = ""; } 
      // Récupération des données adresse (rues)
    if (isset($_POST[adresse]) && $_POST[adresse] != "no") { 
    $adresse = " AND adresse LIKE '%".mysql_real_escape_string($_POST['adresse'])."%'"; 
    } 
    else { $adresse = ""; } 
     
        // Récupération des données de secteur géographique
    if (isset($_POST[geographie]) && $_POST[geographie] != "no") { 
    $geographie = " AND geographie LIKE '%".mysql_real_escape_string($_POST['geographie'])."%'"; 
    } 
    else { $geographie = ""; } 
      // Récupération des données de description
     
    if (isset($_POST[textfield]) && $_POST[textfield] != "no") { 
    $textfield =  "  AND ( nom LIKE '%".$textfieldsql."%' OR type LIKE '%".$textfieldsql."%' OR secteur LIKE '%".$textfieldsql."%' OR numero LIKE '%".$textfieldsql."%' OR horaires LIKE '%".$textfieldsql."%' OR geographie LIKE '%".$textfieldsql."%' OR description LIKE '%".$textfieldsql."%' )";
    } 
    else { $textfield = ""; } //création de la fonction d'appel url
    $url = mysql_query("SELECT details FROM locatif"); // Requête SQL
     
            // Création de la requête SQL          		
    		$select = "SELECT * FROM commerces WHERE 1".$type.$secteur.$adresse.$geographie.$textfield." ORDER BY id";
     
    	    // Exécution de la requête
            $raw = mysql_query($select) or die(mysql_error());
     
    	$nb_resultats = mysql_num_rows($raw) or die(mysql_error());
    	  // Fermeture connexion
                    mysql_close();
     
     
     if($nb_resultats != 0) //si le nombre de résultats est différent de 0
    {
    echo 'Nous avons trouvé '.$nb_resultats; 
    if($nb_resultats > 1) { echo ' résultats : '; } else { echo ' résultat '; }
     
    				  // on affiche le nombre de résultats 
    // on vérifie le nombre de résultats pour orthographier correctement. 
     
    // Affichage des données
     
    				while
                   ($data = mysql_fetch_array($raw))
                    {
                            print ("
    			<span class='timesbleu18'>".$data['nom']."</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			<a href=".$data['details'].">détails</a>
    						<br><br>
    						".$data['type']."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    						".$data['numero']."
    						".$data['adresse']."<br><br>
    						".$data['description']."<br><br><br><hr>
    						  ");
                    }
    }
    else {
    	echo "Pas de résultats";
    }
     
            ?>
    Pour info, si je fais un "echo $nb_resultats;" avant mon "if($nb_resultats != 0)" , j'obtiens un parse error :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_IF in /homepages/12/d218200567/htdocs/maquettes/ceres/resultat.php on line 56
    La ligne 56 correspond à ceci dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php   if($nb_resultats != 0) ?>
    Je sèche complètement, je ne vois pas où se loge ce petit grain de sable qui bloque les rouages de mon script...

    En remerciant par avance les âmes charitables qui vont me donner un petit coup de pouce,

    L.C.

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Et si tu vires ton if avec !=0 et tout ce qui suit, que te donnes $nb_resultats ?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    Si je vire tout ce bout de code j'ai un parse error au niveau de ma boucle while...

  4. #4
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Continue dans ce cas... le problème doit venir de plus haut.
    Vérifie à nouveau toutes tes accolades, tu dois sûrement en avoir oubliée une ou fais une petite erreur.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    J'ai repris comme code et j'ai fait posé cette condition pour le nombre de résultats :


    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
     
     <? 
     
    				  if($nb_resultats != 0) //si le nombre de résultats est différent de 0
    {
    echo 'Nous avons trouvé '.$nb_resultats; 
    if($nb_resultats > 1) { echo ' résultats : '; } else { echo ' résultat '; }
     
     
    if  ($nb_resultats == 0)
    {
     echo 'Nous avons trouvé '.$nb_resultats; 
    if  ($nb_resultats == 0){ echo 'résultat pour votre recherche'; } else { echo 'résultat pour votre recherche'; }
     
    				  // on affiche le nombre de résultats 
    // on vérifie le nombre de résultats pour orthographier correctement. 
    ?>


    En faisant ceci (ce qui me semble plus plausible car les deux conditions sont symétriques) j'ai un parse error : syntax unexpected $end concernant la toute dernière ligne de mon script.

    Est-ce qu'en faisant comme ceci, ce n'est pas plus parlant pour pouvoir corriger l'erreur en question ?

    J'émets aussi une hypothèse : l'erreur ne viendrait-elle pas tout simplement de ces deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     <?php  $raw = mysql_query($select) or die(mysql_error());
     
    	$nb_resultats = mysql_num_rows($raw) or die(mysql_error()); ?>

  6. #6
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour

    C'est une erreur qui correspond soit à :
    • l'oubli d'un guillemet,
    • l'oubli d'une accolade,
    • l'oubli d'une parenthèse,
    • ou l'oubli d'un point virgule.


    Donc la ligne d'erreur signalée n'est pas celle où se trouve l'erreur, elle se trouve au dessus. Ce que disais d'ailleurs blueice.

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    yesssssssssssssssssssss

    J'ai compris pourquoi cela ne fonctionnait pas :

    pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nb_resultats = mysql_num_rows($raw) or die(mysql_error());
    il fallait certes le réécrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nb_resultats = mysql_num_rows($raw);
    Mais il fallait aussi appliquer la même chose pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $raw = mysql_query($select) or die(mysql_error());


    Désormais le code fonctionne quelque soit le cas de figure. Je le retranscrit ici si ça peut aider d'autres gens dans la panade :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>result</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style type="text/css">
    <!--
    @import url file:///
    -->
    </style>
    </head>
     
    <body><?php
            mysql_connect("", "", ""); 
     
    mysql_select_db(""); // Sélection de la base 
     
     
          // Connexion à la BDD ici !
     
    $textfieldsql = mysql_real_escape_string($_POST['textfield']);
     
    // Récupération des données type de commerce
    if (isset($_POST['type']) && $_POST['type'] != "no") {
        $type = " AND type = '".mysql_real_escape_string($_POST['type'])."'";
    } else {
        $type = "";
    }
     
    // Récupération des données de secteur d'activité
    if (isset($_POST['secteur']) && $_POST['secteur'] != "no") { 
        $secteur = " AND secteur = '".mysql_real_escape_string($_POST['secteur'])."'"; 
    } else {
        $secteur = "";
    }
     
    // Récupération des données adresse (rues)
    if (isset($_POST['adresse']) && $_POST['adresse'] != "no") { 
        $adresse = " AND adresse = '".mysql_real_escape_string($_POST['adresse'])."'"; 
    } else {
        $adresse = "";
    } 
     
    // Récupération des données de secteur géographique
    if (isset($_POST['geographie']) && $_POST['geographie'] != "no") { 
        $geographie = " AND geographie = '".mysql_real_escape_string($_POST['geographie'])."'"; 
    } else {
        $geographie = "";
    }
     
     
    // Récupération des données de description
     
    if (isset($_POST['textfield']) && $_POST['textfield'] != "no") { 
        $textfield = " AND ( nom LIKE '%".$textfieldsql."%' OR type LIKE '%".$textfieldsql."%' OR secteur LIKE '%".$textfieldsql."%' OR numero LIKE '%".$textfieldsql."%' OR horaires LIKE '%".$textfieldsql."%' OR geographie LIKE '%".$textfieldsql."%' OR description LIKE '%".$textfieldsql."%' )";
    } else {
        $textfield = "";
    }
     
     
    // Création de la requête SQL
    	$select = "SELECT * FROM commerces WHERE 1".$type.$secteur.$adresse.$geographie.$textfield." ORDER BY id";
     
    // Exécution de la requête
    	$raw = mysql_query($select);
    	$nb_resultats = mysql_num_rows($raw);
     
        if($nb_resultats!=0) { // si le nombre de résultats est supérieur à 0, on continue
    ?>
     
    <table width="966" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td><table width="966"  border="0" cellpadding="0" cellspacing="0">
            <tr>
              <td width="33">&nbsp;</td>
              <td><table width="900" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                    <td height="30">&nbsp;</td>
                  </tr>
                  <tr>
                    <td height="50"><div align="center" class="timesbleu20grasmaj">
                        <p class="timesbleu14"><u>R&eacute;sultats de la recherche</u></p>
                      </div></td>
                  </tr>
    			  <tr>
                    <td> <div align="center"><a href="search.php" target="search">Retour 
                        &agrave; la page pr&eacute;c&eacute;dente</a> &gt;&gt; </div><br>
                      <span class="timesbleu14">Nous avons trouvé&nbsp;
    <?php
    	echo $nb_resultats; // on affiche le nombre de résultats 
     
    if ($nb_resultats > 1) {
        echo ' résultats';
    } else {
        echo ' résultat';
    }// on vérifie le nombre de résultats pour orthographier correctement. 
    ?>
    </span><br><br>
    <?php
    // Affichage des données
     
    	while ($data = mysql_fetch_array($raw)) {
    	    echo '<span class="timesbleu18">'.$data['nom'].'</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
    	    echo '<a href="'.$data['details'].'">détails</a><br><br>';
    	    echo $data['type'].'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
    	    echo $data['numero'];
    	    echo $data['adresse'].'<br><br>';
    	    echo $data['description'].'<br><br><br><hr>';
    	}
    } else {?><div align="center"><br><br><?php
        echo ?>D&eacute;sol&eacute;, nous n'avons trouv&eacute; aucun r&eacute;sultat pour votre recherche <?php ;
    }
     
    mysql_close();// Fermeture connexion			
     
    ?><br><br></div>
                    </td>
     
    			  </tr>
                  <tr>
                    <td height="30" class="timesbleu14"><div align="center"><a href="search.php" target="search">Retour 
                        &agrave; la page pr&eacute;c&eacute;dente</a> &gt;&gt; </div></td>
                  </tr>
                </table></td>
              <td width="33">&nbsp;</td>
            </tr>
          </table></td>
      </tr>
    </table>
    </body>
    </html>
    Encore un grand merci aux bosseur qui m'ont éclairé de leurs lumières

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

Discussions similaires

  1. [SQL] moteur de recherche : affichage du nombre de résultats
    Par lachourave dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/02/2008, 15h09
  2. Moteur de recherche : comment trier les résultats par pertinence
    Par aucunIDdeLibre dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/12/2007, 14h42
  3. Réponses: 4
    Dernier message: 21/11/2007, 23h27
  4. Moteur de recherche, affichage par page et url rewriting
    Par paupiette dans le forum Langage
    Réponses: 5
    Dernier message: 22/06/2007, 11h45
  5. [ moteur de recherche ] affichage de photos, keywords
    Par van___fanel dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/03/2007, 22h32

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