Moteur de recherche avec image

Mammouth du PHP | 686 Messages

25 avr. 2007, 17:27

C'est bon j'ai trouvé
echo "<a href='voir.php?img=".$result[id]."'"; 
echo "'>";  
il y avait une apostrophe en trop
donc ca marche
echo "<a href='voir.php?img=".$result[id]."'"; 
echo ">";  
Je ne met pas le tag resolu car je n'ai pas fini mon code ... :lol:

Mammouth du PHP | 686 Messages

25 avr. 2007, 20:09

Mon code est fini et fonctionnel
je le poste si ca peut aider quelqun ...
<?php

/// Affichage du nombre de résultats

include ("inc/connect.php");
MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
if (!empty($recherche)){
	$recherche=strtolower($recherche);                //on passe en minuscule
	$mots = str_replace("+", " ", trim($recherche));  //on remplace les + par des espaces
	$mots = str_replace("\"", " ", $mots); 	          //idem pour \
        $mots = str_replace(" de ", " ", $mots);          //idem pour  de 
	$mots = str_replace(" et ", " ", $mots);
	$mots = str_replace(" sur ", " ", $mots);
	$mots = str_replace(" la ", " ", $mots);
	$mots = str_replace(" le ", " ", $mots);
	$mots = str_replace(" avec ", " ", $mots);
	$mots = str_replace(", ", " ", $mots); 	          //idem pour ,
	$mots = str_replace(",", " ", $mots); 	          //idem pour ,
	$mots = str_replace(":", "", $mots); 	          //idem pour :
	$recherche=rawurlencode($recherche);              //on encode la recherche

	$tabe=explode(" " , $mots);
	$nbe=count($tabe);
	$sql1="SELECT * FROM recherche WHERE mots LIKE '%$tabe[0]%'";   //on prépare la requête SQL. 
for($i=1 ; $i<$nbe; $i++) 
        { 
        $sql1.="AND mots LIKE \"%$tabe[$i]%\"";       // on boucle pour integrer tous les mots dans la requête 
        }                      
    $resulta = mysql_db_query($db,$sql1);// on execute la requête SQL. 
  $total = mysql_num_rows($resulta);
  
if ($total == 0)
{ 
echo "<p align=center>Aucun résultat !</p></span></font>"; 
}
 
elseif ($total == 1) 
{ 
echo "<p style='margin-top:0; margin-right:400; margin-bottom:5; margin-left:30; padding:1px; border-top-width:1px; border-bottom-width:1px; border-bottom-color:rgb(87,113,39); border-top-style:dotted; border-bottom-style:dotted; border-tp-color:rgb(87,113,39);' align='center'><span style='font-size:7pt;'><font face='Verdana'>"; 
echo "<b>$total</b> résultat</p></span></font>"; 
} 
elseif ($total > 1) 
{ 
echo "<p style='margin-top:0; margin-right:400; margin-bottom:5; margin-left:30; padding:1px; border-top-width:1px; border-bottom-width:1px; border-bottom-color:rgb(87,113,39); border-top-style:dotted; border-bottom-style:dotted; border-tp-color:rgb(87,113,39);' align='center'><span style='font-size:7pt;'><font face='Verdana'>"; 
echo "<b>$total</b> résultats</p></span></font>"; 
} 

			}
						mysql_free_result($resulta);
						mysql_close();
?>


///////////Affichage des images

