Résolu Problème de création d'un petit module recherche. Que faire ?

Solutions (13)
Tags :
  • Creation
  • MySQL
  • Programmation
|
Bonjour,
Voila comme dit dans le titre j'essaye de créer un petit module de recherche très simple.
Je débute un peu en php donc je rencontre quelque difficulté.

Donc j'ai pensé à quelques chose qui est peut être bon ou pas bon mais je n'arrive pas à l'appliquer. Je m'explique avec le code:

<?php

mysql_connect("localhost", "root", "xxx");
mysql_select_db("nom_db");

echo "<form method=\"get\">
<input name=\"$titre\" type=\"text\"/>
<input type=\"submit\" value=\"rechercher\" name=\"submit\" />
</form>";

$reponse = mysql_query("SELECT * FROM lien_film WHERE titre='$titre' ");

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<p><?php echo $donnees['titre']; ?></p>

<?php
}
?>

Le but étant de trouvé un film répertorié dans ma base de donnée en entrant le titre dans le petit formulaire.
Donc dans un premier temps, on remplie le formulaire qui ne comporte qu'un seul champ: titre.

Si je suis mon idée , je voudrais que le titre écris et recherché par l'utilisateur soit égal à $titre

et ensuite je fini par recherché le titre = $titre dans ma base de donnée correspondant.

Mais je en vois pas ou ça bloque en faite.

Merci d'avance de votre aide.

PS: Je commence seulement par chercher le titre dans une seul base de donné mais mon but final et de faire en sorte de choisir de rechercher un titre dans la base de donné 1 ou 2 ( choix que l'on pourra faire avec un menu déroulant ) Donc si vous avez des idées n'hésitez surtout pas svp
  • Meuniers a édité ce message
Contenus similaires
Meilleure solution
partage
|
Tu peux aussi plutôt utiliser la requête sql suivante
mysql_query("SELECT * FROM lien_film WHERE titre LIKE '%".$titre."%'");
Ca te permet de n'écrire qu'une partie du titre,
Par exemple du écrit "a"
et le script te liste tous les films contenant un a
si tu veux juste les films commençant par une lettre à la fin de la requête tu remplace par LIKE '".$titre."%'"
Le pourcent veut dire "n'importe quoi"
avec la première requête tu met par exemple dans le champs titre "seigneur"
et le titre te renvoi par exemple
Le seigneur des anneaux 1
Le seigneur des anneaux 2
Le seigneur des anneaux 3
Le seigneur de downtown
En supposant que ces films soient dans la base de données.
Voilà pour la clause LIKE qui n'est qu'un résumé de ses possibilités.
  • Commenter cette solution |
Score
0
òh
òi
, Ex-AdMiN |
Non mais MyIsam c'est totalement différent de PhpMyAdmin hein. D'ailleurs si tu regardes dans PhpMyAdmin la structure de tes tables tu devrais voir afficher Engine=MyISAM.

Dans ton cas, tu ne fais pas une recherche mais un listing plus classique. Genre

  1. SELECT * FROm FILM ORDER BY id DESC LIMIT 50


Qui va te ressortir les 50 dernier film que tu as stocké dans ta base.
  • Commenter cette réponse |
Score
0
òh
òi
|
non je n'utilise pas MyIsam mais Phpmyadmin par contre je comprend pas trop ce code la. J'aurais une dernière question qui me pose soucis.
Comment affiché la liste des film au debut ( ca je sais faire ) et faire en sorte quel se retire apres une recherche. En gros, lancer une recherche au demarrage de la page comprenant tout les films.
  • Commenter cette réponse |
Score
0
òh
òi
, Ex-AdMiN |
Dans la catégorie beaucoup mieux que le LIKE, MySQL implémente une méthode de recherche par texte entier. Le code commence à dater un peu et est bien déplacé par des services tiers (comme le logo de mon avatar).

C'est plutôt simple à faire, il faut créer un index full-text (aka texte entier) que tu trouveras rapidement sous PhpMyAdmin.

Ensuite ta requête ressemblera à
  1. SELECT * FROM matable WHERE MATCH(champ1, champ2, champ3) MATCH('+mot1 +mot2 -pascemot');


C'est plutôt pratique, au final ça ressemble à un vrai moteur de recherche. Inconvénient, il faut que ta table utilise le moteur MyIsam obligatoirement (à tous les coup si tu es débutant c'est le cas) et il faut que les mots fassent plus de 3 caractères.

