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 :

Requête LIKE en MySQL


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut Requête LIKE en MySQL
    Bonjour je suis en train de faire une interface graphique en php pour ma base de données.

    Ma dernière partie consiste à écrire un mot dans une case et d'appuyer sur ok.
    Ce mot est un nom de film et je regarde un mot correspondant existe!
    mais ça ne fonctionne pas !

    pouvez-vous m'aider plz?

    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
    <?php
    // connection à la base de données : serveur = localhost, utilisateur = root et pas de password
    $db = mysql_connect('localhost', 'root', '');  
    mysql_select_db('films',$db);                    
    ?>
     
    <?php
     
    ?>
     
    <?php
    <form method="post" action="choix_saga.php">
      $request=mysql_query('SELECT films.titre as film, films.titreVO, genres.genre,qualites.qualite,collections.collection, acteurs.prenom as act_prenom,acteurs.nom as act_nom, realisateurs.prenom as real_prenom,realisateurs.nom as real_nom,date_sortie,Duree
    				   			     FROM films
    						 	     inner join Genres
    							     ON films.codegenre=genres.codegenre
    								 inner join collections
    								 on films.idcollection=collections.idcollection
    								 inner join qualites
    								 on films.codequalite=qualites.codequalite
    								 inner join film_acteur
    								 on films.idfilm=film_acteur.idfilm
    								 inner join acteurs
    								 on film_acteur.idacteur=acteurs.idacteur
    								 inner join film_realisateur
    								 on films.idfilm=film_realisateur.idfilm
    								 inner join realisateurs
    								 on film_realisateur.idrealisateur=realisateurs.idrealisateur
    							     where films.titre LIKE '%$_POST['data']%'
    							     order by films.titre');
    </form>
     
     
     
    	     while ($result = mysql_fetch_array($req))
    	     {
    		   echo "<br/>"; 
     
    		   echo $result['titre'];
    		   echo " - ";
    		   echo $result['titreVO'];
    		   echo " - ";
    		   echo $result['collection'];
    		   echo " - ";
    		   echo $result['qualite'];
    		   echo "<br/>";
    	     } 
    	?>					
    <?php	
    mysql_close($db);  
    ?>

  2. #2
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Bonjour,
    Essaye de modifier comme ceci :

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    Voila, j'ai mis a recommencer ma requête avec la suggestion de notre cher modérateur mais rien n'y fait: j'ai un problème, il y a une faute ligne 42 :
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\divixotheque\nom_film.php on line 42
    Voila, sinon, quand je mets un mot, rien ne se passe, pas de requête faites, pas de réponse de mysql...rien...savez-vous pourquoi ?

    Mon code retravaillé est ci-dessous:
    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
    <?php
    // connection à la base de données : serveur = localhost, utilisateur = root et pas de password
    $db = mysql_connect('localhost', 'root', '');  
    mysql_select_db('films',$db);                    
    ?>
    <fieldset>
    <form method="POST" action="nom_film.php">
    <input type="text" name="data" size="12"><br> 
    <input name="valider" type="submit" value="rechercher"/><br/>
    </fieldset>
    <?php
     
      $request=mysql_query('SELECT films.titre as film, films.titreVO, genres.genre,qualites.qualite,collections.collection, acteurs.prenom as act_prenom,acteurs.nom as act_nom, realisateurs.prenom as real_prenom,realisateurs.nom as real_nom,date_sortie,Duree
    				   			     FROM films
    						 	     inner join Genres
    							     ON films.codegenre=genres.codegenre
    								 inner join collections
    								 on films.idcollection=collections.idcollection
    								 inner join qualites
    								 on films.codequalite=qualites.codequalite
    								 inner join film_acteur
    								 on films.idfilm=film_acteur.idfilm
    								 inner join acteurs
    								 on film_acteur.idacteur=acteurs.idacteur
    								 inner join film_realisateur
    								 on films.idfilm=film_realisateur.idfilm
    								 inner join realisateurs
    								 on film_realisateur.idrealisateur=realisateurs.idrealisateur
    							     where films.titre LIKE %'.$_POST['data'].'%
    							     order by films.titre');
     
     
    echo $request;	  			 
     
    	     while ($result = mysql_fetch_array($request))
    	     {
    		   echo "<br/>"; 
     
    		   echo $result['titre'];
    		   echo " - ";
    		   echo $result['titreVO'];
    		   echo " - ";
    		   echo $result['collection'];
    		   echo " - ";
    		   echo $result['qualite'];
    		   echo "<br/>";
    	     } 
    	?>	
    </form>		
    <?php	
    mysql_close($db);  
    //	\'%$_POST["data"]%\'   avec ceci à la place de la suggestion ça a compilé sans erreurs mais toujours pas de réponses à ma requête!
    ?>

  4. #4
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Et avec ceci :
    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
    <?php
    $mot = "%".$_POST['data']."%";
     
    $request=mysql_query("SELECT films.titre as film, films.titreVO, genres.genre,qualites.qualite,collections.collection, acteurs.prenom as act_prenom,acteurs.nom as act_nom, realisateurs.prenom as real_prenom,realisateurs.nom as real_nom,date_sortie,Duree
    				   			     FROM films
    						 	     inner join Genres
    							     ON films.codegenre=genres.codegenre
    								 inner join collections
    								 on films.idcollection=collections.idcollection
    								 inner join qualites
    								 on films.codequalite=qualites.codequalite
    								 inner join film_acteur
    								 on films.idfilm=film_acteur.idfilm
    								 inner join acteurs
    								 on film_acteur.idacteur=acteurs.idacteur
    								 inner join film_realisateur
    								 on films.idfilm=film_realisateur.idfilm
    								 inner join realisateurs
    								 on film_realisateur.idrealisateur=realisateurs.idrealisateur
    							     where films.titre LIKE '$mot'
    							     order by films.titre");
     
    ?>
    Et utilise mysql_fetch_assoc() au lieu de mysql_fetch_array() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while ($result = mysql_fetch_assoc($req))
    	     {
    		   echo "<br/>"; 
     
    		   echo $result['titre'];
    		   echo " - ";
    		   echo $result['titreVO'];
    		   echo " - ";
    		   echo $result['collection'];
    		   echo " - ";
    		   echo $result['qualite'];
    		   echo "<br/>";
    	     }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    OK, j'ai mis tous vos changement mais ça ne marche toujours pas ! Je n'ai aucune erreur mais ça ne marche pas ^^

    Je n'ai pas le retour d'info désiré.

  6. #6
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut
    Bonjour,
    Rajoute mysql-error() apres ta requete qu'on sache quelle est l'erreur.
    Deja a premiere vue, pas de guillemets pour le like et la table genres semble s'appeler aussi Genres (perso, mon systeme est sensible à la casse).

    Bon courage !

    Sohnic

  7. #7
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 489
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 489
    Par défaut
    salut,
    je peux me tromper mais pour ton select, ne faut-il pas mieux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT table1.champ1, table2.champ1 ect
    FROM
    table1,table2 ect
    WHERE ...
    toi tu ne fais que "FROM table1"
    non ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    heu, non, il ne faut pas faire comme cela, il faut aller pas à pas...table par table
    Mais vaut mieux s'en assurer

  9. #9
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Ca a simplement l'air d'être un problème de concaténation, il faut faire attention à ne pas trop se mélanger les pinceaux

    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
     
    <?php
    // connection à la base de données : serveur = localhost, utilisateur = root et pas de password
    $db = mysql_connect('localhost', 'root', '');  
    mysql_select_db('films',$db);                    
    ?>
    <form method="post" action="choix_saga.php">
    <?php
      $request=mysql_query('SELECT films.titre as film, films.titreVO, genres.genre,qualites.qualite,collections.collection, acteurs.prenom as act_prenom,acteurs.nom as act_nom, realisateurs.prenom as real_prenom,realisateurs.nom as real_nom,date_sortie,Duree
    				   			     FROM films
    						 	     inner join Genres
    							     ON films.codegenre=genres.codegenre
    								 inner join collections
    								 on films.idcollection=collections.idcollection
    								 inner join qualites
    								 on films.codequalite=qualites.codequalite
    								 inner join film_acteur
    								 on films.idfilm=film_acteur.idfilm
    								 inner join acteurs
    								 on film_acteur.idacteur=acteurs.idacteur
    								 inner join film_realisateur
    								 on films.idfilm=film_realisateur.idfilm
    								 inner join realisateurs
    								 on film_realisateur.idrealisateur=realisateurs.idrealisateur
    							     where films.titre LIKE "%'.$_POST['data'].'%"
    							     order by films.titre');?>
    </form>		
    	<?php
    	     while ($result = mysql_fetch_array($req))
    	     {
    		   echo "<br/>"; 
     
    		   echo $result['titre'];
    		   echo " - ";
    		   echo $result['titreVO'];
    		   echo " - ";
    		   echo $result['collection'];
    		   echo " - ";
    		   echo $result['qualite'];
                 }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 118
    Par défaut
    Bonjour, alors voila, j'ai retravaillé sur le code et il y a une erreur : la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\divixotheque\nom_film.php on line 43


    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
    <h1>Vous avez le titre au bout de la langue?</h1>
    <p>
    Ha zut, vous ne connaissez plus le titre complet (ou alors vous le connaissez très bien!) mais vous en connaissez juste un petit morceau...
    Ne vous inquietez pas je vais vous aider à reconstruire les pièces du puzzle.
    Entrer juste le seul mot que vous connaisez de votre titre et par un simple clic, une réponse vous sera envoyée.
    Si un film que vous chercher n'est pas dans la liste, il suffira de m'envoyer un <a href="mailto:thibault.tercelin@gmail.com">mail</a> et je pourrai vous répondre au plus vite.
    </p>
    <?php
    // connection à la base de données : serveur = localhost, utilisateur = root et pas de password
    $db = mysql_connect('localhost', 'root', '');  
    mysql_select_db('films',$db);      
    ?>              
     
    <fieldset>
    <form method="POST" action="nom_film.php">
    <input type="text" name="data" size="12"><br> 
    <input name="valider" type="submit" value="rechercher"/><br/>
    </form></fieldset>
    <?php
    	   $req=mysql_query('SELECT films.titre as film, films.titreVO, genres.genre,qualites.qualite,collections.collection, acteurs.prenom as act_prenom,acteurs.nom as act_nom, realisateurs.prenom as real_prenom,realisateurs.nom as real_nom,date_sortie,Duree
    				   			     FROM films
    						 	     inner join Genres
    							     ON films.codegenre=genres.codegenre
    								 inner join collections
    								 on films.idcollection=collections.idcollection
    								 inner join qualites
    								 on films.codequalite=qualites.codequalite
    								 inner join film_acteur
    								 on films.idfilm=film_acteur.idfilm
    								 inner join acteurs
    								 on film_acteur.idacteur=acteurs.idacteur
    								 inner join film_realisateur
    								 on films.idfilm=film_realisateur.idfilm
    								 inner join realisateurs
    								 on film_realisateur.idrealisateur=realisateurs.idrealisateur
    								where films.titre = %'.$_POST["data"].'%
    								order by films.titre');					 
     
    ?>
     
    <?php
     
    	     while ($result = mysql_fetch_array($req)) 
    	     {
    ?>
    	    <table>
    	    <tr>
    		  <td> <?php echo $result['film'];?></td>
    		  <td> <?php echo $result['titreVO'];?></td>
    		  <td> <?php echo $result['collection'];?></td>
    		  <td> <?php echo $result['qualite'];?></td>
    		  <td> <?php echo $result['act_prenom'];?> </td>
    		  <td> <?php echo $result['act_nom'];?> </td>
    		  <td> <?php echo $result['real_prenom'];?> </td>
    		  <td> <?php echo $result['real_nom'];?> </td>
    		  <td> <?php echo $result['date_sortie'];?> </td>
    		  <td> <?php echo $result['Duree'];?> </td>
    	    </tr>	
    	    </table>
    <?php		
    	     }  
    ?>
    </form>			
     
    <?php	
    mysql_close($db);  
    ?>

  11. #11
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Votre requête n'est pas valide, la synthaxe de la clause LIKE avec l'indice % est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM table WHERE champ LIKE "%texte%"
    En effet, les guillemets doivent entourer la chaine de caractères.

    Je vous redonne donc la requête SQL que j'ai posté précédemment :
    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
      $request=mysql_query('SELECT films.titre as film, films.titreVO, genres.genre,qualites.qualite,collections.collection, acteurs.prenom as act_prenom,acteurs.nom as act_nom, realisateurs.prenom as real_prenom,realisateurs.nom as real_nom,date_sortie,Duree
    				   			     FROM films
    						 	     inner join Genres
    							     ON films.codegenre=genres.codegenre
    								 inner join collections
    								 on films.idcollection=collections.idcollection
    								 inner join qualites
    								 on films.codequalite=qualites.codequalite
    								 inner join film_acteur
    								 on films.idfilm=film_acteur.idfilm
    								 inner join acteurs
    								 on film_acteur.idacteur=acteurs.idacteur
    								 inner join film_realisateur
    								 on films.idfilm=film_realisateur.idfilm
    								 inner join realisateurs
    								 on film_realisateur.idrealisateur=realisateurs.idrealisateur
    							     where films.titre LIKE "%'.$_POST['data'].'%"
    							     order by films.titre');

Discussions similaires

  1. Convertir une requête Acces en MySQL
    Par Creepy78 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 28/02/2006, 16h24
  2. Requête hyerarchique avec MySQL
    Par ingamo dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/02/2006, 21h39
  3. Requête sur DB mysql
    Par Lord_FEFF dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 09/11/2005, 19h16
  4. [SQL]Requêtes like
    Par joquetino dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/10/2005, 18h18
  5. Convertir une requête Access en MySQL
    Par iomega dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/03/2004, 09h47

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