Moteur de recherche qui ne fonctionne pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche qui ne fonctionne pas

par DocType » 28 nov. 2006, 12:10

il allait le découvrir normalement :wink: (LHDN92 essayait de le faire en tout cas)
C'est toujours mieux que la personne se rende compte de son erreur elle même car c'est qu'elle a compris et reverifiera ce problème là une fois suivante :wink:
En attirant son attention sur le fait que sa requête était vide, son âme de débuggueur aurait refait surface et avec un peu de curiosité aurait trouvé l'erreur.

par bibi85 » 28 nov. 2006, 11:24

merci de m'avoir expliqué comment afficher ma requête. affectivement je sais d'où vient l'erreur maintenant... franzt a raison, j'avais rectifié en mettant $sql.
c'est super sympa de m'aider à progresser en php,
merci, merci beaucoup :P

par jojolapine » 28 nov. 2006, 11:11

il allait le découvrir normalement :wink: (LHDN92 essayait de le faire en tout cas)

re

par Frantz » 28 nov. 2006, 11:07

$resultat_recherche=mysql_query($requete_recherche);
Est ce que c'est normal que ta variable $requete_recherche
n'apparait nulle part ?

Ne devrais-tu pas la remplacer par $sql ?

par DocType » 28 nov. 2006, 10:22

// RECUPERATION DES VARIABLES  
$categorie_loc=$_POST["categorie_loc"]; 
$capacite_loc=$_POST["capacite_loc"]; 
$dept_loc=$_POST["dept_loc"]; 
// CONNEXION AU SERVEUR ET SELECTION DE LA BASE 
include ("../includes/fonctions/connexion.php"); 

$sqlcond=array(); 
$sql="SELECT num_loc FROM locations"; 

if (!empty($dept_loc)) 
{ 
$sqlcond[]="dept_loc='".$dept_loc."'"; 
} 
if (!empty($categorie_loc)) 
{ 
$sqlcond[]="categorie_loc='".$categorie_loc."'"; 
} 
if (!empty($capacite_loc)) 
{ 
$sqlcond[]="capacite_loc='".$capacite_loc."'"; 
} 

    if (count($sqlcond)>0) 
    { 
    $sql.=" WHERE ". implode(" AND ", $sqlcond); 
    } 

//EXECUTION DE LA REQUETE  
echo $requete_recherche;
$resultat_recherche=mysql_query($requete_recherche);  
if($resultat_recherche)  
{ //début de if  
    while ($donnees=mysql_fetch_array($resultat_recherche))  
    { //début de while  
      $num_loc=$donnees['num_loc'];  

                 if ($num_loc=='100')  
                {$num="bravo";}  

    echo "$num";  

    } //fin de while  
}//fin de if  
    
else  
{//début de else  
echo "aucune résultat ne correspond à vos critères de recherche!";  
}//fin de else  

// FERMER LA BASE DE DONNEES  
mysql_close();  

?>
Essaie cela, ça va t'afficher ta requête et je pense que tu comprendras tout de suite ton erreur :wink:

par bibi85 » 28 nov. 2006, 10:08

bonjour et merci pour vos réponses. j'ai essayé les 2 solutions, mais il ne trouve aucun résultat (alors qu'il y en a !), voici le code:
// RECUPERATION DES VARIABLES 
$categorie_loc=$_POST["categorie_loc"];
$capacite_loc=$_POST["capacite_loc"];
$dept_loc=$_POST["dept_loc"];
// CONNEXION AU SERVEUR ET SELECTION DE LA BASE
include ("../includes/fonctions/connexion.php");

$sqlcond=array();
$sql="SELECT num_loc FROM locations";

if (!empty($dept_loc))
{
$sqlcond[]="dept_loc='".$dept_loc."'";
}
if (!empty($categorie_loc))
{
$sqlcond[]="categorie_loc='".$categorie_loc."'";
}
if (!empty($capacite_loc))
{
$sqlcond[]="capacite_loc='".$capacite_loc."'";
}

	if (count($sqlcond)>0)
	{
	$sql.=" WHERE ". implode(" AND ", $sqlcond);
	}

//EXECUTION DE LA REQUETE 
$resultat_recherche=mysql_query($requete_recherche); 
if($resultat_recherche) 
{ //début de if 
    while ($donnees=mysql_fetch_array($resultat_recherche)) 
    { //début de while 
      $num_loc=$donnees['num_loc']; 

                 if ($num_loc=='100') 
                {$num="bravo";} 

    echo "$num"; 

    } //fin de while 
}//fin de if 
   
