Moteur de recherche avec image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche avec image

par sylvaing26 » 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]%'

par Cyrano » 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.

par sylvaing26 » 27 avr. 2007, 14:05

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

par Sékiltoyai » 27 avr. 2007, 13:28

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

par sylvaing26 » 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 ?

par Sékiltoyai » 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.

par sylvaing26 » 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

par sylvaing26 » 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:

par sylvaing26 » 25 avr. 2007, 16:19

regardez ce que ca donne
http://garbar-sylvain.info/essai/galeri ... e&debut=36
Je pense que tout n'est pas traité pour ma premiere boucle qui doit être en conflit avec ma premiere partie de code mais je voie pas ou

par sylvaing26 » 25 avr. 2007, 16:16

Enocre moi,
je pense que la reponse sera moins difficile
Tout marche,
sauf qu'aucun lien ne se fait sur la premiere image
<?php
include ("inc/connect.php");
$limit=12;
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(", ", " ", $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($result);
			mysql_close();
			}
?>




<?php
include ("inc/connect.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 "<center><b>Pas de Résultat</b></center><br>"; 
		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>";
				}
			mysql_free_result($result);
	
		
		

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 : ";
/****************** Mise en place de la navigation. ************************************/
		$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>");
	}
	
?>
<?php
//// MOTEUR DE RECHERCHES

	echo "<p style='margin-top:0; margin-right:30; margin-bottom:0; margin-left:335; 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>";
?>

par sylvaing26 » 25 avr. 2007, 12:48

Personne ne peux m'aider ?

par sylvaing26 » 25 avr. 2007, 00:41

Bon je suis reparti sur un autre code mais le butest exactement le même
le problème c'est que tout marche pour la premiere page
et lorsque l'on clique sur les lien pour aller sur les autres pages
rien du tout ne s'affiche
<?php

include ("inc/connect.php");
$limit=12;
@MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
@MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
function CouperMot($result,$cut)
   {
    $message=wordwrap($result,$cut, " ", 1);
    return $result;
   }
   
if ($_POST['rubrique'] == all) 
{ 
if (!isset($debut)) $debut = 0;       
if (!empty($recherche))
    {

$recherche = strtolower($recherche);                          // on passe les mots recherchés en minuscules    
$mots = str_replace("+", " ", trim($recherche));        // on remplace les + par des espaces 
$mots = str_replace("\"", " ", $mots);                  // on remplace les " par des espaces 
$mots = str_replace(", ", " ", $mots);                   // on remplace les , par des espaces 
$mots = str_replace(",", " ", $mots);                   // on remplace les , par des espaces 
$mots = str_replace(":", "", $mots);                   // on remplace les : par des espaces 
$recherche=rawurlencode($recherche);              //on encode la recherche

$tab=explode(" " , $mots);                                // on place les differents mots dans un tableau 
$nb=count($tab);                                          // on compte le nbr d'élément du tableau.

 



$sql="SELECT * FROM recherche WHERE mots LIKE '%$tab[0]%'";   //on prépare la requête SQL. 

for($i=1 ; $i<$nb; $i++) 
        { 
        $sql.="AND mots LIKE \"%$tab[$i]%\"";       // on boucle pour integrer tous les mots dans la requête 
        }                      
    $result = mysql_db_query($db,$sql);// on execute la requête SQL. 
  $total = mysql_num_rows($result); 
if ($total == 0) 
{ 
echo "<p align=center>Aucun résultat !</p>"; 
} 
elseif ($total == 1) 
{ 
echo "<p align=center>Il y a $total résultat</p>"; 
} 
elseif ($total > 1) 
{ 
echo "<p align=center>Il y a $total résultats</p>"; 
} 



echo "<p align=center>";



$sql2=$sql;                      //requete permettant de connaitre le nombre de résultats
    $sql.=" Limit $debut,$limit ";   // requête limitante.
    
    mysql_connect($host,$user, $passwd);
    $result2 = mysql_db_query($db,$sql2);
    $result = mysql_db_query($db,$sql);

    if($result)
        {
        $nrows  = mysql_num_rows($result2);
        $flag = 1;
        if(mysql_num_rows($result)==0) echo ""; 
        else
            {

            while($row = mysql_fetch_array($result)) 
                {
		$row['rubrique']=CouperMot($row['rubrique'],$cut);
$row['nom']=CouperMot($row['nom'],$cut);
$row['dossier']=CouperMot($row['dossier'],$cut);
$titre="$result[titre]";
echo "<a href='voir.php?img=$result[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>";
                }

            mysql_free_result($result);
    
        
        

echo "</p><p>";
/****************** Mise en place de la navigation. ************************************/
        $nombre=ceil($nrows/$limit);

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

            }

        }
    }

else
    {
     echo("<center><br><b>Entrer au moins un mot</b></center>");
    }
    echo "</p>";
}


mysql_close();
?>

par sylvaing26 » 24 avr. 2007, 22:40

si ya une solution c'est kool ...
mais sinon c'est pas grave ce que je vais faire c'est que à une des photos qui est en double je lui attribue en mots clés la valeur NULL ce sera moins compliqué je pense ...
lol
mais le debat reste ouvert !

par sylvaing26 » 24 avr. 2007, 22:36

ba non parce que une photo de même nom qui est dans une rubrique differente n'a pas la même id

par charabia » 24 avr. 2007, 22:20

$sql="SELECT DISTINCT nom, titre, id...etc
Ne fonctionne pas ?