Rechercher : dans
Par :

Probleme de logique avec des "OR" "

Dernière réponse le 15 mai 2006 à 11:00:46 nanor21, le 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";

?>

Meilleures réponses pour « Probleme de logique avec des "OR" " » dans :
[Audio] Logiciels de Mixage Audio VoirPeut-ê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...
Les logiciels de plan de maison en 3D VoirQuels 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...
Logiciels pour trafiquer/truquer sa voix (Dark Vador) VoirLogiciels gratuits MorphVOX Junior Audacity Logiciels payants MorphVOX Pro AV Voice Changer Software Virtual personality Plusieurs logiciels vous permettent de transformer votre voix, grâce à des effets ou filtres instantanés. Les...
Télécharger AAA Logo 2009 VoirAAA 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...
MERISE - Modèle logique des données VoirLe 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...
Cycle de vie d'un logiciel VoirCycle 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...
Circuits logiques VoirRepré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...

1

ollie314, le 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 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 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