Recherche multicritères

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 : Recherche multicritères

par albat » 24 janv. 2009, 01:28

Modération :
chill out, les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.

par ChiLL OuT » 24 janv. 2009, 00:37

éooooooooooo ! Help :s

par ChiLL OuT » 17 janv. 2009, 18:21

UP

Aucune réponse ? :(

par ChiLL OuT » 11 janv. 2009, 20:27

Bonjour,

Dsl pour le rentard encore une fois :) j'étais horriblement pris par le travail.

Je reviens un peu sur mon projet :)

là je pense à 2 pages : une page d'erreur et une autre qui est plus importante : afficher à l'utilisateur que ses critères de recherche n'ont retournés aucun résultat, ça veut dire que la requette n'a retourné aucun enregistrement. j'ai pensé à une condition if comme suit mais ça marche toujours pas je bloque :
// Requête SQL
$sql = 'SELECT * FROM fournisseurs WHERE '. join(' AND ', $where);



$q = mysql_query($sql) or die (mysql_error());
 
 if (false === $q = mysql_query($sql)) {

    // => redirection vers une page d'erreur, m'informer sur l'erreur ...
}

if ($sql != null){
while ($donnees = mysql_fetch_array($q) )
{
?>
    <p id="cadreresult">
    <strong>Fournisseur</strong> : <?php echo $donnees['denomination']; ?><br />
    <strong>Son activité</strong> : <?php echo $donnees['activite']; ?><br />
    <strong>Sa localité</strong> : <?php echo $donnees['localite']; ?><br />
        <strong>Tél.</strong> : <?php echo $donnees['telephone']; ?><br />


   </p>
<?php
}
}
else{
echo "pas de Résultat";
}
mais je bloque toujours.

Merci pour votre aide inconditionnelle :)

par ChiLL OuT » 18 déc. 2008, 04:35

Re ! dsl pour ce petit retard :)

Merci sadeq!

je vais essayer de tester ça et je vous tiens au courant.

Merci encore une fois pour votre aide.

par sadeq » 16 déc. 2008, 10:38

Tu avais dit que ta page HTML doit afficher ceci:
Image
En HTML, chaque image réservée au logo est écrite comme ça :

Code : Tout sélectionner

<img src="chemin et nom du fichier image" />
Supposons que le chemin des images/logos est un dossiers nommé "images" qui se trouve dans le même répertoire que la page HTML qui va présenter les logos.

Supposons aussi que les noms propres des images se trouvent dans la base de données, dans une table, dans une colonne nommée "url_logo"

Pour afficher un logo dans la page HTML, on doit placer donc chaque "url_logo" dans sa balise <img> dans l'attribut "src" sans oublier que le champ "url_logo" ne contient en principe que le nom propre de l'image du logo à laquelle il faut bien ajouter le chemin d'accès dans le disque qui est le dossier "images".

Voila le principe, voici la réalisation sous PHP:
// Après exécution de la requête SELECT qui (entre autres) retourne les "url_logo"
$resultat = mysql_query($sql);
while ($resultat && $row = mysql_fetch_array($resultat)
     // placer l'url_logo dans l'image HTML
    echo '<img src="images/' . $row['url_logo'] . '" />';

   // suite ... 
}
Dans cet exemple, les fichiers images correspondant aux url_logo sont stockés dans le dossier "images/", donc, dans la base de données, l'url_logo représente le nom propre du fichier image (sans le chemin d'accès) ce qui permet une certaine liberté de stockage des fichiers images sans devoir mettre à jour la base à cause du changement d'emplacement.

par blof » 16 déc. 2008, 07:26

D'après tes précédents posts :

- Tu as su extraire de ta table MySQL le nom du fournisseur, son activité, sa localité.
=> tu sais donc extraire le nom de l'image qui correspond à son logo. ( qui est dans le nouveau champ que tu viens de rajouter )

- Tu connais le code HTML qui doit être généré ( cf "biensur que oui !" )

- Tu connais la commande echo().

Tu n'as donc plus de problème.

par ChiLL OuT » 16 déc. 2008, 01:30

biensur que oui !

