8768 sujets

Développement web côté serveur, CMS

Bonjour,


if($lieu == 'no' AND $nomroche == 'no' AND $cartegeologique == 'no' AND $natureroche == 'no')
{
    $result = $bdd->prepare('SELECT * FROM rochesvosges');
    $result->execute();
}
 
elseif($nomroche=="no")
{
    $result = $bdd->prepare('SELECT * FROM rochesvosges where lieu = :lieu
    AND cartegeologique = :cartegeologique AND natureroche = :natureroche
    OR (cartegeologique = :cartegeologique AND natureroche = :natureroche)');
    $result->execute(array(':lieu'=>$lieu, ':cartegeologique'=>$cartegeologique, ':natureroche'=>$natureroche));
}
 
elseif($lieu=="no")
{
    $result = $bdd->prepare('SELECT * FROM rochesvosges where cartegeologique = :cartegeologique
    AND nomroche = :nomroche AND natureroche = :natureroche
    OR (nomroche = :nomroche AND natureroche = :natureroche)');
    $result->execute(array(':nomroche'=>$nomroche, ':cartegeologique'=>$cartegeologique, ':natureroche'=>$natureroche));
}
        
elseif($cartegeologique=="no")
{
    $result = $bdd->prepare('SELECT * FROM rochesvosges where natureroche = :natureroche
    AND lieu = :lieu AND nomroche = :nomroche
    OR (lieu = :lieu AND nomroche = :nomroche)');
    $result->execute(array(':nomroche'=>$nomroche, ':lieu'=>$lieu, ':natureroche'=>$natureroche));
}
       
elseif($natureroche=="no")
{
    $result = $bdd->prepare('SELECT * FROM rochesvosges where nomroche = :nomroche
    AND lieu = :lieu AND cartegeologique = :cartegeologique
    OR (lieu = :lieu AND cartegeologique = :cartegeologique)');
    $result->execute(array(':nomroche'=>$nomroche, ':lieu'=>$lieu, ':cartegeologique'=>$cartegeologique));
}
       
else
{
    $result = $bdd->prepare('SELECT * FROM rochesvosges where lieu = :lieu and nomroche = :nomroche and cartegeologique = :cartegeologique and natureroche = :natureroche');
    $result->execute(array(':lieu' => $lieu, ':nomroche' => $nomroche, ':cartegeologique' => $cartegeologique, ':natureroche' => $natureroche));
}


Ma requête fonctionne uniquement lorsque 3 champs (sur 4 au total) possèdent une valeur, mais dans le cas ou 3 champs possèdent une valeur il me donne toute les données correspondantes présente dans la table.

Mais ce n'est pas ce que je veux, il me faudrait une requête croisée me permettant de faire des recherches sur 1, 2, 3 ou 4 champs tout en m'affichant la totalité de ma table si je ne remplis aucun champ.

Merci à tous !