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

ryo
 
J'ai donc modifié l'erreur :

$query = "SELECT * FROM `fichedeprod` WHERE refprod LIKE'%".$_POST['refprod']."%'";

Aucun changement !

Oui dans ma base de donnée j'ai mis 5 ou 6 lignes pour tous les champs et j'arrive à les faire afficher avec un tableau en PHP.
0
Utilisateur anonyme
 
peut tu m'envoyer un export sql de ta table ficheprod stp :)

je vais regarder de chez moi parce que la on avance pas ;)
0
ryo
 
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- https://www.phpmyadmin.net/
--
-- Serveur: localhost
-- Généré le : Mercredi 26 Mars 2008 à 13:38
-- Version du serveur: 4.1.9
-- Version de PHP: 4.3.10
--
-- Base de données: `baselab`
--

-- --------------------------------------------------------

--
-- Structure de la table `fichedeprod`
--

CREATE TABLE `fichedeprod` (
`id` int(11) NOT NULL auto_increment,
`datefab` date NOT NULL default '0000-00-00',
`refprod` varchar(11) NOT NULL default '',
`commande` int(11) NOT NULL default '0',
`operateur` varchar(11) NOT NULL default '',
`quantite` int(11) NOT NULL default '0',
`programme` varchar(11) NOT NULL default '',
`particularite` varchar(11) NOT NULL default '',
`annee` int(11) NOT NULL default '0',
`semaine` int(11) NOT NULL default '0',
`text` varchar(11) NOT NULL default '',
KEY `id` (`id`),
KEY `refprod` (`refprod`),
KEY `commande` (`commande`),
KEY `operateur` (`operateur`),
KEY `quantite` (`quantite`),
KEY `programme` (`programme`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

--
-- Contenu de la table `fichedeprod`
--

INSERT INTO `fichedeprod` VALUES (11, '2007-03-03', '3511', 8816, 'rvalente', 54, 'dvs2', 'aucune', 0, 0, '');
INSERT INTO `fichedeprod` VALUES (15, '2005-02-04', 'icn48', 5496, 'eferretto', 51, 'fr9', 'aucune', 0, 0, '');
INSERT INTO `fichedeprod` VALUES (12, '2006-12-24', 'icn518', 5896, 'rvalente', 57, 'fr4', 'aucune', 0, 0, '');
INSERT INTO `fichedeprod` VALUES (13, '2008-01-05', 'icn7848', 576, 'rvalente', 71, 'fr7', 'aucune', 0, 0, '');
INSERT INTO `fichedeprod` VALUES (14, '2008-03-07', 'icn71848', 5476, 'eferretto', 41, 'fr8', 'aucune', 0, 0, '');
0
Utilisateur anonyme
 
Essai comme ça :

<?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 refprod 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)){
		//écrit les valeurs
		echo "<table border='1px;'><tr><td>date</td><td>reference</td><td>commande</td></tr>";
		echo "<tr>";
		echo "<td>".$res['datefab']."</td>";
		echo "<td>".$res['refprod']."</td>";
		echo "<td>".$res['commande']."</td>";
		echo "</tr></table>";
		//va a la ligne
		echo "<br/>";
	}
	else{
		echo "la requete ne renvoi rien".$query;
	}
}
else echo "requete non valide<br/>".$query;

?> 


En fait le foreach fait un peu nimp's ce que tu as la ça te recupère qu'un resultat, le but etant d'avoir tous les resultats ...
faut regardé un truc sur le foreach je regarde dans l'aprem' entre deux ;)
0

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

Posez votre question
ryo
 
Je corrige mon commentaire lorsque je modifie la ligne :

$query = "SELECT * FROM `fichedeprod` WHERE refprod LIKE'%".$_POST['refprod']."%'";

La réponse lorsque je recherche une refprod :

la requete renvoi quelque chose
0
ryo
 
Whaou merci ça commence à ressembler à quelquechose ^^
0
Utilisateur anonyme
 
oui mais la si tu as deux poduits qui ont la même reference et bien il ne va t'en afficher qu'un
l'idéal serait qu'il t'affiche une ligne par produit :)
0
ryo
 
Ah oui je viens de voir ce probleme
Sinon j'ai retouché un peu le code pour qu'il soit un peu plus beau pour l'affichage :
<?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 refprod 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)){
//écrit les valeurs
echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Date de fabrication</u></b></td>';
echo '<td bgcolor="#669999"><b><u>référence produit</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Commande</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Opérateur</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Quantité</u></b></td>' ;
echo '<td bgcolor="#669999"><b><u>Programme</u></b></td>' ;
echo '<td bgcolor="#669999"><b><u>Particularite</u></b></td>' ;
echo '</tr>'."\n";
echo "<tr>";
echo "<td>".$res['datefab']."</td>";
echo "<td>".$res['refprod']."</td>";
echo "<td>".$res['commande']."</td>";
echo "</tr></table>";
//va a la ligne
echo "<br/>";
}
else{
echo "la requete ne renvoi rien".$query;
}
}
else echo "requete non valide<br/>".$query;

