am1ra2
Messages postés13Date d'inscriptionlundi 10 mars 2008StatutMembreDernière intervention 5 février 2010
-
16 sept. 2009 à 11:03
zpef
Messages postés30Date d'inscriptionvendredi 1 février 2008StatutMembreDernière intervention26 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."%')";
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
//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
zpef
Messages postés30Date d'inscriptionvendredi 1 février 2008StatutMembreDernière intervention26 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 ?