Moteur de recherche avec image

Mammouth du PHP | 686 Messages

24 avr. 2007, 18:02

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

Mammouth du PHP | 686 Messages

24 avr. 2007, 21:15

Tout le monde sèche ?

Mammouth du PHP | 686 Messages

24 avr. 2007, 21:47

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();

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 avr. 2007, 21:57

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.

Mammouth du PHP | 686 Messages

24 avr. 2007, 22:01

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>";
}


Mammouth du PHP | 686 Messages

24 avr. 2007, 22:03

J'avais 27 resultats pour ma requete

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 avr. 2007, 22:06

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...

Mammouth du PHP | 686 Messages

24 avr. 2007, 22:10

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.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 avr. 2007, 22:20

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

Mammouth du PHP | 686 Messages

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

Mammouth du PHP | 686 Messages

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 !

Mammouth du PHP | 686 Messages

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();
?>

Mammouth du PHP | 686 Messages

25 avr. 2007, 12:48

Personne ne peux m'aider ?

Mammouth du PHP | 686 Messages

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>";
?>

Mammouth du PHP | 686 Messages

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
Modifié en dernier par sylvaing26 le 07 mai 2007, 23:44, modifié 1 fois.