bon ce que je ne sait pas c'est comment dire avec PHP d'affecter chaque image au résultat correspondant!

merci

par blof » 15 déc. 2008, 23:31

ChiLL OuT,

avant de parler de programmation PHP, est-ce-que tu sais quel doit être le code HTML au final ?

C'est la première chose à savoir.

Personnellement, je créerais un sous-répertoire "images" dans lequel se trouveraient tous les logos, et dans la table MySQL je stockerais uniquement le nom de de l'image ( par exemple xx.jpg )
Dans le code HTML on trouverait :

Code : Tout sélectionner

<img src="images/xx.jpg" alt="" />
Mais encore une fois, avant de te lancer dans la programmation, tu dois définir quel sera le code HTML de ta page.
( à mon humble avis )


--------------------------------------------------------------------------------------------

Pour tes problèmes d'encodage, c'est le sujet d'actualité :)

Divers -> PHPFrance -> Suggestion Tutoriel encodage utf-8 pour la faq
http://www.phpfrance.com/forums/voir_sujet-244765.php

Bonne lecture ...

par ChiLL OuT » 15 déc. 2008, 21:25

sadeq milles merciiii ! ça marche comme il faut ! :)

Pour ma questions précédente 2 :

Bon dans la table fournisseurs j'ajouterais bien un champs, je mettrais dedans le lien de l'image ?

http://...../xx.jpg ?

si oui, comment intégrer ça dans ton dernier code pour qu'il affiche le logo du fournisseurs correspondant!

Merci beaucoup encore une fois! j'ai déjà résolu un grand problème qui me préoccupais :)


..

ah un autre petit truc avec l'encodage des caractère, j'ai bien verifié dans ma base de donnée c'est du UTF8, mais ça m'affiche ceci dans la page du résultat :

Son activité : Mati�res premi�res

quand je vais dans Affichage > encodage des caractère > Occidental(ISO-8859-1) ça regle le probème des caratctère des données de la BDD mais ça modifie les accents ... des caractère du reste du site!

Merci ^^

par sadeq » 15 déc. 2008, 09:58

Hé ben, tu n'as qu'à pas inclure dans la condition Where les champs qui ont comme valeur : "toutes" comme ça tu diminuera le taux de filtrage et tu obtiendra plus d'enregistrements.

Tu dois ajouter ça dans la condition if de chaque champ de Where :

Exemple:
<?php
// Déclaration du tableau $where
$where = array();

// Condition initiale d'un Where vrai
$where['tout'] = 1;

// Conditions pour Where
if (isset($_POST['denomination']) && trim($_POST['denomination']) !='' && strtolower(trim($_POST['denomination'])) != 'toutes')
    $where['denomination'] = 'denomination LIKE \'%'.$_POST['denomination'].'%\'';

if (isset($_POST['activite']) && trim($_POST['activite']) !='' && strtolower(trim($_POST['activite'])) != 'toutes')
    $where['activite'] = 'activite=\''.$_POST['activite'].'\'';

if (isset($_POST['localite']) && trim($_POST['localite']) !='' && strtolower(trim($_POST['localite'])) != 'toutes')
    $where['localite'] = 'localite=\''.$_POST['localite'].'\'';

// Requête SQL
$sql = 'SELECT * FROM fournisseurs WHERE '. join(' AND ', $where);

echo $sql;
?> 

par ChiLL OuT » 15 déc. 2008, 00:28

bonsoir,

Merci sadeq pour ta réponse mais je pense je ne me suis pas bien expliqué, quand je met le correctif ça me donne :
SELECT * FROM fournisseurs WHERE 1 AND activite='toutes' AND localite='toutes'
toutes n'existe pas dans la table, je veux qu'il affiche tous les enregistrements en fait, de activité si Toutes est selectionnée et toutes les localités si toues est selectionnée.

Merci

par sadeq » 15 déc. 2008, 00:00

Voici un correctif:
<?php
// Déclaration du tableau $where
$where = array();

// Condition initiale d'un Where vrai
$where['tout'] = 1;

// Conditions pour Where
if (isset($_POST['denomination']) && $_POST['denomination']!='')
    $where['denomination'] = 'denomination LIKE \'%'.$_POST['denomination'].'%\'';

