Discussion:
Requete AND ou OR ?
(trop ancien pour répondre)
SuperG2
2008-01-27 20:08:50 UTC
Permalink
Bonjour, j'espere que vous pourez m'apporter de l'aide car je patauge.

J'ai un formulaire de recherche qui comprend 5 champs :
Ville
Code postal
Region
Type
Reference

Les 5 champs sont facultatifs.
Au moins un des champ doit être remplit

Je ne sais pas comment traiter l'information sur la page de traitement.php

Je récupère mes variable postées.Faut t'il un traitement particulier si un
champ reste vide ?

Mais surtout, je ne vois pas comment poser la requete.

SELECT * FROM table WHERE ville="" AND cp="" AND region="" AND type="" AND
reference=""


Voila, cela vous semble t'il possible ?

Merci de vos avis.

Bonne soirée à tous

SuperG2
Jacques-A
2008-01-28 08:59:38 UTC
Permalink
Post by SuperG2
Bonjour, j'espere que vous pourez m'apporter de l'aide car je patauge.
Bonjour,
Post by SuperG2
Ville
Code postal
Region
Type
Reference
Les 5 champs sont facultatifs.
Au moins un des champ doit être remplit
Je ne sais pas comment traiter l'information sur la page de traitement.php
Compter les champs vide et redemander le formulaire si ce compte=5 ?
Post by SuperG2
Je récupère mes variable postées.Faut t'il un traitement particulier si un
champ reste vide ?
Mais surtout, je ne vois pas comment poser la requete.
SELECT * FROM table WHERE ville="" AND cp="" AND region="" AND type="" AND
reference=""
Ne rendra jamais rien car au moins un des champs ne sera pas vide.

Construire la requète avec seulement les champs non vides ? du genre :
$DbleQuote='"' ; // pour la lisibilité (double quote entre simples quotes)
$Req='SELECT * FROM table WHERE ';
if ($Ville != NULL) $Req.='`ville`='.$DbleQuote.$Ville;
etc. ;

utiliser la variable $Req pour la requète.

J'espère ne pas avoir fait d'erreur dans les " les `et les ' de la
construction de $Req.
A+

Jacques
Post by SuperG2
Voila, cela vous semble t'il possible ?
Merci de vos avis.
Bonne soirée à tous
SuperG2
SuperG2
2008-01-28 18:07:38 UTC
Permalink
Merci, je test, ca parait pas trop mal ?

J'ai amélioré le systeme proposé en concatainant..

Bruno Desthuilliers
2008-01-28 11:00:14 UTC
Permalink
Post by SuperG2
Bonjour, j'espere que vous pourez m'apporter de l'aide car je patauge.
Ville
Code postal
Region
Type
Reference
Les 5 champs sont facultatifs.
Au moins un des champ doit être remplit
Je ne sais pas comment traiter l'information sur la page de traitement.php
// nb: en partant du principe que tu utilises MySQL,
// à adapter selon besoin

function lire_post($champ) {
if (isset($_POST[$champ]) {
$val = $_POST[$champ];
// nettoyage ici pour éviter
// pb sécurité
return $val;
}
return NULL;
}

$champs = array('ville', 'cp', 'region', 'type', 'reference');
$valeurs = array();
foreach($champs as $champ) {
if ($val = lire_post($champ)) {
$valeurs[$champ] = $val;
}
}

if (empty($valeurs)) {
// renvoyer vers le formulaire avec
// un message d'erreur
exit();
}
Post by SuperG2
Je récupère mes variable postées.Faut t'il un traitement particulier si
un champ reste vide ?
Bin oui: ne pas l'utiliser pour la requête SQL.
Post by SuperG2
Mais surtout, je ne vois pas comment poser la requete.
SELECT * FROM table WHERE ville="" AND cp="" AND region="" AND type=""
AND reference=""
$cnx = <ta connection à la base>;

$where = array();
foreach ($valeurs as $champ=>$val) {
$where[] = "$champ='" . mysql_real_escape_string($val, $cnx) . "'";
}

/*
* On ne peux pas décider pour toi si tu veux un ET ou un OU - à la
* limite, tu pourrais laisser le choix à l'utilisateur...
* Ceci étant, ça ne change pas grand chose à la construction de
* ta requete:
*/

$where = implode('AND', $where);

$sql = "SELECT * FROM table where $where";

Dernier point : d'une manière générale, évite les "SELECT *"

HTH
Continuer la lecture sur narkive:
Loading...