Recherche dans une table sql à partir des mots clés générés

Mammouth du PHP | 687 Messages

23 févr. 2011, 23:41

Bonsoir,
est-ce que quelqu'un sait comment je peux lancer une recherche sur une table sql à partir d'un résultat de recherche...
Exemple :
Je lance une recherche avec le formulaire PHP ci dessous par exemple, une fiche apparaît avec plusieurs informations envoyées par la base sql...
Parmis ces informations se trouvent un espace : "MOTS ClES", ce que je souhaite faire c'est réutiliser ces mots clés avec un hyperlien pour relancer une recherche... Par exemple dans les mots clés il y a "volet en bois", je souhaite que sur volet en bois il y ait un lien qui lance dans la table activité une recherche des volets en bois...

Merci par avance...
<?php

// Moteur de recherche
// Le mot est entré dans 1 formulaire puis la recherche se fait
// sur la table avec LIKE %$query%
// $recherche est fourni par le formulaire

// Le formulaire:
?> <html>
<form method="POST" action=""> 
Rechercher un mot : <input type="text" name="recherche">
<input type="SUBMIT" value="Search!"> 
</form>
</html> <?php

// Récupère la variable
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
// la requete mysql
$sql = mysql_query(
"SELECT colonne1, colonne2 FROM votretable WHERE colonne1 LIKE %$recherche%" .
" OR colonne2 LIKE %$recherche%") or die (mysql_error());

// affichage du résultat
while(list($colonne1, $colonne2)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$colonne1.', '.$colonne2.' <br />';
}

?>


Eléphant du PHP | 447 Messages

24 févr. 2011, 01:50

Hello,

génère tes liens dans ta boucle:
<?php
// affichage du résultat
while(list($colonne1, $colonne2)=mysql_fetch_array($sql)){
echo '<a href="./recherche.php?col1='.$colonne1.'&col2='.$colonne2.'" title="Lancer une nouvelle recherche">'.$colonne1.', '.$colonne2.'</a>';
}
?>
Probably (only a) Human Problem?

ViPHP
ViPHP | 5462 Messages

24 févr. 2011, 01:55

Hello,

génère tes liens dans ta boucle:
<?php
// affichage du résultat
while(list($colonne1, $colonne2)=mysql_fetch_array($sql)){
echo '<a href="./recherche.php?col1='.$colonne1.'&col2='.$colonne2.'" title="Lancer une nouvelle recherche">'.$colonne1.', '.$colonne2.'</a>';
}
?>
plutôt mysql_fetch_assoc non ?

Mammouth du PHP | 687 Messages

24 févr. 2011, 02:08

Merci.

je viens de regarder mais je n'arrive pas à l'adapter à ce résultat... Peux-tu m'aider stp..?

Merci beaucoup!
<?php if ($aff_donnee_entreprise["mots_cles"]) { ?>
<h5 style="color:#1e297c"><b><u>Mots Cl&eacute;s</u></b></h5>
<ul>
<li style="margin-left:-25px;"><b class="titre">Mots Cl&eacute;s principaux : </b><font size="2" face="verdana"> <?php echo stripslashes($aff_donnee_entreprise["mots_cles"]); ?></font></li>
</ul>
<?php } ?>
Les mots clés correspondent aux activités de l'entreprise...

Ma connexion à la base pour lancer une recherche :
$conn = db_connect();
  	$sql = "SELECT * 
	FROM entreprises_coordonnees
	LEFT JOIN entreprises_dossiers ON entreprises_dossiers.num_client=entreprises_coordonnees.num_client
	WHERE activite like '%".$activite."%' AND code_postal like '%".$code_postal."%' AND mots_cles like '%".$mots_cles."%' AND mots_cles_option like '%".$mots_cles_option."%'"; 
  	$resultat = mysql_query($sql, $conn);
  	$result = mysql_query($sql, $conn);
Merci

Eléphant du PHP | 447 Messages

24 févr. 2011, 07:46

plutôt mysql_fetch_assoc non ?
Je m'étais pas posé la question vu que j'utilise jamais la fonction list...

Sur la doc php y a un exemple avec mysql_fetch_row

http://fr.php.net/manual/fr/function.list.php