else 
{//début de else 
echo "aucune résultat ne correspond à vos critères de recherche!"; 
}//fin de else 

// FERMER LA BASE DE DONNEES 
mysql_close(); 

?> 

encore merci pour voter aide
	

par Ryle » 27 nov. 2006, 17:29

Hs : Et ben voilà, qu'est ce que je vous disais, ca recommence !! ;)

Bon ceci dit, c'est sur que c'est clairement mieux de sortir les variables :) (c'est nottament plus lisible)

Et ça peut également être mieux aussi avec les apostrophes s'il s'agit de chaines ou de dates comme c'est probablement le cas, mais pas s'il s'agit de nombres : MySQL les tolères et fait lui même la conversion quand il réalise que le type ne correspond pas (et je suis sur qu'en secret il jure à l'encontre du développeur ;)), mais ce n'est pas parce qu'il rattrappe ces erreurs, qu'il faut les commettre :)

Hs : Damned, je me suis fait eu par cette petite voix dans ma tête, j'ai craqué et lui ai répondu !! ;)

par DocType » 27 nov. 2006, 17:09

zgsqfhesheaELDFHYJFGUYVGOLVELJHVLHVljvhylyv
Ryle, j'ai bondis !
Ne trouve-tu pas que
$sqlCond = array(); 
$sql = "SELECT ... FROM ... "; // début de la requête 
if(!empty($crit1)) // critère 1 non vide 
  $sqlCond[] = "crit1 = $crit1"; 
if(!empty($crit2)) // critère 2 non vide 
  $sqlCond[] = "crit2 = $crit2"; 
... 
if(count($sqlCond)>0) // s'il ya des critères non vide, les sépares par un AND et complète la requête. 
  $sql.= " WHERE " . implode(" AND ", $sqlCond);
ce n'est pas top à lui proposer ?
Qu'il vaut mieux
$sqlCond = array(); 
$sql = "SELECT ... FROM ... "; // début de la requête 
if(!empty($crit1)) // critère 1 non vide 
  $sqlCond[] = "crit1 = '".$crit1."'"; 
if(!empty($crit2)) // critère 2 non vide 
  $sqlCond[] = "crit2 = '".$crit2."'"; 
... 
if(count($sqlCond)>0) // s'il ya des critères non vide, les sépares par un AND et complète la requête. 
  $sql.= " WHERE " . implode(" AND ", $sqlCond);

par Ryle » 27 nov. 2006, 17:07

HS : Ca vient de ma machine où bien vous aussi vous entendez ce bruit de fond assez étrange qui semble se déclencher sur certains topics ? ;) :langue:

par DocType » 27 nov. 2006, 16:48

J'ai la vague impression que l'on passe quelque fois au dessus de mes réponses. Quelqu'un voit mes messages ??

par bibi85 » 27 nov. 2006, 16:46

merci Ryle pour tes explications avec lesquelles je vais bosser.
excusez moi pour les majuscules, la touche ctrl était enfoncée :oops:

par zeus » 27 nov. 2006, 13:36

Au sujet des majuscules ;)

Imagine que tu rentres dans un bureau avec des gens qui peuvent t'aider, tu t'approches et tu hurles ... Les gens risquent de t'envoyer bouler et de passer à autre choses.
Sur un forum, les majuscules, c'est hurler ...

De plus, quand tu écris en Majuscule, un humain met en moyenne 33% de plus pour te lire car toutes les lettre ont la même taille ;)

Je te conseille donc, même dans tes commentaires, de préférer les minusules au majuscules

PS : au fait, j'ai modifié ton titre ;)

par Ryle » 27 nov. 2006, 13:07

Affiche donc ta requête avant de l'exécuter (ne serait-ce que pour vérifier ce qu'elle contient, peut être cela ne correspond pas à ce que tu attends d'après les paramètres passés)

Tu peux ainsi également la jouer dans mysql pour vérifier les résultats qu'elle te renvoi :)

Affiche également un petit quelque chose dans ta plétore de if(), tu verras qu'il passe dans beaucoup d'entre eux inutilement, et comme la requête est écrasée à chaque fois, seul le dernier if() contiendra la bonne requête.

