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 :

Moteur de recherche et Sessions [PDO]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Moteur de recherche et Sessions
    Bonjour,

    Je développe un site contenant des sessions ou on peut par exemple ajouter des artistes et les rechercher en fonction d'un mot clé.

    Je vous présente mes 3 tables:

    Nom : Capture d’écran 2015-11-24 à 13.26.51.png
Affichages : 130
Taille : 142,3 Ko
    Nom : Capture d’écran 2015-11-24 à 13.27.12.png
Affichages : 122
Taille : 74,8 Ko
    Nom : Capture d’écran 2015-11-24 à 13.27.31.png
Affichages : 123
Taille : 64,4 Ko
    Cette dernière grâce aux contraintes de clés étrangère, me sert à lié mon id_membre et mon id_artiste.

    Comme vous pouvez le constater, le membre avec l'id 5 à 3 artiste alors que le membre avec l'id 7 à 2 artistes.
    Nom : Capture d’écran 2015-11-24 à 13.57.14.png
Affichages : 121
Taille : 31,7 Ko


    Pour afficher la liste des artistes à une session propre, cela fonctionne:

    Le modèle:
    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
     
    <?php
    try 
    {
        $hostname = 'localhost';
    	$user = 'root';
    	$pass='root';// sous windows mettre '';
    	$dbh = new PDO("mysql:host=$hostname;dbname=mediadb", $user, $pass);
    	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
     
        $sql = 'select * FROM artistes,membres_artistes WHERE id_membres='.$_SESSION["id"].' AND id_artistes=artistes.id';
        $stmt = $dbh->query($sql);
     
    	$records = array();
     
     
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
        {
    		$records[] = $row; // Tableau 2 dimensions   
        }
    }
     
    catch(PDOException $e)
    {
        echo "Error: " . $e->getMessage();
    }
     
    ?>
    La vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     <?php
     echo "<h3> Votre liste d'artistes: </h3>";
     
     foreach($records as $record)
     {
            echo "<a href = '?section=list&id={$record["id"]}'>"; 
            echo $record['prenom'];     
            echo '-'.$record['nom'].'<br/>';
    		echo '</a>';
    	}	
    		?>
    Par contre J'ai beaucoup de mal en ce qui concerne la requête pour le modèle de recherche.

    J'avais ceci qui fonctionne très bien mais m'affiche tout les artistes de tout les membres lorsqu'on submit sans mot clé dans le formulaire de recherche;
    (Ce qui est normal car je SELECT * FROM artistes.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(isset($_POST["keyword"]))
    			{  
    			$sql = "SELECT * FROM artistes WHERE nom LIKE'%".$_POST["keyword"]."%'OR prenom LIKE'%".$_POST["keyword"]."%'OR surnom LIKE'%".$_POST["keyword"]."%' ";
    			$stmt = $dbh->query($sql); 
     
    			$records = array();
     
    				while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    					{
    					$records[] = $row; // Tableau 2 dimensions
    					}


    Alors j'essais de relier ces deux requête en une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT * FROM artistes WHERE nom LIKE'%".$_POST["keyword"]."%'OR prenom LIKE'%".$_POST["keyword"]."%'OR surnom LIKE'%".$_POST["keyword"]."%' ";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT * FROM artistes,membres_artistes WHERE id_membres=".$_SESSION['id']." AND id_artistes=artistes.id";
    Lorsque je fonde ces 2 requêtes en une, cela m'affiche 5 fois la liste des artistes de tout les membres...

    Je pense avoir un problème de logique...

    Est-ce que quelqu'un pourrait m'aider s'il vous plaît ?

    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Je me suis basé sur tes tables, les id que tu cite n'existe pas.

    Essaye ceci pour voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    "SELECT * FROM artistes a
    INNER JOIN membres_artistes ma
     ON a.id=ma.artistes.id 
    WHERE ma.id_membres=".$_SESSION['id']
    AND nom LIKE'%".$_POST["keyword"]."%'OR prenom LIKE'%".$_POST["keyword"]."%'OR surnom LIKE'%".$_POST["keyword"]."%' ";

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut


    Les id que je cite n'existe pas?

    Non ça ne fonctionne pas, maintenant ça ne m'affiche plus rien.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    id_artistes=artistes.id

    Un existe , l'autre pas en tous cas dans la déscription de la db que tu donnes dans le premier post

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Si je pense que ça veut dire qu'il m'assigne l'id_artiste dans la table artiste puis vas chercher l'id de cette table. Autrement ça ne marche pas pour voir les artistes de la session.

    Il y avait quelque erreurs de syntaxe dans ton code, après avoir corrigé ca;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM artistes a INNER JOIN membres_artistes ma ON a.id=ma.artistes.id WHERE ma.id_membres=".$_SESSION['id']." AND nom LIKE'%".$_POST['keyword']."%' OR prenom LIKE'%".$_POST['keyword']."%' OR surnom LIKE'%".$_POST['keyword']."%' ";
    Cela m'indique :

    Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ma.artistes.id' in 'on clause'

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Sorry

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT * FROM artistes a INNER JOIN membres_artistes ma ON a.id=ma.id_artistes WHERE ma.id_membres=".$_SESSION['id']." AND nom LIKE'%".$_POST['keyword']."%' OR prenom LIKE'%".$_POST['keyword']."%' OR surnom LIKE'%".$_POST['keyword']."%' "

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Au début rien, mais oublie du ; et maintenant m'affiche la liste de tout les artistes des deux membres.

    Résultat le même que ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM artistes WHERE nom LIKE'%".$_POST["keyword"]."%'OR prenom LIKE'%".$_POST["keyword"]."%'OR surnom LIKE'%".$_POST["keyword"]."%' ";

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Tu veux pas me donner yun dump de ta db , j'aurais plus facile pour tester

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Tu peux télécharger ça ici : http://we.tl/64jWM81BEU
    Merci

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Voici cette requête ne me ressort que Hendrix

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT * FROM artistes a
    INNER JOIN membres_artistes ma
    ON a.id = ma.id_artistes AND ma.id_membres = 5
    WHERE a.nom LIKE '%jimi%' OR a.prenom LIKE '%jimi%' OR a.surnom LIKE '%jimi%';

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Super!!!

    Suivant ton modèle cela me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM artistes a INNER JOIN membres_artistes ma ON a.id = ma.id_artistes AND ma.id_membres = ".$_SESSION['id']." WHERE a.nom LIKE'%".$_POST['keyword']."%'OR prenom LIKE'%".$_POST['keyword']."%'OR surnom LIKE'%".$_POST['keyword']."%' ";
    Et ça fonctionne!!

    J'ai donc besoin de bosser le sql, je ne connaissais pas les termes 'a' 'ma' 'INNER JOIN' ...

    Merci pour la leçon!

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Pour info INNER JOIN est standard au SQL pour joindre plusieurs tables Voir ICI

    Pour la a et le ma ce sont des alias de table que je définis moi même, ici le a pour la table artiste et ma pour membres_artiste, j'aurais pu les appeller comme je veux, cela simplifie la lecture.

    Au lieu d'écrire membres_artiste.id_artistes, j'écris ma.id_artistes... Tu comprends ?

    MaitrePylos

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai tout compris
    Merci beaucoup!

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

Discussions similaires

  1. [PHP 5.2] Session et moteurs de recherche
    Par ixesss dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2009, 22h59
  2. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  3. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  4. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  5. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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