Merci pour la remarque stealth ;)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
je viens de regarder mais je n'arrive pas à l'adapter à ce résultat... Peux-tu m'aider stp..?
<?php if ($aff_donnee_entreprise["mots_cles"]) { ?>
<h5 style="color:#1e297c"><b><u>Mots Cl&eacute;s</u></b></h5>
<ul>
<li style="margin-left:-25px;"><b class="titre">Mots Cl&eacute;s principaux : </b><font size="2" face="verdana"> <?php echo stripslashes($aff_donnee_entreprise["mots_cles"]); ?></font></li>
</ul>
<?php } ?>
Est-ce que $aff_donnee_entreprise résulte de la requête que tu donnes après? Comment crées-tu ton tableau contenant $aff_donnee_entreprise, comme dans le code de ton 1er post?

Par ailleurs pourquoi tu fais 2 mysql_query avec la chaine $sql?
Ma connexion à la base pour lancer une recherche :
$resultat = mysql_query($sql, $conn);
$result = mysql_query($sql, $conn);

Je te propose ça, en considérant que tu veux générer des liens pour la recherche à partir du contenu de la colonne mots_cles de ta table (et en considérant aussi que ce que contient ta variable $sql est correct):
$sql = mysql_query("SELECT * 
	FROM entreprises_coordonnees
	LEFT JOIN entreprises_dossiers ON entreprises_dossiers.num_client=entreprises_coordonnees.num_client
	WHERE activite like '%".$activite."%' AND code_postal like '%".$code_postal."%' AND mots_cles like '%".$mots_cles."%' 
        AND  mots_cles_option like '%".$mots_cles_option."%'"); 

while ($donnees = mysql_fetch_array($sql)) {

    echo '<a href="./recherche.php?motscles='.urlencode($donnees['mot_cles']).'" title="Lancer une nouvelle recherche">'.stripslashes($donnees['mot_cles']).'</a>';

}
En complément voici la doc php sur la fonction urlencode dont tu auras besoin dans ce cas (regarde les exemples sur la page, ça t'aidera):

http://fr.php.net/manual/fr/function.urlencode.php
Probably (only a) Human Problem?

Mammouth du PHP | 687 Messages

24 févr. 2011, 12:10

En fait ça se présente comme ça lorsque je lance une recherche
$conn = db_connect();
  	$sql = "SELECT * 
	FROM entreprises_coordonnees
	LEFT JOIN entreprises_dossiers ON entreprises_dossiers.num_client=entreprises_coordonnees.num_client
	WHERE activite like '%".$activite."%' AND code_postal like '%".$code_postal."%' AND mots_cles like '%".$mots_cles."%' AND mots_cles_option like '%".$mots_cles_option."%'"; 
  	$resultat = mysql_query($sql, $conn);
  	$result = mysql_query($sql, $conn);
AFFICHAGE DU RESULTAT
while ($active = mysql_fetch_array($resultat)) {
		
	  		echo '<li><a href=\'afficher_resultat.php?nom_entreprise='.stripslashes(mb_strtoupper($active[nom_entreprise])).'\'>'.mb_strtoupper($active[nom_entreprise]).'</a>';
Et une fois que le résultat est affiché, on peut cliquer sur le lien généré par la recherche lancé.
Lorsque l'on clique sur le lien généré par la recherche (LE RESULTAT DE RECHERCHE) on arrive sur une fiche regroupant toutes les infos concernant l'entreprise en question dont les mots clés...

	$conn = db_connect();
  	$sql = "SELECT * FROM ".IGSW_ENTREPRISES_DOSSIERS." WHERE num_client = '$num_client'"; 
  	$result = mysql_query($sql, $conn);

while ($aff_donnee_entreprise = mysql_fetch_array($result)) {


<table border="0" align="center" cellspacing="1" cellpadding="1" width="100%" style="margin-top:-20px;">

  <?php if ($aff_donnee_entreprise["mots_cles"]) { ?>
<h5 style="color:#1e297c"><b><u>Mots Cl&eacute;s</u></b></h5>
<ul>
<li style="margin-left:-25px;"><b class="titre">Mots Cl&eacute;s principaux : </b><font size="2" face="verdana"> <?php echo stripslashes($aff_donnee_entreprise["mots_cles"]); ?></font></li>
</ul>
<?php } ?>
<ul>
<?php if ($aff_donnee_entreprise["mots_cles_option"]) { ?>
<li style="margin-left:-25px; margin-top:-10px;"><b class="titre" >Autres : </b><font size="2" face="tahoma" ><?php echo stripslashes($aff_donnee_entreprise[mots_cles_option]); ?></font></li>
</ul>
<?php 
  }
}  
?>

</table>
Voila. sinon j'ai essayé d'adapter ton code mais : echo '<a href="module_recherche.php='.urlencode($donnees['mot_cles']).'" title="Lancer une nouvelle recherche">'.stripslashes($donnees['mot_cles']).'</a>';
ne s'affiche pas...

Merci beaucoup!

Eléphant du PHP | 447 Messages

24 févr. 2011, 12:21

Bon, ben si ça marche et que tu obtiens le résultat voulu, tant mieux! :)

Si tu veux déboguer tes codes, affiche les erreurs, soit en configurant php, soit en mettant ça au début de tes fichiers:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
Probably (only a) Human Problem?

Mammouth du PHP | 687 Messages

24 févr. 2011, 12:32

Non justement ça ne fonctionne pas.... Lol :lol:

Eléphant du PHP | 447 Messages

24 févr. 2011, 13:09

Teste en affichant les erreurs et dis-moi ce qu'il en retourne...
Probably (only a) Human Problem?

Mammouth du PHP | 687 Messages

24 févr. 2011, 18:41

voici les erreurs...

Notice: Undefined variable: mots_cles in /homez.333/attels/www/DOSSIER/afficher.php on line 779

Notice: Undefined variable: mots_cles_option in /homez.333/attels/www/DOSSIER/afficher.php on line 780

Notice: Undefined index: mot_cles in /homez.333/attels/www/DOSSIER/afficher.php on line 784

Ligne 779
WHERE activite like '%".$activite."%' AND code_postal like '%".$code_postal."%' AND mots_cles like '%".$mots_cles."%'
Ligne 780
AND  mots_cles_option like '%".$mots_cles_option."%'");
Ligne 784
echo '<a href="module_recherche.php='.urlencode($donnees['mot_cles']).'" title="Lancer une nouvelle recherche">'.stripslashes($donnees['mot_cles']).'</a>';
Merci

ViPHP
ViPHP | 5462 Messages

24 févr. 2011, 19:27

Bon, ben si ça marche et que tu obtiens le résultat voulu, tant mieux! :)

Si tu veux déboguer tes codes, affiche les erreurs, soit en configurant php, soit en mettant ça au début de tes fichiers:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
E_ALL | E_STRICT
ou -1

:wink:

Mammouth du PHP | 687 Messages

24 févr. 2011, 19:44

Même résultat avec E_ALL | E_STRICT
#-o

Mammouth du PHP | 687 Messages

24 févr. 2011, 23:51

pas d'idées?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 févr. 2011, 00:24

vu que ta requête est entre des " tu souhaite que php ce démerde tous seul pour trouver les variables.
Pas de bol tu peut arriver à la limite de ce que php peut faire car la il ne sais pas s'il doit utiliser $mot_clef ou mot_clef_option, il prend mot_clef ^^

deux solutions
utiliser des {} pour les variables ou utiliser des ' pour délimiter la chaine et utiliser la concaténation :)

par exemple
$c = 'une chaine '.$variable.' et du blabla';
ou
$c = "une chaine ${variable} et du blabla';

il y a deux variables non déclarées dans ton script

de plus la syntaxe du lien n'est pas bonne
echo '<a href="module_recherche.php='.urlencode($donnees['mot_cles']).'" title="Lancer une nouvelle recherche">'.stripslashes($donnees['mot_cles']).'</a>';

une url serait plus module_recherche.php?motclef='.urlencode($donnees['mot_cles']).'" etc

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

25 févr. 2011, 01:16

Merci.
Je vais me pencher sur tout ça.
Avec un peu de patience je devrais y arriver...

Je vous tiens au courant et encore merci!