<?php
$limit=12;
MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
if (!isset($debut)) $debut = 0;       
if (!empty($recherche))
	{
	$tab=explode(" " , $mots);
	$nb=count($tab);


	$sql="select * from recherche where mots like \"%$tab[0]%\" ";

	for($i=1 ; $i<$nb; $i++)
		{
		$sql.="AND mots like \"%$tab[$i]%\" ";
		}

	$sql2=$sql;                      //requete permettant de connaitre le nombre de résultats
	$sql.=" Limit $debut,$limit ";   // requête limitante.
	
	$result2 = mysql_db_query($db,$sql2);
	$result = mysql_db_query($db,$sql);
echo "<p align=center style='margin-top:0;margin-bottom:0;'>";
	if($result)
		{
		$nrows  = mysql_num_rows($result2);
		$flag = 1;
		if(mysql_num_rows($result)==0) echo ""; 
		else
			{
			
			while($row = mysql_fetch_array($result)) 
		{
echo "<a href='voir.php?img=".$row["id"]."'"; 
echo ">";  
echo "<img src='"; 
echo $row["rubrique"];  
echo $row["dossier"]; 
echo "vignettes/" ; 
echo $row["nom"]; 

echo "' align='absmiddle' border='0' vspace='5' hspace='5' alt=\"".$row["titre"]."\">";
echo "</a>";
				}

	
	/****************** Mise en place de la navigation. ************************************/	
		

echo "<p style='margin-top:5; margin-right:30; margin-bottom:5; margin-left:30; padding:1px; border-top-width:1px; border-bottom-width:1px; border-bottom-color:rgb(87,113,39); border-top-style:dotted; border-bottom-style:dotted; border-tp-color:rgb(87,113,39);' align='right'><span style='font-size:8pt;'><font face='Verdana'>";
echo "Page : ";

		$nombre=ceil($nrows/$limit);

			for($i=1; $i<=$nombre; $i++)
				{
				echo "<a href=rechercher.php?rche=yes&recherche=$recherche&debut=".(($i-1)*$limit).">".$i."</a> ";
				if($i < $nombre) {echo " - ";

 }			
				}				
			}
		}
	}

else
	{
	 echo("<p align=center style='margin-bottom:10;'><span style='font-size:10pt;'><font face='Verdana'>Entrez au moins un mot !</span></font></p>");
	}
			mysql_free_result($result);
			mysql_close();	
?>
<?php
//// Lien pour effectuer une nouvelle recherche

	echo "</p><p style='margin-top:0; margin-right:30; margin-bottom:0; margin-left:340; padding:1px; border-top-width:1px; border-bottom-width:1px; border-bottom-color:rgb(87,113,39); border-top-style:dotted; border-bottom-style:dotted; border-tp-color:rgb(87,113,39);' align='center'>";

echo "<a href='rechercher.php'><span style='font-size:8pt;'><font face='Verdana'>";
echo "Nouvelle recherche";
echo "</font>";
echo "</span>";
echo "</a></p>";
?>
Bonne chance pour l'adapter ...
J'ai mis deux jours pour pondre ca ... mdr :lol: Je suis novice ... faut le reconnaitre d'ailleurs il doit y avoir des erreurs dedans !
Mais ca marche et c'est le principal

ViPHP
ViPHP | 5924 Messages

26 avr. 2007, 03:26

Au lieu d'utiliser 50 fois str_replace, utilise le une fois en lui passant un tableau avec les chaines à rechercher et un autre tableau avec les chaines de remplacement :
str_replace($search /* Chaines à rechercher */, $replace /* Chaines de remplacement */, $str);
Et quand tu seras meilleur, remplace str_replace par des fonctions PCRE.

Mammouth du PHP | 686 Messages

26 avr. 2007, 21:14

ok merci je note.
Pendant qu'on parle de cette fonction ya t-il un moyen de remplacer les d' et l' avant un mot car ca ne marche pas par exemple : "l'exemple" : je voudrai qu'il me vaque le l' mais j'ai l'impression que pour lui "l'exemple" n'est qu'un seul mot alors il ne me remplace rien, il faut que le l' soit tout seul ?
Comment remedier a ce problème ?

ViPHP
ViPHP | 5924 Messages

27 avr. 2007, 13:28

Il vaut mieux utiliser les PCRE pour ces remplacement la...

Mammouth du PHP | 686 Messages

27 avr. 2007, 14:05

Est ce que je pourrais en savoir plus ?
merci :)

Mammouth du PHP | 19672 Messages

27 avr. 2007, 14:22

PCRE = Perl Compatible Regular Expression : en clair, tu crée une expression régulière qui te sert de masque et tu utilises un preg_replace() au lieu d'un str_replace()

Voir sur le site le tuto de Ripat sur les expressions régulières.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 686 Messages

27 avr. 2007, 14:29

Merci bien les gars ! :lol:
Ca me servira à enlever les "mots silencieux" que beaucoup de monde tape dans les moteurs de recherche du genre "tutoriel POUR apprendre LE php .." :wink: ... Ca met le bazard quand on effectue une recherche dans la BDD quand on utilise
SELECT * FROM recherche WHERE mots LIKE '%$tabe[0]%' AND mots LIKE '%$tabe[$i]%'