?>
0
Utilisateur anonyme
 
Je t'ai fais une structure de base rapide histoire que tu vois se que cela peut donner, libre à toi de mlodifier à ta guise :D

Juste un petit conseil, la methode que tu à utilisé est obsolète, privilégie l'utilisation de fichier .CSS afin de jouer sur le style de ta page grâce a des classes et des id.

si tu cherches un cour rdz ici :https://openclassrooms.com/fr/courses
0
ryo
 
Donc ce qu'il nous reste à faire :

-afficher une ligne par produit (si il y a le m^me référence ou autre)

-Modifier le code pour une recherche dynamique ( plusieurs champs)

Encore merci
Tu m'aides vraiment à l'avancement de mon projet ^^
0
Utilisateur anonyme
 
Pour ta requete dynamique essai ça ;)

<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;

$nb = 0;
$where ="";
if (isset($_POST['refprod']) && $_POST['refprod'] != ""){
	if($nb == 0) {
		$where .="WHERE refprod LIKE'%".$_POST['refprod']."%'";
		$nb=1;
	}
	else $where .=" AND refprod LIKE'%".$_POST['refprod']."%'";
}
if (isset($_POST['datefab']) && $_POST['datefab'] != ""){
	if($nb == 0) {
		$where .="WHERE datefab LIKE'%".$_POST['datefab']."%'";
		$nb=1;
	}
	else $where .=" AND datefab LIKE'%".$_POST['datefab']."%'";
}
if (isset($_POST['commande']) && $_POST['commande'] != ""){
	if($nb == 0) {
		$where .="WHERE commande LIKE'%".$_POST['commande']."%'";
		$nb=1;
	}
	else $where .=" AND commande LIKE'%".$_POST['commande']."%'";
}

//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;
//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)){
		//écrit les valeurs
		echo "<table border='1px;'><tr><td>date</td><td>reference</td><td>commande</td></tr>";
		echo "<tr>";
		echo "<td>".$res['datefab']."</td>";
		echo "<td>".$res['refprod']."</td>";
		echo "<td>".$res['commande']."</td>";
		echo "</tr></table>";
		//va a la ligne
		echo "<br/>";
	}
	else{
		echo "la requete ne renvoi rien".$query;
	}
}
else echo "requete non valide<br/>".$query;

?> 
0
ryo
 
La recherche dynamique marche à la perfection ^^ :) :) :)
0
Utilisateur anonyme
 
J'éspère que tu saisi bien le principe, en fait on construit la requete à l'aide de chaine de caractère.
Celle ci est ecrite en mise a jour en fonction de chaque parametre envoyé par le formulaire.
0
ryo
 
Oui je commence à saisir le principe
J'ai d'ailleurs modifié tous le code pour rechercher dans tous mes champs et ça marche !!!!!

Manque plus qu'a afficher plusieurs ligne qui ont les même valeur !!
0
Utilisateur anonyme
 
Tiens change tout ton code par ça :)

<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;


if (isset($_POST['refprod']) || isset($_POST['datefab']) || isset($_POST['commande'])){
	$nb = 0;
	$where ="";
	if (isset($_POST['refprod']) && $_POST['refprod'] != ""){
		if($nb == 0) {
			$where .="WHERE refprod LIKE'%".$_POST['refprod']."%'";
			$nb=1;
		}
		else $where .=" AND refprod LIKE'%".$_POST['refprod']."%'";
	}
	if (isset($_POST['datefab']) && $_POST['datefab'] != ""){
		if($nb == 0) {
			$where .="WHERE datefab LIKE'%".$_POST['datefab']."%'";
			$nb=1;
		}
		else $where .=" AND datefab LIKE'%".$_POST['datefab']."%'";
	}
	if (isset($_POST['commande']) && $_POST['commande'] != ""){
		if($nb == 0) {
			$where .="WHERE commande LIKE'%".$_POST['commande']."%'";
			$nb=1;
		}
		else $where .=" AND commande LIKE'%".$_POST['commande']."%'";
	}

	//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;
	//execution de la requete
	$result= MYSQL_QUERY($query);
	if ($result){
		echo "<table border='1px;'><tr><td>date</td><td>reference</td><td>commande</td></tr>";
		echo "<tr>";
		//récupération du résultat dans un tableau
		while ($res = mysql_fetch_array($result, MYSQL_ASSOC)) {
		//écriture en retour
		//pour chaque resultat
		   if (!empty($res)){
				//écrit les valeurs
				echo "<td>".$res['datefab']."</td>";
				echo "<td>".$res['refprod']."</td>";
				echo "<td>".$res['commande']."</td>";
				echo "</tr>";
			}
			else{
				echo "la requete ne renvoi rien".$query;
			}
		}
		echo "</table>";
	}
	else echo "requete non valide<br/>".$query;
}
else echo "Veuillez spécifier une recherche!";

?> 
0
ryo
 
Ca marche !!!!
Je vais essayer de comprendre en tout cas car là je suis largué ^^

Merciiiiiiii
0
Utilisateur anonyme
 