Pour info, la recherche full-text est beaucoup beaucoup plus légère et rapide que LIKE qui est normalement à proscrire de toute application web.
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui je vois mais en faite le site a deja un an et je le remet sur pied correctement. Ensuite le code fonctionne maintenant. De plus ca m'a permis de faire un champ de recherche par initiale , par table différente ( film et série ) ainsi que catégorie.
  • Commenter cette réponse |
Score
0
òh
òi
|
C'est quand même bizarre d'avoir une table pour les séries et une table pour les films.
J'aurai plutôt fait genre un champ de plus avec type_film dans la même table.
Enfin je ne connais pas les contraintes de ton système.
Par contre si tu es débutant, n'oublie pas que le premier outils du programmeur est la feuille de papier et le crayon surtout pour réaliser la structure de ta base de données.
Bonne continuation.
  • Commenter cette réponse |
Score
0
òh
òi
|
  1. if ($_POST['selection'] == "BDD1") {
  2. la requête
  3. } else {
  4. if ($_POST['selection'] == "BDD2") {
  5. l'autre requête
  6. }
  7. }


Ou directement sélectionné la bdd avec le post de la liste déroulante...
  1. $choix_BDD = $_POST['selection'];
  2. $reponse = mysql_query("SELECT * FROM $choix_BDD WHERE titre LIKE %'$titre'% " );
  • Commenter cette réponse |
Score
0
òh
òi
|
je voulais dire un changement de table pardon
  • Commenter cette réponse |
Score
0
òh
òi
|
résultat : Ca fonctionne parfaitement bien. Vraiment un grand merci à vous.

Juste pour que ca soit un peu plus correct j'aurais voulu savoir en ajoutant un champ dans le formulaire sous forme de liste déroulante dans lequel j'aurais le choix entre des recherches dans les séries ou dans les films, comment faire pour changer la base de donné dans laquel ca recherche:

Si FILM selectionné dans menu déroulant alors ca affiche ca

$reponse = mysql_query("SELECT * FROM lien_film WHERE titre LIKE %'$titre'% ");

Si Série alors :

$reponse = mysql_query("SELECT * FROM list_serie WHERE titre LIKE %'$titre'% ");
  • Commenter cette réponse |
Score
0
òh
òi
|
Rectification : Ca ne trouve que les films écrit seulement en lettre ( sans chiffre ) et en un seul mot.
  • Commenter cette réponse |
Score
0
òh
òi
|
Ah j'ai trouvé où le placé.
Voila j'ai presque réussi mais par contre la recherche se fait par titre exacte. Au lieu de prendre tout les titre contenant le mot-clé marqué. Et de plus, ça ne trouve qu'un seul film sur les 41 que j'ai entré ( je les ai pas tous essayé bien sur )

<?php

mysql_connect("localhost", "root", "xxxx");
mysql_select_db("NomBdd");

echo "<form method=\"post\" action=\"list_film.php\">
<input name=\"titre\" type=\"text\"/>
<input type=\"submit\" value=\"rechercher\" name=\"submit\" />
</form>";

$titre = $_POST['titre'];
$reponse = mysql_query("SELECT * FROM lien_film WHERE titre='$titre' ");

while ($donnees = mysql_fetch_array($reponse) )
{
?>
<p><?php echo $donnees['titre']; ?></p>
<?php } ?>

Ce code est donc presque achevé mais il manque un petit truc. Saurais-tu me dire quoi ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour et tout d'abord merci de ta réponse.

J'ai bien remplacer name=\"titre\" et ajouter ACTION

Par contre je ne vois pas où ajouter $titre = $_POST['titre'];

Si tu pouvais juste me préciser ça.

  • Commenter cette réponse |
Score
0
òh
òi
|
  1. <input name=\"titre\" type=\"text\" />


Puis tu peux utiliser <form method=\"post\" ACTION=\"???\">

  1. $titre = $_POST['titre'];
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS