Recherche avec php5

am1ra2 Messages postés 13 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 5 février 2010 - 16 sept. 2009 à 11:03
zpef Messages postés 30 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 janvier 2011 - 18 sept. 2009 à 18:17
bonjour,
Bonjour,
j'ai essayé de faire la partie recherche que j'ai réalisé avec le php5(orinté objet)et comme je suis débutante pour travailler avec php5 j'ai pas trouvé une bonne résultat toiujours il m'affiche une page vide (pas de recherche)
voici le code que j'ai réalisé:

class Search
{

private $x;
private $t;
function _construct($x,$t)
{

$this->$x=$x;
$this->$t=$t;
}
function requeteselect($x)
{
//requete fait la jointure entre les tables de la base de donné
//et cherche les inforamations qui correspond à un mot entrer
$z="select groupe.id_groupe

from (utilisateur,utilisateur_groupe,groupe,sujet_groupe,sujet) where

(utilisateur.id_utilisateur utilisateur_groupe.id_utilisateur) and (utilisateur_groupe.id_groupe groupe.id_groupe) and (groupe.id_groupe = sujet_groupe.id_groupe) and (sujet_groupe.id_sujet = sujet.id_sujet)

and (utilisateur.nom_utilisateur like '%".$this->x."%' or utilisateur.prenom_utilisateur like '%".$this->x."%'

or utilisateur.adresse_utilisateur like '%".$this->x."%' or utilisateur.description_utilisateur like '%".$this->x."%' or groupe.nom_groupe like '%".$this->x."%' or groupe.description_groupe like '%".$this->x."%' or sujet.nom_sujet like '%".$this->x."%')";

$q=mysql_query($z)or die(mysql_error());

return $q;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function detailselect($t)
{
//requete de selection des inforamtions concernant les identificateurs qui se trouve dans $t

$q=mysql_query("select * from (utilisateur,utilisateur_groupe,groupe,sujet_groupe,sujet) where utilisateur.id_utilisateur ='".$this->t."' and utilisateur_groupe.id_groupe ='".$this->t."' and groupe.id_groupe ='".$this->t."' and sujet_groupe.id_sujet ='".$this->t."' and sujet.id_sujet ='".$this->t."'")

or die(mysql_error());

return $q;
}
}
class recherche extends Search
{
private $phrase;
public function _construct($mot)
{$this->phrase=$mot;
}
//fonction qui permet l'affichage selon le nombre de page et retourne la taille de tableau

function affich($r,$pg)
{

$i=4*($pg-1); //formule permet de recuperer le nombre d'information par page
for($k=$i;$k<($i+4);$k++)//parcours de nombre d'enregistrement dans la page
{
if(isset($r[$k]))//verification si le tableau existe ou non à chaque enregistrement
{

echo $r[$k].'
';//affichage de contenu du tableau
}
}

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function explodephrase($ph) //diviser la phrase en des mots et retourne un tableau de mots
{
$php = eregi_replace("[ ]+", " ",$ph); //remplacer un ou plusieurs espaces par un seul espace

if ($ph[0]=' '){$ph[0]=' ';}//vérification s'il ya un espace au debut de la phrase
$i=strlen($ph);//retourne la longueur de la phrase
if ($ph[$i-1]=' '){$ph[$i-1]=' '; //s'il ya deux espaces on les remplace par un seul espace
}
$mot=explode(" ",$php);//fonction permet d'éviter les espaces dans une phrase et retourne un tableau de mot

return $mot;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//fonction qui retourne un tableau des identificateurs de la base de donné qui convient à un mot entrer

function requetesel($x)

{
$i=0;
foreach($x as $m)//parcours du tableau de mot
{
$q=recherche::requeteselect($m);//appel à la fonction qui contient la requete de selection des identificateurs

while($row=mysql_fetch_array($q))
{
$tab1[$i]=$row[0];//on stocke dans un tableau les identificateurs de la requete
$i++;
}
}
if (isset($tab1)){return $tab1;}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//fonction qui retourne un tableau détaillé à partir d'un identificateur de la base de donné

function detail($t)
{

$i=0;

while(isset($t[$i]))//vérification si le tableau des id existe
{

$q=Recherche::detailselect($t[$i]); //appel à la requete qui renvoie les inforamtions concernant les identificateurs de tableau


$r=mysql_fetch_array($q);
//on stocke les informations des identificateurs dans un tableau

$y[$i]='groupe: '.$r['nom_groupe'].'
description groupe: '.$r['description_groupe'].'
nom utilisateur: '.$r['nom_utilisateur'].'
prenom utilisateur: '.$r['prenom_utilisateur'].'
adresse utilisateur: '.$r['adresse_utilisateur'].'
description utilisateur: '.$r['description_utilisateur'].'
nom sujet: '.$r['nom_sujet'].'
'.'
<img height="50" widght="50" src='.$r['image_utilisateur'].'
';;

$i++;
}


if(!isset($y[0]))
{
$y[0]='aucun résultat';
}

return $y;//retourne un tableau détaillant les informations de chaque identificateur


}
}
je ne sais pas comment résoudre ce probleme
merci pour votre aide

1 réponse

zpef Messages postés 30 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 janvier 2011
18 sept. 2009 à 18:17
Bonjour am1ra2,

Ton code est pour le moins très obscure !
Il y a beaucoup de choses à voir...

Bon, quelques conseils pour commencer :
- utilise toujours des noms de variables qui veulent dire quelque chose : évite $x pour un mot, met plutôt $mot, c'est plus clair pour tous ceux qui vont relire ton code, et pour toi aussi
- attention à l'indentation de ton code, c'est la même chose !
- Commente tes fonctions -> regarde le documentation phpdocumentor
- Utilise un fichier par classe, c'est plus standard

Ensuite, concernant le code à proprement parler :
- J'ignore les raisons de l'existence de tes deux classes, le but n'est pas là, mais pourquoi appeler de manière statique les fonction de la classe mère ? ex : Recherche::detailselect(....
Vu le contexte, met plutôt : $this->detailselect(...
- Attention aux performances dans ta fonction "requetesel" lorsque tu appelles "requeteselect" dans un while, il vaut toujours mieux faire une seule requête SQL, c'est moins gourmand en ressources et donc, ta page se charge plus vite. Donc, pour bien faire, construit une seule requête avec tes différentes recherches de mots séparés par des "OR".

Pourrais-tu envoyer la partie du code qui exécute la recherche avec ces classes ?

A+

zpef
0
Rejoignez-nous