Moteur de recherche php BDD

ryooo -  
 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 :(

46 réponses

ryoooo
 
help
0
Utilisateur anonyme
 
Bonjour,
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/>";
}
0
ryoooo
 
MERCI de ta réponse rapide

Je test ça de suite et je tiens au courant ce topic ;)
0
ryoooo
 
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....
0
Utilisateur anonyme
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ryoooo
 
Merciiiiiiii

Je test ça cet aprés midi ^^
0
ryoooo
 
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 ?
0
Utilisateur anonyme
 
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 ;)
0
ryoooo
 
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 ^^
0
Utilisateur anonyme
 
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.
0
ryoooo
 
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 :)
0
Utilisateur anonyme
 
Oui cela veut dire qu'il y a un probleme au niveau de la requete,

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;
?>
0
ryoooo
 
Maintenant erreur:
Warning: Invalid argument supplied for foreach() in d:\program files\easyphp1-8\www\traitement.php on line 17

qui correspond encore à cette ligne :
foreach ($res as $ro){



Je vais craquer ^^
0
Utilisateur anonyme
 
Mais non c'est rien , fais un print_r($res); et copie moi le resultat ;)
0
ryo
 
pardon mais comment faire un : print_r($res);

J'ai essayer de le mettre a la fin du code juste avant" ?>" mais j'ai toujours la meme erreur lorsque je tape dans la recherche une reference.
0
Utilisateur anonyme
 
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
0
ryo
 
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 ^^
0
Utilisateur anonyme
 
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 :)
0
ryo
 
je veins de taper directement sous Mysql :

SELECT * FROM `fichedeprod` WHERE datefab LIKE'%icn535%'

En réponse j'au eu ça :

Votre requête SQL a été exécutée avec succès (traitement: 0.0007 sec.)
requête SQL:
SELECT *
FROM `fichedeprod`
WHERE datefab LIKE '%icn535%'
LIMIT 0 , 30
0
ryo
 
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;
0
Utilisateur anonyme
 
Il faut que tu passe sous mysql :
SELECT * FROM `fichedeprod` WHERE datefab LIKE'%icn535%'

pas
SELECT * FROM `fichedeprod` WHERE datefab LIKE'$_POST['tavar']%'

:)
0
ryo
 
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
0
Utilisateur anonyme
 
T'as base de donnée est vide, donc la requete ne retourne aucun resultat, donc le foreach marche pas :)
<?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 :)
0
ryo
 
Bon alors j'ai modifié mon fichier php comme ci -dessus
Lorsque je tape une refprod dans la recherche le résultat:

la requete ne renvoi rien


Lorsque je tape rien dans la recherche le résultat :

la requete renvoi quelque chose
0
Utilisateur anonyme
 
Oui c'est tout a fais ce que je te dis :)

regarde dans la requete j'ai pas fais attention, ya datefab au lieu de reference :
$query = "SELECT * FROM `fichedeprod` WHERE datefab LIKE'%".$_POST['refprod']."%'";

y'a t'il des informations dans ta base de données?
0