Pourquoi ne pas simplement construire ta requête dynamiquement ?
$sqlCond = array();
$sql = "SELECT ... FROM ... "; // début de la requête
if(!empty($crit1)) // critère 1 non vide
  $sqlCond[] = "crit1 = $crit1";
if(!empty($crit2)) // critère 2 non vide
  $sqlCond[] = "crit2 = $crit2";
...
if(count($sqlCond)>0) // s'il ya des critères non vide, les sépares par un AND et complète la requête.
  $sql.= " WHERE " . implode(" AND ", $sqlCond);
Y a d'autre façon de faire bien entendu :)

par DocType » 27 nov. 2006, 13:03

Ton titre en majuscule est assez "agressif" : MOTEUR DE RECHERCHE QUI NE FONCTIONNE PAS. Ca ne pouvait pas être en minuscules ?
Sinon, pour ton soucis, il faut connaitre tes tables, et savoir ce que tu souhaites ! Si tes résultats sont illogiques, ta prog est illogique de base et logique face aux résultats :wink:
Maintenant, avant toute chose, décris ce que tu veux faire et corrige ton code. Quand je vois ça
 echo "$num"; 
je bondis ! (sans compter les variable imbriquées en texte dans tes requêtes...)

note: dans ton fonctionnement, ta requête est trop complexe...enfin, pas complexe, mais ton mode de construciton et tordu...
Commence par prendre exemple ici => http://www.phpfrance.com/forums/voir_sujet-24716.php

Moteur de recherche qui ne fonctionne pas

par bibi85 » 27 nov. 2006, 12:53

bonjour,
voici le code que j'ai, qui ne fonctionne pas (résultats affichés illogiques/enregistrements de la table):
// RECUPERATION DES VARIABLES ENVOYEES PAR LE FORMULAIRE DE LA PAGE index01.PHP 
$categorie_loc=$_POST["categorie_loc"];
$capacite_loc=$_POST["capacite_loc"];
$dept_loc=$_POST["dept_loc"];
// CONNEXION AU SERVEUR ET SELECTION DE LA BASE
include ("../includes/fonctions/connexion.php");
//ECRITURE DE LA REQUETE DE RECHERCHE EN FONCTION DES CRITERES CHOISIS
if (!empty($dept_loc))
		{
		$requete_recherche="SELECT 	
		num_loc
 		FROM locations WHERE dept_loc='$dept_loc' ";
		}
	
if (!empty($categorie_loc))
		{
		$requete_recherche="SELECT 
                                num_loc	
                                FROM locations WHERE             categorie_loc='$categorie_loc' ";
		}
		
if (!empty($capacite_loc))
		{
		$requete_recherche="SELECT 	
		num_loc,
 		FROM locations WHERE 
                                capacite_loc='$capacite_loc'";
		}	
if (!empty($dept_loc)&&!empty($categorie_loc))
		{
		$requete_recherche="SELECT 	
		num_loc
 		FROM locations WHERE dept_loc='$dept_loc' AND categorie_loc='$categorie_loc' ";
		}
if (!empty($dept_loc)&&!empty($capacite_loc))
		{
		$requete_recherche="SELECT 	
		num_loc
 		FROM locations WHERE dept_loc='$dept_loc' AND capacite_loc='$capacite_loc' ";
		}

if (!empty($categorie_loc)&&!empty($capacite_loc))
		{
		$requete_recherche="SELECT 	
		num_loc
 		FROM locations WHERE categorie_loc='$categorie_loc' AND capacite_loc='$capacite_loc' ";
		}
if (!empty($dept_loc)&& !empty($capacite_loc)&& !empty($categorie_loc))
		{
		$requete_recherche="SELECT 	
		num_loc
 		FROM locations WHERE dept_loc='$dept_loc' AND capacite_loc='$capacite_loc' AND categorie_loc='$categorie_loc' ";
		}
//EXECUTION DE LA REQUETE
$resultat_recherche=mysql_query($requete_recherche);
if($resultat_recherche)
{ //début de if
    while ($donnees=mysql_fetch_array($resultat_recherche))
    { //début de while
 	 $num_loc=$donnees['num_loc'];

                 if ($num_loc=='100')
                {$num="bravo";}

	echo "$num";

    } //fin de while
}//fin de if
  
else
{//début de else
echo "aucune lrésultat ne correspond à vos critères de recherche!";
}//fin de else

// FERMER LA BASE DE DONNEES
mysql_close();

?>

si qqun peut m'aider...merci d'avance