affectation de variable selon 3 champs html

mloiz
Invité n'ayant pas de compte PHPfrance

10 mai 2014, 12:13

Bonjour,
je suis en train de faire mon premier moteur de recherche en php/mySql et je rencontre un problème pour la sélection du type de recherche.

J'ai trois champ de recherche auteur, titre et annee à partir desquels je distingue 7 type de recherches : recherche par auteur, ou titre, ou année, ou auteur + titre, ou auteur + année, ou titre + année, ou auteur + titre + année.
(le champ annee peut prendre uniquement les valeurs suivantes : all ou 2009 ou 2010 ou 2010 ou 2011 )
je fais la distiction en php selon que mes champ de recherche soit vide ou non.
Le problème c'est que je n'arrive jamais à activer les recherches doubles (e.g. auteur + titre)
code php :
// restrictions des variables a html et simplification des noms. 
$author = htmlspecialchars($_GET['author']); 
$title = htmlspecialchars($_GET['title']); 
$year = htmlspecialchars($_GET['year']); 

$kindOfSearch = "lesCellulesSontVides";

if(!empty($author) && empty($title) && $year=="all"){
$kindOfSearch = "author";
}
elseif(!empty($title) && empty($author) && $year=="all"){
$kindOfSearch = "title";
}

elseif($year!="all" && empty($auteur) && empty($titre)){
$kindOfSearch = "year";
}

elseif(!empty($author) && !empty($title) && $year=="all" ){
$kindOfSearch = "authorNtitre";
}

elseif(!empty($author) && $year!="all" && empty($titre) ){
$kindOfSearch = "authorNyear";
}

elseif(!empty($title) && $year!="all" && empty($author) ){
$kindOfSearch = "titleNyear";
}
elseif(!empty($author) && !empty($title) && $year!="all" ){
$kindOfSearch = "all";
}

echo "<b>".$kindOfSearch."</b> ; ";

mysql_query("SET NAMES UTF8"); // on met les données en UTF 8

// recherche par auteur : 
if( strcmp($kindOfSearch,"author") == 0){
	$query="Select * FROM memoireIFU where Auteur like '%$author%'" ;
}

// recherche par année : 
if( strcmp($kindOfSearch,"year") == 0){
	$query="Select * FROM memoireIFU where Annee like '%$year%'" ;
}

// recherche par titre : 
if( strcmp($kindOfSearch,"title") == 0){
	$query="Select * FROM memoireIFU where Titre like '%$title%' " ;
}
// recherche par auteur et titre
if( strcmp($kindOfSearch,"authorNtitre") == 0){
	$query="Select * FROM memoireIFU where Auteur like '%$author%' AND Titre like '%$title%'";
}
// recherche par auteur et année
if( strcmp($kindOfSearch,"authorNyear") == 0){
	$query="Select * FROM memoireIFU where Auteur like '%$author%' AND Annee like '%$year%'";
}
// recherche par titre et année
if( strcmp($kindOfSearch,"titleNyear") == 0){
	$query="Select * FROM memoireIFU where Titre like '%$title%' AND Annee like '%$year%'";
}
// recherche par Auteur et titre et année
if( strcmp($kindOfSearch,"all") == 0){
	$query="Select * FROM memoireIFU where Auteur like '%$author%' AND Titre like '%$title%' AND Annee like '%$year%'";
}
// recherche rien = afficher tt les items
if( strcmp($kindOfSearch,"lesCellulesSontVides") == 0){
	$query="Select * FROM memoireIFU ";
}
concrètement ma variable kindOfSearch ne prend jamais les valeurs authorNtitre, titleNyear ..
ou dit autrement, dès que la variable annee prend une valeur différente que all, une recherche par année est systematiquement effectué...

d'avance merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 mai 2014, 15:18

salut,

Tu utilise parfois $title et $titre (qui n'existe pas).

Pourquoi avoir deux séries de if ? la première série suffit.

Tu peux générer la requête directement en fonction de tes critères en utilisant la concaténation pour construire le select.


@+
Il en faut peu pour être heureux ......