Bonjour tout le monde, je viens vous demander de l'aide une dernière fois normalement mais là, tout est presque terminé mais il reste un détail fort embêtant !

J'ai ma requête pour mes recherches de CV. Tout fonctionne bien quand je renseigne ce qu'il faut, le métier, la spécialité s'il y a et tout et la recherche par dates fonctionne aussi ... sauf dans un cas précis :
En fait, l'intermittent peut avoir jusqu'à 8 paires de dates, une date de début de disponibilité et la date de fin. Tout va bien si celui-ci n'a pas renseigné toutes ces dates de disponibilités (8 dates de début, 8 dates de fin) mais dès que toutes les dates sont remplis, il n'est plus trouvé par la recherche. Je dois donc me planter au niveau de la requête pour les dates mais je ne vois vraiment pas où ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if(strcmp($_POST['specialite'], $specialite) == 0){$param1 = "";}else{$param1 = "AND criteres_recherche.specialite1 = :specialite";}
if(strcmp($_POST['specialite'], $specialite) == 0){$param2 = "";}else{$param2 = "AND criteres_recherche.specialite2 = :specialite";}
if(strcmp($_POST['localisation'], $localisation) == 0){$param3 = "";}else{$param3 = "AND criteres_recherche.localisation = :localisation";}
$req = $bdd->prepare('SELECT * FROM criteres_recherche JOIN criteres_dates ON criteres_recherche.mail = criteres_dates.mail
	WHERE ((criteres_recherche.metier1 = :metier '.$param1.' AND criteres_recherche.secteur1 = :secteur AND criteres_recherche.experience1 >= :experience '.$param3.' AND criteres_recherche.inter = :inter)
	OR (criteres_recherche.metier2 = :metier '.$param1.' AND criteres_recherche.secteur2 = :secteur AND criteres_recherche.experience2 >= :experience '.$param3.' AND criteres_recherche.inter = :inter))
	AND (((:debut BETWEEN criteres_dates.debut1 AND criteres_dates.fin1) AND (:fin BETWEEN criteres_dates.debut1 AND criteres_dates.fin1))
	OR ((:debut BETWEEN criteres_dates.debut2 AND criteres_dates.fin2) AND (:fin BETWEEN criteres_dates.debut2 AND criteres_dates.fin2))
	OR ((:debut BETWEEN criteres_dates.debut3 AND criteres_dates.fin3) AND (:fin BETWEEN criteres_dates.debut3 AND criteres_dates.fin3))
	OR ((:debut BETWEEN criteres_dates.debut4 AND criteres_dates.fin4) AND (:fin BETWEEN criteres_dates.debut4 AND criteres_dates.fin4))
	OR ((:debut BETWEEN criteres_dates.debut5 AND criteres_dates.fin5) AND (:fin BETWEEN criteres_dates.debut5 AND criteres_dates.fin5))
	OR ((:debut BETWEEN criteres_dates.debut6 AND criteres_dates.fin6) AND (:fin BETWEEN criteres_dates.debut6 AND criteres_dates.fin6))
	OR ((:debut BETWEEN criteres_dates.debut7 AND criteres_dates.fin7) AND (:fin BETWEEN criteres_dates.debut7 AND criteres_dates.fin7))
	OR ((:debut BETWEEN criteres_dates.debut8 AND criteres_dates.fin8) AND (:fin BETWEEN criteres_dates.debut8 AND criteres_dates.fin8)))');
try
{
	$req->bindValue(':metier', $_POST['metier'], PDO::PARAM_STR);
	if(strcmp($_POST['specialite'], $specialite) != 0){$req->bindValue(':specialite', $_POST['specialite'], PDO::PARAM_STR);}
	$req->bindValue(':secteur', $_POST['secteur'], PDO::PARAM_STR);
	$req->bindValue(':experience', $_POST['experience'], PDO::PARAM_INT);
	if(strcmp($_POST['localisation'], $localisation) != 0){$req->bindValue(':localisation', $_POST['localisation'], PDO::PARAM_STR);}
	$req->bindValue(':inter', $_POST['inter'], PDO::PARAM_STR);
	$req->bindValue(':debut', implode('-',array_reverse (explode('/',$_POST['debut']))), PDO::PARAM_STR);
	$req->bindValue(':fin', implode('-',array_reverse (explode('/',$_POST['fin']))), PDO::PARAM_STR);
	$req->execute();
}
En gros, quand toutes les dates sont remplis, donc de debut1 à fin8, la personne n'est plus trouvée dans la rechercher alors qu'elle l'est si une paire de date n'est pas remplie ... Pourquoi ? Il faudrait aussi qu'il apparaisse, même si toutes les dates sont remplies ...

Désolé si c'est un peu confus, et merci d'avance pour votre aide