Moteur de recherche php BDD
ryooo
-
ryo -
ryo -
Bonjour,
J'ai crée une table "baselab" avec une table "fichedeprod" qui comprends plusieurs champs ("datefab","operateur","quantite")
Ma question est :
Comment obtenir un moteur de recherche avec un formulaire avec un choix de l'un des champs et taper le mot rechercher pour afficher la ligne tout simplement ?
Je débute dans ce domaine merci de votre compréhension
PS: j'ai trouvé de nombreux exemple mais impossible à faire fonctionner :(
J'ai crée une table "baselab" avec une table "fichedeprod" qui comprends plusieurs champs ("datefab","operateur","quantite")
Ma question est :
Comment obtenir un moteur de recherche avec un formulaire avec un choix de l'un des champs et taper le mot rechercher pour afficher la ligne tout simplement ?
Je débute dans ce domaine merci de votre compréhension
PS: j'ai trouvé de nombreux exemple mais impossible à faire fonctionner :(
A voir également:
- Moteur de recherche php BDD
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Utilitaires
- Pourquoi mon moteur de recherche change tout seul ✓ - Forum Virus
- Consultez le code source de cette page. copiez la ligne qui indique aux moteurs de recherche de ne pas référencer la page. ✓ - Forum Référencement
46 réponses
Bonjour,
Tu peux faire quelque chose comme cela (ceci est indicatif donc a adapter à ton projet)
Tu peux faire quelque chose comme cela (ceci est indicatif donc a adapter à ton projet)
$db = mysql_connect("localhost","root","") or die; mysql_select_db('baselab',$db) or die; //recherche dans la base // tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur" $query = "SELECT * FROM `fichedeprod` WHERE tonChamp LIKE'%".laValeur."%'"; //execution de la requete $result= MYSQL_QUERY($query); //récupération du résultat dans un tableau $res = mysql_fetch_array($result); //écriture en retour //pour chaque resultat foreach ($res as $ro){ //écrit les valeurs echo $ro['leChamps1']; echo $ro['leChamps2']; echo $ro['leChamps3']; //va a la ligne echo "<br/>"; }
En faite il me faudrait un formulaire avec une case Rechercher et lorsque j'écris le mot rechercher, les résultats s'affiche dans un tableau.
Hors cette exemple ne possède pas de formulaire de saisie ^^
Je cherche je cherche....
Hors cette exemple ne possède pas de formulaire de saisie ^^
Je cherche je cherche....
il faut que tu fasse un formulaire html
exemple : tu as la page recherche.php
<form action="traitement.php" method="POST">
< input type="text" name="recherche"/>
< input type="submit" value="recherche"/>
</form>
ensuite sur ta page traitement.php la variable $_POST['recherche'] contiendra la valeur du champs de formulaire
cette même valeur sera celle contenu dans "laValeur" que je t'avais mis dans le petit bout de code avant.
Si tu n'est pas au point niveau html je t'invite à aller suivre un petit cours ici :
https://openclassrooms.com/fr/courses
exemple : tu as la page recherche.php
<form action="traitement.php" method="POST">
< input type="text" name="recherche"/>
< input type="submit" value="recherche"/>
</form>
ensuite sur ta page traitement.php la variable $_POST['recherche'] contiendra la valeur du champs de formulaire
cette même valeur sera celle contenu dans "laValeur" que je t'avais mis dans le petit bout de code avant.
Si tu n'est pas au point niveau html je t'invite à aller suivre un petit cours ici :
https://openclassrooms.com/fr/courses
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon j'ai trouvé un formulaire de recherche qui me plait bien...
<form method="post" action="traitement.php">
<table align="center">
<tr>
<td>Date de fabrication : </td><td><input type="text" name="datefab"></td>
</tr>
<tr>
<td>Référence du produit : </td><td><input type="text" name="refprod"></td>
</tr>
<tr>
<td valign="top">Commande : </td><td><input type="text" name="commande"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="recherche" value="Cherche"></td>
</tr>
<tr>
<td colspan="2" align="center"><small><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</td>
</tr>
</table>
</form>
Mais comment l'adapter au code SQL ?
<form method="post" action="traitement.php">
<table align="center">
<tr>
<td>Date de fabrication : </td><td><input type="text" name="datefab"></td>
</tr>
<tr>
<td>Référence du produit : </td><td><input type="text" name="refprod"></td>
</tr>
<tr>
<td valign="top">Commande : </td><td><input type="text" name="commande"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="recherche" value="Cherche"></td>
</tr>
<tr>
<td colspan="2" align="center"><small><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</td>
</tr>
</table>
</form>
Mais comment l'adapter au code SQL ?
Ton formulaire ici présent envoi les informations sur la page traitement.php, tu créer cette page et tu peut traité les informations ainsi retourné, grâce a la premiere partie du code que je t'ai fourni, teste comme cela et on vera ensemble pour l'adapter à tes besoins ;)
Alors voici tout d'abord mon code pour la page "recherche.php" :
<html>
<title>recherche</title>
<body>
<form method="post" action="traitement.php">
<table align="center">
<tr>
<td>Date de fabrication : </td><td><input type="text" name="datefab"></td>
</tr>
<tr>
<td>Référence du produit : </td><td><input type="text" name="refprod"></td>
</tr>
<tr>
<td valign="top">Commande : </td><td><input type="text" name="commande"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="recherche" value="Cherche"></td>
</tr>
<tr>
<td colspan="2" align="center"><small><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</td>
</tr>
</table>
</form>
</body>
</html>
Pour la page "traitement.php" :
<html>
<title>traitement</title>
<body>
<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;
//recherche dans la base
// tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur"
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".laValeur."%'";
//execution de la requete
$result= MYSQL_QUERY($query);
//récupération du résultat dans un tableau
$res = mysql_fetch_array($result);
//écriture en retour
//pour chaque resultat
foreach ($res as $ro){
//écrit les valeurs
echo $ro['datefab'];
echo $ro['refprod'];
echo $ro['commande'];
//va a la ligne
echo "<br/>";
}
?>
</body>
</html>
Je pense que j'ai mis n'importe quoi :(
Pour rappel j'ai donc une table "fichedeprod" avec des champs (datefab,refprod,commande,operateur,quantite,programme,particularite,annee,semaine,text)
Mais pour commencer juste les 3 premiers champs seront satisfaisant ^^
<html>
<title>recherche</title>
<body>
<form method="post" action="traitement.php">
<table align="center">
<tr>
<td>Date de fabrication : </td><td><input type="text" name="datefab"></td>
</tr>
<tr>
<td>Référence du produit : </td><td><input type="text" name="refprod"></td>
</tr>
<tr>
<td valign="top">Commande : </td><td><input type="text" name="commande"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="recherche" value="Cherche"></td>
</tr>
<tr>
<td colspan="2" align="center"><small><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</td>
</tr>
</table>
</form>
</body>
</html>
Pour la page "traitement.php" :
<html>
<title>traitement</title>
<body>
<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;
//recherche dans la base
// tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur"
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".laValeur."%'";
//execution de la requete
$result= MYSQL_QUERY($query);
//récupération du résultat dans un tableau
$res = mysql_fetch_array($result);
//écriture en retour
//pour chaque resultat
foreach ($res as $ro){
//écrit les valeurs
echo $ro['datefab'];
echo $ro['refprod'];
echo $ro['commande'];
//va a la ligne
echo "<br/>";
}
?>
</body>
</html>
Je pense que j'ai mis n'importe quoi :(
Pour rappel j'ai donc une table "fichedeprod" avec des champs (datefab,refprod,commande,operateur,quantite,programme,particularite,annee,semaine,text)
Mais pour commencer juste les 3 premiers champs seront satisfaisant ^^
Oui tu as compris, c'est ça :)
sauf que les balises html ne sont pas nécéssaire sur le fichier de traitement.
Maitenant il te suffit de remplacer "laValeur" dans la requete par l'element du formulaire que tu veux :
$_POST['refprod'] par exemple.
Ensuite pour faire une recherche sur pleusieurs champs c'est la que cela va se corser ^^! se serais trop simple :p
il va falloir générer la requete dynamiquement en fonction de se qu'a taper l'utilisateur dans le formulaire ...
Exemple :
if (isset($_POST['refprod'])) { //si l'utilisateur a saisie une reference
//alors faire une recherche dans le champs reference
}
if (isset($_POST['datefab'])) { //si l'utilisateur a saisie une date de fabrication
//alors faire une recherche dans le champs date de fabrication
}
etc.
sauf que les balises html ne sont pas nécéssaire sur le fichier de traitement.
Maitenant il te suffit de remplacer "laValeur" dans la requete par l'element du formulaire que tu veux :
$_POST['refprod'] par exemple.
Ensuite pour faire une recherche sur pleusieurs champs c'est la que cela va se corser ^^! se serais trop simple :p
il va falloir générer la requete dynamiquement en fonction de se qu'a taper l'utilisateur dans le formulaire ...
Exemple :
if (isset($_POST['refprod'])) { //si l'utilisateur a saisie une reference
//alors faire une recherche dans le champs reference
}
if (isset($_POST['datefab'])) { //si l'utilisateur a saisie une date de fabrication
//alors faire une recherche dans le champs date de fabrication
}
etc.
Bon tout d'abord je tiens à te remercier de ta patience et de ta gentillesse ^^
Alors pour le moment je lance fait juste pour un champ (Plus simple)
Voila mon code :
<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;
//recherche dans la base
// tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur"
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";
//execution de la requete
$result= MYSQL_QUERY($query);
//récupération du résultat dans un tableau
$res = mysql_fetch_array($result);
//écriture en retour
//pour chaque resultat
foreach ($res as $ro){
//écrit les valeurs
echo $ro['datefab'];
echo $ro['refprod'];
echo $ro['commande'];
//va a la ligne
echo "<br/>";
}
?>
lorsque je tape une recherche dans le champ j'ai une erreur :
Warning: Invalid argument supplied for foreach() in d:\program files\easyphp1-8\www\traitement.php on line 16
Qui correspond à cette ligne : foreach ($res as $ro){
Allé on y est presque :)
Alors pour le moment je lance fait juste pour un champ (Plus simple)
Voila mon code :
<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;
//recherche dans la base
// tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur"
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";
//execution de la requete
$result= MYSQL_QUERY($query);
//récupération du résultat dans un tableau
$res = mysql_fetch_array($result);
//écriture en retour
//pour chaque resultat
foreach ($res as $ro){
//écrit les valeurs
echo $ro['datefab'];
echo $ro['refprod'];
echo $ro['commande'];
//va a la ligne
echo "<br/>";
}
?>
lorsque je tape une recherche dans le champ j'ai une erreur :
Warning: Invalid argument supplied for foreach() in d:\program files\easyphp1-8\www\traitement.php on line 16
Qui correspond à cette ligne : foreach ($res as $ro){
Allé on y est presque :)
Oui cela veut dire qu'il y a un probleme au niveau de la requete,
apres la ligne mysql_query remplace par :
apres la ligne mysql_query remplace par :
if ($result){ //récupération du résultat dans un tableau $res = mysql_fetch_array($result); //écriture en retour //pour chaque resultat foreach ($res as $ro){ //écrit les valeurs echo $ro['datefab']; echo $ro['refprod']; echo $ro['commande']; //va a la ligne echo "<br/>"; } } else echo "requete non valide<br/>".$query; ?>
Re bonjour ;)
oui mais print_r($res); à la place du foreach vire le, je pense qu'il ne trouve pas d'éléments dans le tableau c'est pour ça que je voudrais voir le print_r($res); :D
oui mais print_r($res); à la place du foreach vire le, je pense qu'il ne trouve pas d'éléments dans le tableau c'est pour ça que je voudrais voir le print_r($res); :D
Oui re bonjour^^
Alors voici mon code :
<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;
//recherche dans la base
// tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur"
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";
//execution de la requete
$result= MYSQL_QUERY($query);
if ($result){
//récupération du résultat dans un tableau
$res = mysql_fetch_array($result);
//écriture en retour
//pour chaque resultat
print_r($res);
}
else echo "requete non valide<br/>".$query;
?>
Lorsque je lance la recherche je n'est plus d'erreur mais une page blanche ^^
Alors voici mon code :
<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;
//recherche dans la base
// tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur"
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";
//execution de la requete
$result= MYSQL_QUERY($query);
if ($result){
//récupération du résultat dans un tableau
$res = mysql_fetch_array($result);
//écriture en retour
//pour chaque resultat
print_r($res);
}
else echo "requete non valide<br/>".$query;
?>
Lorsque je lance la recherche je n'est plus d'erreur mais une page blanche ^^
ok alors avant le if ($result)
fais echo $query , ensuite tu copie le resultat et tu teste la requete directement dans mysql.
copie moi ensuite la requete et se que te retourne mysql :)
fais echo $query , ensuite tu copie le resultat et tu teste la requete directement dans mysql.
copie moi ensuite la requete et se que te retourne mysql :)
Alors sans etre directement sous Mysql le résultat pour une recherche d'une refpro "icn 535" :
SELECT * FROM `fichedeprod` WHERE datefab LIKE'%icn535%'
Et directement sous mysql :
requête SQL: Documentation
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST[ 'refprod']. "%'"
MySQL a répondu:Documentation
#1064 - Erreur de syntaxe pr�s de '$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_PO' � la ligne 1
Pour info sous sql j'ai tapé juste ça :
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";
$result= MYSQL_QUERY($query);
echo $query;
if ($result){
$res = mysql_fetch_array($result);
print_r($res);
}
else echo "requete non valide<br/>".$query;
SELECT * FROM `fichedeprod` WHERE datefab LIKE'%icn535%'
Et directement sous mysql :
requête SQL: Documentation
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST[ 'refprod']. "%'"
MySQL a répondu:Documentation
#1064 - Erreur de syntaxe pr�s de '$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_PO' � la ligne 1
Pour info sous sql j'ai tapé juste ça :
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";
$result= MYSQL_QUERY($query);
echo $query;
if ($result){
$res = mysql_fetch_array($result);
print_r($res);
}
else echo "requete non valide<br/>".$query;
Il faut que tu passe sous mysql :
SELECT * FROM `fichedeprod` WHERE datefab LIKE'%icn535%'
pas
SELECT * FROM `fichedeprod` WHERE datefab LIKE'$_POST['tavar']%'
:)
SELECT * FROM `fichedeprod` WHERE datefab LIKE'%icn535%'
pas
SELECT * FROM `fichedeprod` WHERE datefab LIKE'$_POST['tavar']%'
:)
Oui pardon regarde 2 réponse plus haut je l'ai déjà fait
Et comme réponse j'ai ça :
Votre requête SQL a été exécutée avec succès (traitement: 0.0017 sec.)
requête SQL:
SELECT *
FROM `fichedeprod`
WHERE datefab LIKE '%icn535%'
LIMIT 0 , 30
En tout cas bravo pour ta patience, combien de temps tu vas tenir ^^?
LOL
Et comme réponse j'ai ça :
Votre requête SQL a été exécutée avec succès (traitement: 0.0017 sec.)
requête SQL:
SELECT *
FROM `fichedeprod`
WHERE datefab LIKE '%icn535%'
LIMIT 0 , 30
En tout cas bravo pour ta patience, combien de temps tu vas tenir ^^?
LOL
T'as base de donnée est vide, donc la requete ne retourne aucun resultat, donc le foreach marche pas :)
essai quelque chose comme ça ;)
je tiendrais jusqu'a ce que tu arrive à ce que tu veux :)
<?php $db = mysql_connect("localhost","root","") or die; mysql_select_db('baselab',$db) or die; //recherche dans la base // tu récupère tous les champs dans la base ou le champs "tonChamp" contient "laValeur" $query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'"; //execution de la requete $result= MYSQL_QUERY($query); if ($result){ //récupération du résultat dans un tableau $res = mysql_fetch_array($result); //écriture en retour //pour chaque resultat if (!empty($res)){ echo "la requete renvoi quelque chose"; } else{ echo "la requete ne renvoi rien"; } } else echo "requete non valide<br/>".$query; ?>
essai quelque chose comme ça ;)
je tiendrais jusqu'a ce que tu arrive à ce que tu veux :)