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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    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 : 152
Taille : 142,3 Ko
    Nom : Capture d’écran 2015-11-24 à 13.27.12.png
Affichages : 144
Taille : 74,8 Ko
    Nom : Capture d’écran 2015-11-24 à 13.27.31.png
Affichages : 144
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 : 141
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 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    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
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    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 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    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
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    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 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    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']."%' "

+ 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