Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

Probleme de logique avec des "OR" "

nanor21, le dimanche 14 mai 2006 à 06:05:46 
 Signaler ce message aux modérateurs

Bonjour je suis completement perdu dans mon code,mon probleme c'est juste de la logique,l'ennui c'est qu'a force de travailler sur ce code je deviens completement gaga
En fait ce que je cherche a faire depuis le debut c'est :
WHERE (pr.PerfName="Valeur choisie")AND(pr.TypePerf="Performer" OR pr.TypePerf="Panel" OR pr.TypePerf="Workshop") AND (pr.PerfCodeName="Valeur choisie" )AND (pf.Date="5/26/2006" OR pf.Date="5/27/2006" OR pf.Date="5/28/2006" OR pf.Date="5/29/2006")AND (pf.Start="Valeur choisie") AND (pf.End="valeur choisie") AND (pl.Stage="Valeur choisie") AND (pl.LocStage="Outdoor" OR pl.LocStage="Indoor")

avec le code suivant mais je ne vois vraiment pas comment faire(j'ai esseye mille et une combinaisons de parentheses),pouvez vous m'aider s'il vous plait?:

<?php
array('Performer', 'Panel','Workshop');
array('5/26/2006','5/27/2006','5/28/2006','5/29/2006');
array('Indoor', 'Outdoor');
$where = 'WHERE (';
$and=false; //au départ aucun type d'information n'a été détécté
if(ISSET($_POST['perfname'])&&$_POST['perfname']!='')
        {$where = $where.' (pr.PerfName="'.$_POST['perfname'].'"';
        $and=true;}
         if(isset($_POST['typeperf']) AND is_array($_POST['typeperf']))
       {
               foreach($_POST['typeperf'] AS $valeur)
              {
if(ISSET($_POST['typeperf'])&&$_POST['typeperf']!='')
        {if($and) $where = $where.' OR ';
        $where = $where.'  pr.TypePerf="'.$valeur.'"';
        $and=true;}}
$where = $where . ') '; }

if(ISSET($_POST['perfcodename'])&&$_POST['perfcodename']!='')
    {if($and) $where = $where.' AND ';
    $where = $where.'  pr.PerfCodeName="'.$_POST['perfcodename'].'"';
    $and=true;}
         if(isset($_POST['date']) AND is_array($_POST['date']))
       {
               foreach($_POST['date'] AS $valeur2)
              {
if(ISSET($_POST['date'])&&$_POST['date']!='')
        {if($and) $where = $where.' OR ';
        $where = $where.'  pf.Date="'.$valeur2.'"';
        $and=true;}}
$where = $where . ') '; }
if(ISSET($_POST['start'])&&$_POST['start']!='')
    {if($and) $where = $where.' AND ';
    $where = $where.'  pf.Start="'.$_POST['start'].'"';
    $and=true;}
if(ISSET($_POST['end'])&&$_POST['end']!='')
    {if($and) $where = $where.' AND ';
    $where = $where.'  pf.End="'.$_POST['end'].'"';
    $and=true;}
if(ISSET($_POST['stage'])&&$_POST['stage']!='')
    {if($and) $where = $where.' AND ';
    $where = $where.'  pl.Stage="'.$_POST['stage'].'"';
    $and=true;}   
         if(isset($_POST['locstage']) AND is_array($_POST['locstage']))
       {
               foreach($_POST['locstage'] AS $valeur3)
              {
if(ISSET($_POST['locstage'])&&$_POST['locstage']!='')
        {if($and) $where = $where.' OR ';
        $where = $where.'  pl.LocStage="'.$valeur3.'"';
        $and=true;}}
$where = $where . ') '; }
if($and!=true) $where = $where.' 1';


$q = 'SELECT pr.*,
pf.*,
pl.*
FROM performer AS pr
INNER JOIN performance AS pf ON pr.IDPerf=pf.IDPerf
INNER JOIN place AS pl ON pl.CodeStage=pf.CodeStage '.$where;
echo "$q";

?>

1

ollie314, le dimanche 14 mai 2006 à 14:58:26

Bonjour,

Essaye cela, je ne sais pas si ça va marcher, je n'ai pas modifier grand chose...

<?php
array('Performer', 'Panel','Workshop');
array('5/26/2006','5/27/2006','5/28/2006','5/29/2006');
array('Indoor', 'Outdoor');

$where = 'WHERE (';

unset($exp); // on libère la variable au cas où elle existe et possède une valeur

if( ISSET($_POST['perfname']) && $_POST['perfname'] != '' )
{
$exp = ' (pr.PerfName="'.$_POST['perfname'].'"';
}
$where .= $exp;

if($exp){$exp = '';}

if( isset($_POST['typeperf']) AND is_array($_POST['typeperf']) )
{
foreach($_POST['typeperf'] AS $valeur)
{
if( ISSET($_POST['typeperf']) && $_POST['typeperf'] != '' )
{
if($exp) $exp .= ' OR ';
$exp .= ' pr.TypePerf="'.$valeur.'"';
}
}
$where .= $exp . ') ';
}

if($exp){$exp = '';}

if( ISSET($_POST['perfcodename']) && $_POST['perfcodename'] != '' )
{
if($exp) $exp .= ' AND ';
$exp .= ' pr.PerfCodeName="'.$_POST['perfcodename'].'"';
}

$where .= $exp;
if($exp){$exp='');

if( isset($_POST['date']) AND is_array($_POST['date']) )
{
foreach($_POST['date'] AS $valeur2)
{
if(ISSET($_POST['date']) && $_POST['date'] != '' )
{
if($exp) $exp .= ' OR ';
$exp .=' pf.Date="'.$valeur2.'"';
}
}
$where .= $exp . ') ';
}

if($exp){$exp='');

if(ISSET($_POST['start']) && $_POST['start'] != '' )
{
if($exp) $exp .= ' AND ';
$exp .= ' pf.Start="'.$_POST['start'].'"';
}

$where .= $exp;
if($exp){$exp='');

if( ISSET($_POST['end']) && $_POST['end'] != '' )
{
if($exp) $exp .= ' AND ';
$exp = ' pf.End="'.$_POST['end'].'"';
}

$where .= $exp;
if($exp){$exp='');

if( ISSET($_POST['stage']) && $_POST['stage'] != '' )
{
if($exp) $exp .= ' AND ';
$exp .= ' pl.Stage="'.$_POST['stage'].'"';
}

$where .= $exp;
if($exp){$exp='');

if(isset($_POST['locstage']) AND is_array($_POST['locstage']))
{
foreach($_POST['locstage'] AS $valeur3)
{
if(ISSET($_POST['locstage'])&&$_POST['locstage']!='')
{
if($exp) $exp .= ' OR ';
$exp .= ' pl.LocStage="'.$valeur3.'"';
}
}
$where = $exp . ') ';
}

if($exp){$exp='');

if( !$exp ) $where .= ' 1';

$q = 'SELECT pr.*,
pf.*,
pl.*
FROM performer AS pr
INNER JOIN performance AS pf ON pr.IDPerf=pf.IDPerf
INNER JOIN place AS pl ON pl.CodeStage=pf.CodeStage '.$where;

echo "$q";

/*
Je ne sais pas si ça va marcher mais bon essaye quad même ...
*/

?>
<?php
/*
Pour ma part j'utiliserais les fonctions currnet, key et next pour naviguer dans les tableaux
*/
do{
$val = current($_POST['tostageto']); // on recupère la valeur de la case du tableau
$key = key($_POST['stage']); // on résupère la clé
if($exp) $exp .= ' OR ';
$exp .= ' pl.LocStage="'.$val.'"';
}while(!next($_POST['stage']));

$where .= $exp.') ';
?>

Répondre à ollie314

2

nanor21, le lundi 15 mai 2006 à 00:58:34

Excuse moi mais j'ai finalement resolu mon probleme grace a d'autres internautes,je te remercie pour le mal que tu t'es donne,je copie le code en compensation,je suis vraiment desole je trouve degueulasse de t'avoir fait travailler pour rien:

<?php



// Début du code proprement dit !!


array('Performer', 'Panel','Workshop');
array('5/26/2006','5/27/2006','5/28/2006','5/29/2006');
array('Indoor', 'Outdoor');

$where = 'WHERE  ';

$and=false; //au départ aucun type d'information n'a été détécté



if(ISSET($_POST['perfname'])&&$_POST['perfname']!='')
{
    $where .= ' pr.PerfName="'.$_POST['perfname'].'"';
    $and=true;
}


if(isset($_POST['typeperf']))
{
    if (is_array($_POST['typeperf']))
    {
	        $premier = true;  // A METTRE DANS LES TROIS !!
        $nonvide = false;
        foreach($_POST['typeperf'] AS $valeur)
        {
            if ($valeur != "")
            {
                if (!$nonvide)
                {

                    if($and) $where .= ' AND '; //RAJOUT !!!

                    $where .=   ' ( ';
                    $nonvide=true;

                }
                 if(!$premier)//  MODIF
                {//  MODIF
                     $where .= ' OR ';    //  MODIF

                }//  MODIF
                else//  MODIF
                {//  MODIF
                    $premier=false;        //  MODIF
                }//  MODIF
                $where .= '  pr.TypePerf="'.$valeur.'"';
                $and=true;
            }
         }
         if ($nonvide)
        {
            $where .= ' ) ';
         }
    }
}




if(ISSET($_POST['perfcodename']))
{    
    if ($_POST['perfcodename']!='')
    {
        if($and) $where .= ' AND ';
        $where .= ' ( ';
            $where .= ' pr.PerfCodeName="'.$_POST['perfcodename'].'"';
          $where .= ' ) ';
        $and=true;
    }        
}


if(isset($_POST['date']))
{
    if (is_array($_POST['date']))
    {
	        $premier = true;  // A METTRE DANS LES TROIS !!
        $nonvide = false;
        foreach($_POST['date'] AS $valeur)
        {
            if ($valeur != "")
            {
                if (!$nonvide)
                {

                    if($and) $where .= ' AND '; //RAJOUT !!!

                    $where .=   ' ( ';
                    $nonvide=true;

                }
                 if(!$premier)//  MODIF
                {//  MODIF
                     $where .= ' OR ';    //  MODIF

                }//  MODIF
                else//  MODIF
                {//  MODIF
                    $premier=false;        //  MODIF
                }//  MODIF
                $where .= '  pf.Date="'.$valeur.'"';
                $and=true;
            }
         }
         if ($nonvide)
        {
            $where .= ' ) ';
         }
    }
}



if(ISSET($_POST['start']))
{    
    if ($_POST['start']!='')
    {
        if($and) $where .= ' AND ';
        $where .= ' ( ';
            $where .= ' pf.Start="'.$_POST['start'].'"'; //VERIFIER !!!!!!!!!!
          $where .= ' ) ';
        $and=true;
    }        
}



if(ISSET($_POST['end']))
{    
    if ($_POST['end']!='')
    {
        if($and) $where .= ' AND ';
        $where .= ' ( ';
            $where .= ' pf.End="'.$_POST['end'].'"'; //VERIFIER !!!!!!!!!!
          $where .= ' ) ';
        $and=true;
    }        
}


if(ISSET($_POST['stage']))
{    
    if ($_POST['stage']!='')
    {
        if($and) $where .= ' AND ';
        $where .= ' ( ';
            $where .= ' pl.Stage="'.$_POST['stage'].'"'; //VERIFIER !!!!!!!!!!
          $where .= ' ) ';
        $and=true;
    }        
}



if(isset($_POST['locstage']))
{
    if (is_array($_POST['locstage']))
    {
	        $premier = true;  // A METTRE DANS LES TROIS !!
        $nonvide = false;
        foreach($_POST['locstage'] AS $valeur)
        {
            if ($valeur != "")
            {
                if (!$nonvide)
                {

                    if($and) $where .= ' AND '; //RAJOUT !!!

                    $where .=   ' ( ';
                    $nonvide=true;

                }
                 if(!$premier)//  MODIF
                {//  MODIF
                     $where .= ' OR ';    //  MODIF

                }//  MODIF
                else//  MODIF
                {//  MODIF
                    $premier=false;        //  MODIF
                }//  MODIF
                $where .= '  pl.LocStage="'.$valeur.'"';
                $and=true;
            }
         }
         if ($nonvide)
        {
            $where .= ' ) ';
         }
    }
}




if($and!=true) $where .= ' 1';


$q = 'SELECT pr.*,
pf.*,
pl.*
FROM performer AS pr
INNER JOIN performance AS pf ON pr.IDPerf=pf.IDPerf
INNER JOIN place AS pl ON pl.CodeStage=pf.CodeStage '.$where;

echo "$q";

Répondre à nanor21

3

 ollie314, le lundi 15 mai 2006 à 11:00:46

Bnojour,

No problème, je suis content que tu aies trouvé, ma solution ne devait de toute façon pas marcher ...

Bonne journée et bon courage pour la suite !!

Amicalement

Olliie314

Répondre à ollie314
[Shell] test opérateur logique OR Salut a tous, je cherche la commande pour faire un OR logique dans : while test $grp -ne 1 OR 2 Voila le OR ou les || ne sont pas reconnus mais pour -o je ne sais pas ou le placer. Merci www.commentcamarche.net/forum/affich-2874868-shell-test-operateur-logique-or
Logiciel CREATIVE ZEN V Bonsoir, j'ai un gros problème!!! Ma fille a reçu un MP3 de marque CREATIVE ZEN V et il faut windows XP pour installer le logiciel, or moi j'ai windows 2000!!! Que faire ? Qui peut m'aider? Une maman en détresse qui ne comprend pas ces trucs... www.commentcamarche.net/forum/affich-3551047-logiciel-creative-zen-v
Jvc gr-d93 logiciel instalation Bonjour, lorsque je branche mon camescope, windows xp le reconnait mais me demande d'installer le logiciel. Or, je ne l'ai pas. A quel endroit je peut me le procurer ? Camescope JVC GR-D93 Merci de votre aide Nicolas www.commentcamarche.net/forum/affich-2251965-jvc-gr-d93-logiciel-instalation
[Logiciels] Rassembler un fichier XTMUn fichier XTM est un fichier coupé en morceaux avec le logiciel XtremSplit, téléchargeable à l'adresse suivante : Télécharger Xtremsplit www.commentcamarche.net/faq/sujet-3794-logiciels-rassembler-un-fichier-xtm
[Audio] Logiciels de Mixage AudioPeut-être que les D.J. que vous êtes cherchent un logiciel qui leur convient pour animer des soirées ? Vous devriez trouver votre bonheur ici : Dans cette liste sont répertoriés plusieurs logiciels (gratuits ou non) de mixage audio. Certains de ces... www.commentcamarche.net/faq/sujet-2838-audio-logiciels-de-mixage-audio
Les logiciels de plan de maison en 3DQuels logiciels pour faire le plan de ma maison ? Logiciels gratuits Archi Facile Architecture 3D Google SketchUp Logiciels payants Collection 3D Architecte Home Plan Pro FloorPlan3D Plans déjà tout prêts Les principaux... www.commentcamarche.net/faq/sujet-14033-les-logiciels-de-plan-de-maison-en-3d
Probleme logitech quickcam v.10.4Bonjour, J'ai installer une carte son terratec aureon5.1pci sur mon pc equiper de windows Xp2 et ma webcam logitech or cette dernière marche mais n'enregistre pas ma voix car le microphone et paramétrer sur terratec et je ne peux le modifier dans les... www.commentcamarche.net/forum/affich-4482053-probleme-logitech-quickcam-v-10-4
Ecriture manuscrite de msn (Résolu)Bonjour, J'ai essayé plusieurs fois d'utiliser l'écriture manuscrite sur msn mais à chaque fois que je clique sur le stylet, une fenêtre s'affiche m'indiquant le manque de logiciel. Or, j'ai installé tous ceux qu'il faut ( Windows XP avec Service Pack... www.commentcamarche.net/forum/affich-7750399-ecriture-manuscrite-de-msn
Login incorrectBonjour , SVP j'ai crée un groupe des users et un utilisateur, j'ai affecté cet utilisateur à ce groupe et j'ai changé ces paramétres . voivi les commandes que j'ai utilisé : mkdir –p /chrootdir/bind-directory groupadd –g 250 bind-named useradd –u 250... www.commentcamarche.net/forum/affich-2315247-login-incorrect
Télécharger AAA Logo 2009AAA Logo est en premier lieu un outil de création de logo en tout genre. Il ne faut pas une connaissance approfondie en le domaine pour pouvoir le maîtriser, il est intuitif et pratique. En plus de la création de logo, il permet de créer la plupart... www.commentcamarche.net/telecharger/telecharger-34056341-aaa-logo-2009
Télécharger Pilote Logitech QuickCamPilote de Webcam QuickCam de Logitech pour les systèmes Microsoft Windows XP et Windows Vista 32 bit. www.commentcamarche.net/telecharger/telecharger-34056606-pilote-logitech-quickcam
Télécharger Driver Logitech CameraAvis à tous ceux qui possèdent une webcam de chez Logitech, voici le pilote standard mis à jour supportant la majorités des webcams de la gamme. www.commentcamarche.net/telecharger/telecharger-34056973-driver-logitech-camera
Logitech QuickCam MessengerUSB, 30 fps, Mode photographie, Résolution vidéo maximale: , Microphone, Mise au point: , Interface:USB, Logicels inclus: , Images par seconde:30 Fps, Divers: , Couleur: , Compatibilité:  www.commentcamarche.net/guide/109674-logitech-quickcam-messenger
MERISE - Modèle logique des donnéesLe modèle logique des données Le modèle logique des données consiste à décrire la structure de données utilisée sans faire référence à un langage de programmation. Il s'agit donc de préciser le type de données utilisées lors des... www.commentcamarche.net/contents/merise/mld.php3
Cycle de vie d'un logicielCycle de vie d'un logiciel Le « cycle de vie d'un logiciel » (en anglais software lifecycle), désigne toutes les étapes du développement d'un logiciel, de sa conception à sa disparition. L'objectif d'un tel découpage est de permettre de définir des... www.commentcamarche.net/contents/genie-logiciel/cycle-de-vie.php3
Circuits logiquesReprésentation des portes logiques La représentation conventionnelle des portes logiques est la suivante : Réalisation de circuits logiques On appelle circuit logique (ou circuit combinatoire) un ensemble de portes logiques reliées entre... www.commentcamarche.net/contents/logic/circuits.php3