bon, alors, euh, le plus simple, je pense, enfin pour expliquer exactement ce que je veux, c’est de balancer TOUT mon code
ma page recherche_test.php (qui marche c’est sur, et sans renvoie de page vers une autre) me donne :
Veuillez rentrer votre recherche:<br><br>
<form method="post" action="recherche_test.php">
<input type="text" name="search" SIZE="50">
<input type="submit" value="Rechercher">
<input type="hidden" name="envoie" value="1">
</form>
</table>
<?
include ("secret/connect.php");
include ("fonction.php");
if((isset($_POST['envoie']))&&($_POST['envoie']=='1'))
{
if($CONNEXION)
{
//récupere la recherche demandée par l'utilisateur
$search = $_POST['search'];
$search = strtolower($search);//mise en minuscule
$search = noaccents($search); // on ôte les accents
echo $search;
$expressionpos = strrpos($search,"\"");
$pluspos = strrpos($search,"+");
$espacepos = strrpos($search," ");
if ($expressionpos === false)
{
if ($pluspos === false)//traitement des espaces => OK!
{
echo "<br>les espaces";
$espace = $search;
$espace = delimiteurs($search);
$mot_search = explode(" ",$espace); //on crée un tableau de chaque mots séparé par un espace
$nb_mot = count($mot_search); // on compte le nombre de mot composant cette recherche
$i=0;
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0]; // récupere dans une variable la liste des mot vide
$motVide=mysql_fetch_array($curseur);
}
while ($i<$nb_mot)
{
$pos = strpos($ChaineVide, $mot_search[$i]);//vérifie si le mot cherché n'est pas un mot vide
if(($pos === false) && (strlen($mot_search[$i])>2))//si ce n'est pas un mot vide et qu'il est composé de plus de 2caractère
{// on cherche s'il appartient à la table mot (où tout les mot de chaque texte sont indexé (hors mot vide et de moins de 2caractère)
$req = "SELECT Poids, ID_TEXTE FROM mot WHERE Libelle LIKE \"%$mot_search[$i]%\" ";
echo "<br>".$req;
$sql = mysql_query($req);
$searchMot = mysql_fetch_array($sql);
while ($searchMot)//pour chaquemot dans chaque texte retrouvé
{
$poids = $searchMot["Poids"]; //on récupere le poids
$idTexte = $searchMot["ID_TEXTE"];//et l'id du texte correspondant
if (isset($motcherche[$idTexte]))//si pour chaque mot l'id texte est le même
{
$motcherche[$idTexte]+=$poids;// alors on cumule les poids
}
else
{
$motcherche[$idTexte]=$poids;//sinon, on garde le poids d'origine
}
$searchMot = mysql_fetch_array($sql);
}
}
$i++;
}
arsort($motcherche);//on range le tableau par odre décoissant du poids
foreach ($motcherche as $clef => $valeur)
{
$req="SELECT url, titre FROM texte WHERE ID = $clef"; //on selectionne le titre et l'url du texte correspondant à l'id du texte mot
$sql = mysql_query($req);
$resultat = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
While ($resultat)
{
$url = $resultat["url"];//on récupere l'url
$titre = $resultat["titre"];//et le tittre
echo " <br><a href=\"PageHtml/$url\">$titre</a>";//et on affiche un lien vers l'url en présentant le titre
$tab_espace[$url]= $titre;
$resultat = mysql_fetch_array($sql);
}
}
$tab_final=$tab_espace;
}
else
{
if ($espacepos === false)//traitement des plus=>OK!
{
echo "<br>traite les plus";
$plus = $search;
$motcherche=explode("+",$plus);
$max_motcherche=count($motcherche);
$j=0;
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0]; // récupere dans une variable la liste des mot vide
$motVide=mysql_fetch_array($curseur);
}
while ($j<$max_motcherche)
{
$pos = strpos($ChaineVide, $motcherche[$j]);//vérifie si le mot cherché n'est pas un mot vide
if(($pos === false) && (strlen($motcherche[$j])>2))//si ce n'est pas un mot vide et qu'il est composé de plus de 2caractère
{// on cherche s'il appartient à la table mot (où tout les mot de chaque texte sont indexé (hors mot vide et de moins de 2caractère)
$req = "SELECT ID_TEXTE FROM mot WHERE Libelle LIKE \"$motcherche[$j]\"";
$sql = mysql_query($req);
$result = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
while ($result)
{
$id = $result["ID_TEXTE"];
$recherche[]=$id; //tableau qui me permet de garder l'id du texte par rapport aux mots!!!
$result = mysql_fetch_array($sql);
}
$j++;
}
sort($recherche);
$m=1;
$dernier=$recherche[0];
for($compteur=1;$compteur<count($recherche);$compteur++)
{
if ($dernier==$recherche[$compteur])
{
$m++;
}
else
{
$mots_cherches[$dernier]=$m;
$m=1;
$dernier=$recherche[$compteur];
}
}
$mots_cherches[$dernier]=$m;
reset($mots_cherches);
foreach ($mots_cherches as $key => $value)
{
if ($value == $max_motcherche)
{
$req="SELECT url, titre FROM texte WHERE ID = $key";
$sql=mysql_query($req);
$result=mysql_fetch_array($sql);
while ($result)
{
$url = $result["url"];
$titre = $result["titre"];
//echo " <br><a href=\"PageHtml/$url\">$titre</a>";
$tab_plus[$url] = $titre;
$result = mysql_fetch_array($sql);
}
}
}
}
$tab_final=$tab_plus;
}
else //traitement des plus et des espaces=>OK!(pas encore)
{
echo "<br>plus et espace";
$tab_search = explode(" ",$search);
$i=0;
$intermespace = "";
$intermplus = "";
while ($i<count($tab_search))
{
$posplus = strrpos($tab_search[$i],"+");
if ($posplus===false)
{
$espace = $tab_search[$i];
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0]; // récupere dans une variable la liste des mot vide
$motVide=mysql_fetch_array($curseur);
}
$pos = strpos($ChaineVide, $espace);//vérifie si le mot cherché n'est pas un mot vide
if(($pos === false) && (strlen($espace)>2))//si ce n'est pas un mot vide et qu'il est composé de plus de 2caractère
{// on cherche s'il appartient à la table mot (où tout les mot de chaque texte sont indexé (hors mot vide et de moins de 2caractère)
$req = "SELECT Poids, ID_TEXTE FROM mot WHERE Libelle LIKE \"%$espace%\" ";
$sql = mysql_query($req);
$searchMot = mysql_fetch_array($sql);
while ($searchMot)//pour chaquemot dans chaque texte retrouvé
{
$poids = $searchMot["Poids"]; //on récupere le poids
$idTexte = $searchMot["ID_TEXTE"];//et l'id du texte correspondant
if (isset($motcherche[$idTexte]))//si pour chaque mot l'id texte est le même
{
$motcherche[$idTexte]+=$poids;// alors on cumule les poids
}
else
{
$motcherche[$idTexte]=$poids;//sinon, on garde le poids d'origine
}
$searchMot = mysql_fetch_array($sql);
}
}
arsort($motcherche);//on range le tableau par odre décoissant du poids
foreach ($motcherche as $clef => $valeur)
{
$req="SELECT url, titre FROM texte WHERE ID = $clef"; //on selectionne le titre et l'url du texte correspondant à l'id du texte mot
$sql = mysql_query($req);
$resultat = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
While ($resultat)
{
$url = $resultat["url"];//on récupere l'url
$titre = $resultat["titre"];//et le tittre
//echo " <br><a href=\"PageHtml/$url\">$titre</a>";//et on affiche un lien vers l'url en présentant le titre
$tab_espace[$url]= $titre;
$resultat = mysql_fetch_array($sql);
//echo "<br>tab_espace".$url." ".$tab_espace[$url];
}
}
}
else
{
$plus = $tab_search[$i];
$motcherche=explode("+",$plus);
$max_motcherche=count($motcherche);
$j=0;
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0]; // récupere dans une variable la liste des mot vide
$motVide=mysql_fetch_array($curseur);
}
while ($j<$max_motcherche)
{
$pos = strpos($ChaineVide, $motcherche[$j]);//vérifie si le mot cherché n'est pas un mot vide
if(($pos === false) && (strlen($motcherche[$j])>2))//si ce n'est pas un mot vide et qu'il est composé de plus de 2caractère
{// on cherche s'il appartient à la table mot (où tout les mot de chaque texte sont indexé (hors mot vide et de moins de 2caractère)
$req = "SELECT ID_TEXTE FROM mot WHERE Libelle LIKE \"$motcherche[$j]\"";
$sql = mysql_query($req);
$result = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
while ($result)
{
$id = $result["ID_TEXTE"];
$recherche[]=$id; //tableau qui me permet de garder l'id du texte par rapport aux mots!!!
$result = mysql_fetch_array($sql);
}
$j++;
}
sort($recherche);
$m=1;
$dernier=$recherche[0];
for($compteur=1;$compteur<count($recherche);$compteur++)
{
if ($dernier==$recherche[$compteur])
{
$m++;
}
else
{
$mots_cherches[$dernier]=$m;
$m=1;
$dernier=$recherche[$compteur];
}
}
$mots_cherches[$dernier]=$m;
reset($mots_cherches);
foreach ($mots_cherches as $key => $value)
{
if ($value == $max_motcherche)
{
$req="SELECT url, titre FROM texte WHERE ID = $key";
$sql=mysql_query($req);
$result=mysql_fetch_array($sql);
while ($result)
{
$url = $result["url"];
$titre = $result["titre"];
//echo " <br><a href=\"PageHtml/$url\">$titre</a>";
$tab_plus[$url] = $titre;
$result = mysql_fetch_array($sql);
}
}
}
}
}
$i++;
}
$tab_final = array_merge($tab_plus,$tab_espace);
}
}
}
else
{
if ((substr($search,0,1) == "\"") && (substr($search,-1,1) == "\"")) //traitement des expressions=>OK!
{
echo "je traite l'expression";
$expression = $search;
$expression = str_replace("\"", "", $expression); // on remplace ces doubles quotes par rien pour ne garder que l'expression
$req = "SELECT url, titre FROM texte WHERE contenu LIKE \"%$expression% \" "; //on cherche dans un texte
$sql = mysql_query($req);
$ID = mysql_fetch_array($sql);
while($ID)
{ //on parcours chaque texte pour récupérer l'url et le titre
$url = $ID["url"];
$titre = $ID["titre"];
//echo " <br><a href=\"PageHtml/$url\">$titre</a><br>"; //et on affiche un lien vers l'url en présentant le titre
$tab_expression[$url]=$titre;
$ID = mysql_fetch_array($sql);
}
$tab_final=$tab_expression;
}
else
{
if ($pluspos === false)//traitement des espaces et expressions=>presque OK, reste à faire le tri!!!!!
{
echo "<br>je traite espace et expression";
$tab_search = explode(" ", $search);
$i=0;
while ($i<count($tab_search))
{
While ((substr($tab_search[$i],0,1)!= "\"") && ($i<count($tab_search)))
{
$espace =$tab_search[$i];
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0]; // récupere dans une variable la liste des mot vide
$motVide=mysql_fetch_array($curseur);
}
$pos = strpos($ChaineVide, $espace);//vérifie si le mot cherché n'est pas un mot vide
if(($pos === false) && (strlen($espace)>2))
{
$req = "SELECT Poids, ID_TEXTE FROM mot WHERE Libelle LIKE \"%$espace%\" ";
echo "<br>".$req;
$sql = mysql_query($req);
$searchMot = mysql_fetch_array($sql);
while ($searchMot)
{
$poids = $searchMot["Poids"];
$idTexte = $searchMot["ID_TEXTE"];
if (isset($motcherche[$idTexte]))
{
$motcherche[$idTexte]+=$poids;
}
else
{
$motcherche[$idTexte]=$poids;
}
$searchMot = mysql_fetch_array($sql);
}
}
arsort($motcherche);
foreach ($motcherche as $clef => $valeur)
{
$req="SELECT url, titre FROM texte WHERE ID = $clef";
echo "<br>".$req;
$sql = mysql_query($req);
$resultat = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
While ($resultat)
{
$url = $resultat["url"];//on récupere l'url
$titre = $resultat["titre"];//et le tittre
//echo " <br><a href=\"PageHtml/$url\">$titre</a>";
$tab_espace[$url]= $titre;
$resultat = mysql_fetch_array($sql);
}
}
$i++;
}
if($i<count($tab_search))
{
while (($i<count($tab_search)) && (substr($tab_search[$i],-1,1) != "\""))
{
$expressioninterm .= $tab_search[$i]." ";
$i++;
}
$expressioninterm .= $tab_search[$i];
$expression = $expressioninterm;
$expression = str_replace("\"", "", $expression); // on remplace ces doubles quotes par rien pour ne garder que l'expression
$req = "SELECT url, titre FROM texte WHERE contenu LIKE \"%$expression% \" ";
$sql = mysql_query($req);
$ID = mysql_fetch_array($sql);
while($ID)
{
$url = $ID["url"];
$titre = $ID["titre"];
$tab_expression[$url]=$titre;
$ID = mysql_fetch_array($sql);
}
}
$i++;
}
$tab_final = array_merge($tab_espace,$tab_expression);
}
else//devrait traiter les espaces, les expressions et les plus
{
echo "<br>on se tente les trois";
$tab_search = explode(" ", $search);
$i=0;
$intermplus = "";
while ($i<count($tab_search))
{
While ((substr($tab_search[$i],0,1)!= "\"") && ($i<count($tab_search)))
{
$plusposbis = strrpos($tab_search[$i],"+");
if ($plusposbis === false)
{
$espace = $tab_search[$i];
$espace = delimiteurs($search);
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0];
$motVide=mysql_fetch_array($curseur);
}
$pos = strpos($ChaineVide, $espace);
if(($pos === false) && (strlen($espace)>2))
{
$req = "SELECT Poids, ID_TEXTE FROM mot WHERE Libelle LIKE \"%$espace%\" ";
$sql = mysql_query($req);
$searchMot = mysql_fetch_array($sql);
while ($searchMot)
{
$poids = $searchMot["Poids"];
$idTexte = $searchMot["ID_TEXTE"];
if (isset($motcherche[$idTexte]))
{
$motcherche[$idTexte]+=$poids;
}
else
{
$motcherche[$idTexte]=$poids;
}
$searchMot = mysql_fetch_array($sql);
}
}
arsort($motcherche);
foreach ($motcherche as $clef => $valeur)
{
$req="SELECT url, titre FROM texte WHERE ID = $clef";
$sql = mysql_query($req);
$resultat = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
While ($resultat)
{
$url = $resultat["url"];
$titre = $resultat["titre"];
$tab_espace[$url]= $titre;
$resultat = mysql_fetch_array($sql);
}
}
}
else
{
$plus =$tab_search[$i];
$motcherche=explode("+",$plus);
$max_motcherche=count($motcherche);
$j=0;
$ChaineVide="";
$sql="SELECT mot_vide FROM mots_vide";
$curseur = mysql_query($sql);
$motVide = mysql_fetch_array($curseur);
while($motVide)
{
$ChaineVide.=" ".$motVide[0]; // récupere dans une variable la liste des mot vide
$motVide=mysql_fetch_array($curseur);
}
while ($j<$max_motcherche)
{
$pos = strpos($ChaineVide, $motcherche[$j]);
if(($pos === false) && (strlen($motcherche[$j])>2))
{
$req = "SELECT ID_TEXTE FROM mot WHERE Libelle LIKE \"$motcherche[$j]\"";
$sql = mysql_query($req);
$result = mysql_fetch_array($sql);
$nrows = mysql_num_rows($sql);
while ($result)
{
$id = $result["ID_TEXTE"];
$recherche[]=$id;
$result = mysql_fetch_array($sql);
}
$j++;
}
sort($recherche);
$m=1;
$dernier=$recherche[0];
for($compteur=1;$compteur<count($recherche);$compteur++)
{
if ($dernier==$recherche[$compteur])
{
$m++;
}
else
{
$mots_cherches[$dernier]=$m;
$m=1;
$dernier=$recherche[$compteur];
}
}
$mots_cherches[$dernier]=$m;
reset($mots_cherches);
foreach ($mots_cherches as $key => $value)
{
if ($value == $max_motcherche)
{
$req="SELECT url, titre FROM texte WHERE ID = $key";
$sql=mysql_query($req);
$result=mysql_fetch_array($sql);
while ($result)
{
$url = $result["url"];
$titre = $result["titre"];
$tab_plus[$url] = $titre;
$result = mysql_fetch_array($sql);
}
}
}
}
$intermplus.= $tab_plus;
}
$i++;
}
$tab_interm = array_merge($tab_espace,$tab_plus);
if($i<count($tab_search))
{
while (($i<count($tab_search)) && (substr($tab_search[$i],-1,1) != "\""))
{
$expressioninterm .= $tab_search[$i]." ";
$i++;
}
$expressioninterm .= $tab_search[$i];
$expression = $expressioninterm;
$expression = str_replace("\"", "", $expression);
$req = "SELECT url, titre FROM texte WHERE contenu LIKE \"%$expression% \" ";
$sql = mysql_query($req);
$ID = mysql_fetch_array($sql);
while($ID)
{
$url = $ID["url"];
$titre = $ID["titre"];
$tab_expression[$url]=$titre;
$ID = mysql_fetch_array($sql);
}
}
$i++;
}
$tab_final = array_merge($tab_interm,$tab_expression);
}
}
}
foreach ($tab_final as $key => $value)
{
echo " <br>tab_final : <a href=\"PageHtml/".$key."\">".$value."</a>";
}
}
}
mysql_close($CONNEXION);
?>
inutile de dire que c’est super long!!!! et que plusieurs bouts de code reviennent selon les cas!!! donc bon, c’est inutile, j’aurais voulu rendre ce code plus simple, plus compréhensible du moins!!!