if (isset($_POST['activite']) && $_POST['activite']!='')
    $where['activite'] = 'activite=\''.$_POST['activite'].'\'';

if (isset($_POST['localite']) && $_POST['localite']!='')
    $where['localite'] = 'localite=\''.$_POST['localite'].'\'';

// Requête SQL
$sql = 'SELECT * FROM fournisseurs WHERE '. join(' AND ', $where);

echo $sql;
?>

par ChiLL OuT » 14 déc. 2008, 16:12

Bon je parlerais de ma 2eme question après.

Pour la 1ere question: Le code que tu m'as donné m'affiche toujours :
SELECT * FROM fournisseurs WHERE 1 
Le code que tu as modifié ne marché deja pas chez moi :

<?php
$_POST['denomination']='aaa';
$_POST['activite']='bbb';
$_POST['localite']='ccc';

if (isset($_POST['denomination']) && $_POST['denomination']!='')
    $where['denomination'] = 'denomination LIKE \'%'.$_POST['denomination'].'%\'';
if (isset($_POST['activite']) && $_POST['activite']!='')
    $where['activite'] = 'activite=\''.$_POST['activite'].'\'';
if (isset($_POST['localite']) && $_POST['localite']!='')
    $where['localite'] = 'localite=\''.$_POST['localite'].'\'';

$sql = 'SELECT * FROM fournisseurs WHERE '.join(' AND ', $where);

echo $sql;
?>
il me renvoie cette erreur :

Code : Tout sélectionner

Notice: Undefined variable: where in C:\wamp\www\xxx\result.php on line 55 Warning: join() [function.join]: Invalid arguments passed in C:\wamp\www\xxx\result.php on line 55 SELECT * FROM fournisseurs WHERE You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
et voila la ligne 55 :
$sql = 'SELECT * FROM fournisseurs WHERE '.join(' AND ', $where);
Ce qui marchais pour moi tranquille c'est ça :
// Création des conditions du WHERE
$condition = ""; 

if (isset($_POST['denomination']) && $_POST['denomination']!='') 
    $condition .= " AND denomination LIKE '%" . $_POST['denomination'] . "%' ";

if (isset($_POST['activite']) && $_POST['activite']!='') 
    $condition .= " AND  activite = '" . $_POST['activite'] . "' ";

if (isset($_POST['localite']) && $_POST['localite']!='') 
    $condition .= " AND localite = '" . $_POST['localite'] . "' "; 

// création de la requete 
$sql = "SELECT * FROM fournisseurs WHERE 1 $condition";
Merci.

par blof » 14 déc. 2008, 06:12

Ce qui va donner :
SELECT * FROM fournisseurs WHERE 1 si la condition est vide
et
SELECT * FROM fournisseurs WHERE 1 AND .... AND .... quand il y a 1 ou plusieurs conditions.
dans mon code précédent, je n'avais pas intégré le cas où toutes les variables sont vides.

en reprenant l'idée du "WHERE 1" :
<?php
$_POST['denomination']='';
$_POST['activite']='';
$_POST['localite']='';

$where['tout'] = '1';

if (isset($_POST['denomination']) && $_POST['denomination']!='')
	$where['denomination'] = 'denomination LIKE \'%'.$_POST['denomination'].'%\'';
if (isset($_POST['activite']) && $_POST['activite']!='')
	$where['activite'] = 'activite=\''.$_POST['activite'].'\'';
if (isset($_POST['localite']) && $_POST['localite']!='')
	$where['localite'] = 'localite=\''.$_POST['localite'].'\'';

$sql = 'SELECT * FROM fournisseurs WHERE '.join(' AND ', $where);

echo $sql;
?>
pour ta question 1 :

Code : Tout sélectionner

<option selected="selected" value=""/>Toutes</option>
non ?

pour ta question 2 :
Dans ta table "fournisseurs" il faut que tu rajoutes un champ où tu stockeras le nom de l'image correspondant au logo.
Comme je ne comprends pas où tu bloques, je ne vois pas quoi expliquer ...