Si tu as un truc pas clair demande par contre si tu pige pas une fonction php rdv ici --> https://www.php.net/
0
ryo
 
Mon code modifier à ma sauce :

<?php
$db = mysql_connect("localhost","root","") or die;
mysql_select_db('baselab',$db) or die;


if (isset($_POST['refprod']) || isset($_POST['datefab']) || isset($_POST['commande'])){
$nb = 0;
$where ="";
if (isset($_POST['refprod']) && $_POST['refprod'] != ""){
if($nb == 0) {
$where .="WHERE refprod LIKE'%".$_POST['refprod']."%'";
$nb=1;
}
else $where .=" AND refprod LIKE'%".$_POST['refprod']."%'";
}
if (isset($_POST['datefab']) && $_POST['datefab'] != ""){
if($nb == 0) {
$where .="WHERE datefab LIKE'%".$_POST['datefab']."%'";
$nb=1;
}
else $where .=" AND datefab LIKE'%".$_POST['datefab']."%'";
}
if (isset($_POST['commande']) && $_POST['commande'] != ""){
if($nb == 0) {
$where .="WHERE commande LIKE'%".$_POST['commande']."%'";
$nb=1;
}
else $where .=" AND commande LIKE'%".$_POST['commande']."%'";
}
if (isset($_POST['operateur']) && $_POST['operateur'] != ""){
if($nb == 0) {
$where .="WHERE operateur LIKE'%".$_POST['operateur']."%'";
$nb=1;
}
else $where .=" AND operateur LIKE'%".$_POST['operateur']."%'";
}
if (isset($_POST['quantite']) && $_POST['quantite'] != ""){
if($nb == 0) {
$where .="WHERE quantite LIKE'%".$_POST['quantite']."%'";
$nb=1;
}
else $where .=" AND quantite LIKE'%".$_POST['quantite']."%'";
}
if (isset($_POST['programme']) && $_POST['programme'] != ""){
if($nb == 0) {
$where .="WHERE programme LIKE'%".$_POST['programme']."%'";
$nb=1;
}
else $where .=" AND programme LIKE'%".$_POST['programme']."%'";
}
if (isset($_POST['particularite']) && $_POST['particularite'] != ""){
if($nb == 0) {
$where .="WHERE commande LIKE'%".$_POST['particularite']."%'";
$nb=1;
}
else $where .=" AND particularite LIKE'%".$_POST['particularite']."%'";
}

//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;
//execution de la requete
$result= MYSQL_QUERY($query);
if ($result){

echo "<tr>";
//récupération du résultat dans un tableau
while ($res = mysql_fetch_array($result, MYSQL_ASSOC)) {
//écriture en retour
//pour chaque resultat
if (!empty($res)){
//écrit les valeurs
echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Date de fabrication</u></b></td>';
echo '<td bgcolor="#669999"><b><u>référence produit</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Commande</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Opérateur</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Quantité</u></b></td>' ;
echo '<td bgcolor="#669999"><b><u>Programme</u></b></td>' ;
echo '<td bgcolor="#669999"><b><u>Particularite</u></b></td>' ;
echo '</tr>'."\n";
echo "<tr>";
echo "<td>".$res['datefab']."</td>";
echo "<td>".$res['refprod']."</td>";
echo "<td>".$res['commande']."</td>";
echo "<td>".$res['operateur']."</td>";
echo "<td>".$res['quantite']."</td>";
echo "<td>".$res['programme']."</td>";
echo "<td>".$res['particularite']."</td>";
echo "</tr></table>";
//va a la ligne
echo "<br/>";
}
else{
echo "la requete ne renvoi rien".$query;
}
}
echo "</table>";
}
else echo "requete non valide<br/>".$query;
}
else echo "Veuillez spécifier une recherche!";

?>


Parfait je regarde de plus prés ça ce soir
En tout cas merci pour ta patience et je te tiens au jus demain :) :) :) :) :) :)
0
Utilisateur anonyme
 
ça marche tu n'oublieras pas de modifier la test en conséquence :

//si existe $_POST['refprod'] OU $_POST['datefab'] OU $_POST['commande'] OU t'es autre champs que tu as rajouté ;)
if (isset($_POST['refprod']) || isset($_POST['datefab']) || isset($_POST['commande']))
0
ryo
 
Tout marche à la perfection

Il me reste encore des petites choses à faire :

-Par exemple dans le menue Recherche j'aimerais obtenir un menu déroulant pour la partie "Opérateur" avec les noms d'opérateur pour éviter de le taper à chaque fois !

-Et aussi mais beaucoup plus compliquer, dans la meme table il y a 3 champs qui sont : "date""semaine""text" qui corresponde une fois assemblé à un numéro de série.
Hors ce numéro doit être crée sur le site que je crée par exemple pour chaque fiche qu'il y ai un menu déroulant pour choisir l'année la semaine et le TEXT/ou numéro pour chaque fiche de prod

Je ne sais pas si je me suis bien fait comprendre ^^

C'est possible tu crois pour le 2eme truc à faire??
0