Page 1 sur 2

Moteur de recherche avec image

Posté : 24 avr. 2007, 18:02
par sylvaing26
Bonjour, j'ai reussi à faire un moteur de recherche pour mes images dont les infos sont dans une base de données
Je les recupère ainsi pour avoir le nombre de resultats
$_POST[mots]=trim($_POST[mots]);
$_POST[rubrique]=trim($_POST[rubrique]);
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 ($_POST['rubrique'] == all)
{
$mots = strtolower($_POST[mots]);                          // on passe les mots recherchés en minuscules   
$mot = str_replace("+", " ", trim($mots));        // on remplace les + par des espaces
$mot = str_replace("\"", " ", $mot);                  // on remplace les " par des espaces
$mot = str_replace(", ", " ", $mot);                   // on remplace les , par des espaces
$mot = str_replace(",", " ", $mot);                   // on remplace les , par des espaces
$mot = str_replace(":", "", $mot);                   // on remplace les : par des espaces
$tab=explode(" " , $mot);                                // 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>";
}
Cette partie de code marche parfaitement mais lorsque je souhaite intègrer les images, rien ne marche c'est a dire que rien ne s'affiche mis à part le début de mon code précisé plus haut
$nb = '12';
//// On determine debut du limit ////
$debut=($page-1)*$nb;
$sql2=$sql;                      //requete permettant de connaitre le nombre de résultats
$sql.=" Limit $debut,$nb ";   // requête limitante.
function CouperMot($result,$cut)
   {
    $message=wordwrap($result,$cut, " ", 1);
    return $result;
   }
   
while($result2=mysql_fetch_array($sql2) && $result=mysql_fetch_array($sql))
{
$result['rubrique']=CouperMot($result['rubrique'],$cut);
$result['nom']=CouperMot($result['nom'],$cut);
$result['dossier']=CouperMot($result['dossier'],$cut);
$titre="$result[titre]";

echo "<a href='voir.php?img=$result[id]'";
echo "'>"; 
echo "<img src='";
echo $result['rubrique']; 
echo $result['dossier'];
echo "vignettes/" ;
echo $result['nom'];
echo "' align='absmiddle' border='0' vspace='5' hspace='5' alt=\"$result[titre]\">";
echo "</a>";
}
}
Aidez moi car j'ai beau tourner ca dans tous els sens rien n'y fait
Merci

Posté : 24 avr. 2007, 21:15
par sylvaing26
Tout le monde sèche ?

Posté : 24 avr. 2007, 21:47
par sylvaing26
me revoila
maintenant les image s'affichent ..; sauf qu'une seule ne s'affiche
if ($_POST['rubrique'] == all)
{
$mots = strtolower($_POST[mots]);                          // on passe les mots recherchés en minuscules   
$mot = str_replace("+", " ", trim($mots));        // on remplace les + par des espaces
$mot = str_replace("\"", " ", $mot);                  // on remplace les " par des espaces
$mot = str_replace(", ", " ", $mot);                   // on remplace les , par des espaces
$mot = str_replace(",", " ", $mot);                   // on remplace les , par des espaces
$mot = str_replace(":", "", $mot);                   // on remplace les : par des espaces
$tab=explode(" " , $mot);                                // 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>";
}

$nb = '12';
//// On determine debut du limit ////
$debut=($page-1)*$nb;

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

echo "<a href='voir.php?img=$result[id]'";
//echo $result['rubrique'];

////////////////////////////////////////
//echo $result['dossier'];
//echo $result['nom'];
echo "'>"; 
echo "<img src='";
echo $result['rubrique']; 
echo $result['dossier'];
echo "vignettes/" ;
echo $result['nom'];
echo "' align='absmiddle' border='0' vspace='5' hspace='5' alt=\"$result[titre]\">";
echo "</a>";
}


mysql_close();

Posté : 24 avr. 2007, 21:57
par charabia
while($result=mysql_fetch_array($result))
Prends l'habitude mettre un nom de variable différent :
while($row=mysql_fetch_array($result))
Ensuite utilises la concaténation pour séparer les variables du reste :
while($row=mysql_fetch_array($result)) 
{ 
echo "<a href='voir.php?img=".$row['id']."'>";  
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']."'></a>";
}
Le nom du dossier est rubriquedossiervignettes/ ?

Ta requête donne combien d'enregistrements ? Si c'est un tu n'auras qu'une image.

Posté : 24 avr. 2007, 22:01
par sylvaing26
ca venait qu'une variable de ma boucle portait le même nom
Maintenant autre probleme toute mes images s'affichent sauf que du fait que j'ai mis "SELECT DISTINCT nom" pour ne pas avoir des photographies en doubles.
Comment réinterroger la base de donnée pour que à partir du nom du premier elle me donne tout le reste ?
if ($_POST['rubrique'] == all)
{
$mots = strtolower($_POST[mots]);                          // on passe les mots recherchés en minuscules   
$mot = str_replace("+", " ", trim($mots));        // on remplace les + par des espaces
$mot = str_replace("\"", " ", $mot);                  // on remplace les " par des espaces
$mot = str_replace(", ", " ", $mot);                   // on remplace les , par des espaces
$mot = str_replace(",", " ", $mot);                   // on remplace les , par des espaces
$mot = str_replace(":", "", $mot);                   // on remplace les : par des espaces
$tab=explode(" " , $mot);                                // on place les differents mots dans un tableau
$nb=count($tab);                                          // on compte le nbr d'élément du tableau.

$sql="SELECT DISTINCT nom 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>";
}

$nb = '12';
//// On determine debut du limit ////
$debut=($page-1)*$nb;

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

echo "<a href='voir.php?img=$resulta[id]'";
echo "'>"; 
echo "<img src='";
echo $resulta['rubrique']; 
echo $resulta['dossier'];
echo "vignettes/" ;
echo $resulta['nom'];
echo "' align='absmiddle' border='0' vspace='5' hspace='5' alt=\"$result[titre]\">";
echo "</a>";
}


Posté : 24 avr. 2007, 22:03
par sylvaing26
J'avais 27 resultats pour ma requete

Posté : 24 avr. 2007, 22:06
par charabia
Comment réinterroger la base de donnée pour que à partir du nom du premier elle me donne tout le reste ?
Je n'ai pas du tout saisi ce que tu veux faire...

Posté : 24 avr. 2007, 22:10
par sylvaing26
ok j'explique tranquil
Ma premiere requete que je viens de faire dans la base donnée ne me ressort que tous les noms uniques de mes photos.
Je voudrais à partir d'une deuxieme requete que ma BDD me ressorte le titre, l'id, le dossier de chacune d'elles.

Posté : 24 avr. 2007, 22:20
par charabia
$sql="SELECT DISTINCT nom, titre, id...etc
Ne fonctionne pas ?

Posté : 24 avr. 2007, 22:36
par sylvaing26
ba non parce que une photo de même nom qui est dans une rubrique differente n'a pas la même id

Posté : 24 avr. 2007, 22:40
par sylvaing26
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 !

Posté : 25 avr. 2007, 00:41
par sylvaing26
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();
?>

Posté : 25 avr. 2007, 12:48
par sylvaing26
Personne ne peux m'aider ?

Posté : 25 avr. 2007, 16:16
par sylvaing26
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>";
?>

Posté : 25 avr. 2007, 16:19
par sylvaing26
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