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

PHP & Base de données Discussion :

[Conception] Recherche interne+résultats


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut [Conception] Recherche interne+résultats
    Je sollicite encore votre aide et vais encore abuser de votre temps afin que vous m'orientiez sur une piste

    Toujours concernant mon application membres et département, j'aimerais à partir d'une saisie cette fois que l'internaute puisse taper un chiffre entre 1 et 100 par exemple et que les résultats s'affichent.

    Exemple : si je tape 41, j'aimerais que la 41ème fiche membre apparaisse suivie des 10 suivantes (c a d 42,43,44,...,51)

    Pour l'instant avec ce que j'ai mis en place, c a d une recherche par 'id' , si je tape 2 , la fiche 2 apparaît ainsi que ... la 12, la 22, 32 ... ainsi que toute celle avec un chiffre 2 au lieu d'afficher la 2, la 3,4,5,6,...,12

    Voici mon code pour la saisie :

    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
     
    <?php
    include "configuration.php";
    include "page_haut.inc";
    $query = mysql_query("SELECT * FROM $mbmembres");
     ?>
     
    <form action="resultats.php" method="post" target="main">
      <p>
        <table border="0">
      </p>
      <tr>
          <td valign=top>Aller au membre N°
              <input type='text' size="10" name='word'>
              <input name="submit" type='submit' value='OK'>
          </table>

    Concernant ma page de résultat 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
     
    <?php
     
    include "configuration.php";
     
    	if (!empty($word)) {
     
     
    		$search = mysql_query("SELECT * FROM $mbmembres WHERE id LIKE '%$word%' LIMIT 0,100") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
     
    if ($num == 0) {
     
    while ($row = mysql_fetch_row($search)) { 
     
    echo "<tr>"; 
    echo "$img<td><b><center></td>"; 
     
    }
     
    ?>
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id LIKE '%$word%'
    et que $word contient 2, la requête te renvoie toutes lignes où l'id contient 2.

    Si tu veux récupérer les lignes où l'id est 2 et +, il faut le faire avec l'opérateur > et non LIKE.
    Et bien sûr ne pas oublier le "ORDER BY id " pour s'assurer que les lignes soient ordonnées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id >= %$word ORDER BY id LIMIT 0,10

  3. #3
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Je viens de modifier mon code comme tu me l'as indiqué ci-dessus, mais les résultats s'affichent de 1 à 10 sans prendre en compte l'id que je rentre...
    J'ai peut être pas fais ce qu'il fallait ?

    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
     
    <?php
     
    include "configuration.php";
     
    	if (!empty($word)) {
     
     
    		$search = mysql_query("SELECT * FROM $mbmembres WHERE id >= '%$word' ORDER BY id LIMIT 0,10") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
     
    if ($num == 0) {
     
    while ($row = mysql_fetch_row($search)) { 
     
    echo "<tr>"; 
    echo "$img<td><b><center></td>"; 
     
    }
     
    ?>

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Moi je dirais que délimiter la recherche dans le where. Par exemple, tu tapes 41 tu fais ton where comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE nomduchamp >= 41 AND nomduchamp <= 41 +10
    Tiens il faudrait tester que les 10 prochains existent.

    Hum il faudrait vérifier si un fonction n'existe pas déjà

  5. #5
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Citation Envoyé par Angelik
    Je viens de modifier mon code comme tu me l'as indiqué ci-dessus, mais les résultats s'affichent de 1 à 10 sans prendre en compte l'id que je rentre...
    J'ai peut être pas fais ce qu'il fallait ?
    Oui tu as laissé un % ==> MySQL tente de convertir ta chaîne en entier (eh oui en laissant les ' ', ça oblige une conversion) ==> il n'y arrive pas ==> 0

    Citation Envoyé par Kerod
    Tiens il faudrait tester que les 10 prochains existent.

    Hum il faudrait vérifier si un fonction n'existe pas déjà
    Oui, une seule suppression et ça ne marche plus avec le +10

  6. #6
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    J'ai du mal à comprendre pourquoi le code ci dessous me renvoi les résultats avec toutes les fiches où le 2 apparaît par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = mysql_query("SELECT * FROM $mbmembres WHERE id LIKE '%$word%' LIMIT 0,10") or die ("ERROR:" . mysql_error());
    et que le code de Biglo ci-dessous me renvoi tous les résultats de 0 à 10 sans prendre en compte l'id préalablement renseigné...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = mysql_query("SELECT * FROM $mbmembres WHERE id >= '%$word%' LIMIT 0,10") or die ("ERROR:" . mysql_error());


    lol jai posté en même temps que toi ma réponse Biglo... Je m'empresse de réctifier

  7. #7
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Tiens tu peux aussi utiliser le BETWEEN qui renvoie les valeurs comprises entre deux limites

  8. #8
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    J'ai rectifié mon code en supprimant les ' et % ...Effectivement maintenant ça marche !

    Tiens tu peux aussi utiliser le BETWEEN qui renvoie les valeurs comprises entre deux limites
    c'est à dire ?

    Sinon, je me permets de vous demander une dernière chose [sans ré-ouvrir un post] concernant l'ouverture aléatoire de fiches 'membre'

    Concrètement, comment faire pour afficher 10 fiches aléatoires qui se suivent? Par exemple : Quelle méthode employée pour afficher les fiches 55,56,57,...,65 et en raffraîchissant la page obtenir 4,5,6,...,14 ou encore 62,63,64,...,72

    Toujours sur la base de ce 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
    <?php
     
    include "configuration.php";
     
    	if (!empty($word)) {
     
     
    		$search = mysql_query("SELECT * FROM $mbmembres WHERE id LIKE '%$word%' LIMIT 0,100") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
     
    if ($num == 0) {
     
    while ($row = mysql_fetch_row($search)) { 
     
    echo "<tr>"; 
    echo "$img<td><b><center></td>"; 
     
    }
     
    ?>
    Merci d'avance

  9. #9
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Voici un exemple avec between :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT column_name FROM table_nameWHERE column_nameBETWEEN value1AND value2

  10. #10
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Citation Envoyé par Angelik
    Sinon, je me permets de vous demander une dernière chose [sans ré-ouvrir un post] concernant l'ouverture aléatoire de fiches 'membre'

    Concrètement, comment faire pour afficher 10 fiches aléatoires qui se suivent? Par exemple : Quelle méthode employée pour afficher les fiches 55,56,57,...,65 et en raffraîchissant la page obtenir 4,5,6,...,14 ou encore 62,63,64,...,72
    Là il vaut mieux garder le même code (avec le <=) et générer un identifiant aléatoire pour $word. Le problème c'est que ce nombre doit être compris entre 1 et MAX(id). Tu peux le faire en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FLOOR(1 + RAND() * MAX(id)) FROM ta_table;
    Le problème c'est qu'il n'y aucune assurance pour qu'il y ait au moins 10 enregistrements où l'id est >= à ce nombre aléatoire.

  11. #11
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Aléatoire : moi pour ne pas se casser la tête je ferai avec le meme systeme que la pagination...Je récupère tout et je joue avec le start qui serait aléatoire et on garde le limit 10.

    En gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from tatable LIMIT $start, 10
    avec le start créée par rand()

  12. #12
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    En effet, c'est beaucoup plus simple et on peut facilement avoir toujours 10 enregistrements (en supposant que la table contienne au moins 10 lignes).

  13. #13
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Oui il y a cette condition, mais au final ca fonctionnera toujours

  14. #14
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Bonjour

    Le problème c'est qu'il n'y aucune assurance pour qu'il y ait au moins 10 enregistrements où l'id est >= à ce nombre aléatoire.
    En fait cela ne me pose pas de problème au sein de mon application. J'ai testé ce code ci-suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $search = mysql_query("SELECT FLOOR(1 + RAND() * MAX(id)) FROM mbmembres LIMIT 0,10") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
    Le problème c'est qu'il m'affiche seulement 1 fiche aléatoire. De plus, l'image et le lien de la fiche, ne s'affiche pas.Ce dernier problème doit être dû à mon select. De ce fait j'ai tenté sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    search = mysql_query("SELECT FLOOR(1 + RAND() * MAX(id)), sid, url,  photo FROM mbmembres LIMIT 0,10") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
    Je me documente aussi sur ta méthode Kerod et écume les sites pour rassembler des éléments sur la fonction rand () où

    Mais pour l'instant mes tentatives restent peu probantes ...

  15. #15
    Membre émérite
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Par défaut
    Salut,

    La requête que je t'ai donnée ne retourne pas le résultat que tu désires mais seulement un nombre "aléatoire" compris entre 1 et Max(id). Après avoir obtenu ce nombre, il faut refaire ta requête normal mais en y insérant ce nombre aléatoire.

    Mais il vaut mieux prendre la solution de Kerod. Seule différence pour le nombre aléatoire : il doit être compris entre 0 et le nombre d'enregistrements de ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $res = mysql_query("SELECT FLOOR(RAND() * COUNT(*)) FROM mbmembres");
    $row = mysql_fetch_array($res);
    $start = $row[0]; // Ici tu as le nombre aléatoire
     
    $search = mysql_query("SELECT sid, url,  photo FROM mbmembres ORDER BY sid LIMIT $start, 10 ") or die ("ERROR:" . mysql_error());
     
    ...

  16. #16
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Problème résolu ! Merci de votre aide qui me permet de progresser ! @bientôt

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/02/2006, 11h52
  2. [Conception] [Recherche logiciel] Modélisation rapide d'écrans de sites
    Par nicolas.charlot dans le forum Webdesign & Ergonomie
    Réponses: 1
    Dernier message: 28/11/2005, 09h38
  3. [Conception] Recherche d'algoritme
    Par MASSAKA dans le forum Général Java
    Réponses: 11
    Dernier message: 19/10/2005, 12h07
  4. Un moteur de recherche interne
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/02/2005, 18h47

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