Bonsoir tout le monde

Je rencontre un petit problème en ce moment avec une génération de code sql via un formulaire, je vous explique...

J'aimerais pouvoir faire un tri sur une liste d'offre d'emplois stocké dans une table de donnée, vu que soit il affiche tout (et dans ce cas je n'ai pas de condition dans ma requête) ou soit une partie définie par des listes déroulantes

Voici comment j'ai imaginé la chose:
Si tout doit être affiché, la variable vaut une chaine vide
Sinon j’écris la requête dans une variable et je la transmets

Voici le code que j'ai tapé:
Tout d'abord une partie de ma classe Job ou je communique avec la bdd

Job.php
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
class Jobs
{
//***************************
// CONSTRUCTEUR - DESTRUCTEUR
//***************************
	private $connection;
	function __construct()
	{
		try
		{
			$this->connection=new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'', DB_USER, DB_PASS);
 
		}
		catch (Exception $e)
		{
				return('Erreur : ' . $e->getMessage());
		}
	}
	function __destruct()
	{
		$this->connection=null;
	}
        ...
	public function afficheJobFournisseur($where_date)
	{
		$req = $this->connection->query('SELECT a.id as id_annonce, a.titre as titre_annonce, DAY(j.date_creation) as jour, 
		                                          MONTH(j.date_creation) as mois, YEAR(j.date_creation) as annee, s.nom as nom_secteur
			        				       FROM annonce AS a
										   LEFT JOIN job AS j ON j.id = a.fk_id_job
										   LEFT JOIN secteur As s ON s.id = j.fk_id_secteur
										   WHERE (a.langue =  a.default_language)
										   
										   '.$where_date.'
										   ORDER BY j.date_creation DESC');
		$tab = array() ;								 
		$arrayRetour = array() ;
		while($donnees = $req->fetch()) 
		{
			$arrayRetour["reference"]            = $donnees["id_annonce"].$donnees["jour"].$donnees["mois"].$donnees["annee"];
			$arrayRetour["titre_annonce"]        = html_entity_decode($donnees["titre_annonce"]);
			$arrayRetour["nom_secteur"]          = html_entity_decode($donnees["nom_secteur"]);
			$arrayRetour["date_publication"]     = $donnees["jour"].'/'.$donnees["mois"].'/'.$donnees["annee"];
 
			array_push($tab,$arrayRetour);
		}
		return $tab;
		$req->closeCursor();	
	}
}
?>
Et voici le code de la page envoyant la requête:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
session_start(); 
?>
<?php
require '../../globals/globals.php';
function __autoLoad($nomClasse)
{
	require_once('../../classes/'.$nomClasse.'.php');
}
$jobs = new Jobs();
$secteur = $jobs->secteur();
if(!empty($_POST["val_secteur"]))
{
	$where_secteur = $_POST["val_secteur"];
}else{
	$where_secteur = '';
}
if(!empty($_POST["val_publication"]))
{
	$where_date = $_POST["val_publication"];
}else{
	$where_date = '';
}
$annonce = $jobs->afficheJobFournisseur($where_date);
 
//code sql des dates
$aujourdhui = 'AND (j.date_creation >= DATE_SUB(NOW),INTERVAL 1 DAY)';
$hier = 'AND(j.date_creation >= DATE_SUB(NOW-1),INTERVAL 1 DAY)';
$septDernierJours = 'AND (j.date_creation >= DATE_SUB(NOW),INTERVAL 7 DAY)';
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Urbantech</title>
 
<link href="./css/style.css" rel="stylesheet" type="text/css" />
<script src="./script/script.js" type="text/javascript"></script>
</head>
 
<body id="body" onLoad="setFooter();">
<?php //require("./lang/decide-lang.php");?>  
<?php include("./inc/entete.php"); ?>
 
<div id="site"><br>
<form action="index.php" onsubmit="" method="post" enctype="multipart/form-data">
<input type="hidden" name="val_secteur" id="val_secteur" value="">
<input type="hidden" name="val_publication" id="val_publication" value="">
<table width="288" border="0" cellspacing="4" cellpadding="0">
  <tr>
    <td width="80">Secteur : </td>
    <td width="114"><select name="secteur" id="secteur" class="select" onchange="document.getElementById('val_secteur').value = this.value">
      <option value ="">Tout</option>
<?php
foreach($secteur as $sect)
{
	echo '<option value ='.$sect["id"].'>'.$sect["nom"].'</option>';
}
?>
    </select></td>
  </tr>
  <tr>
    <td>Parution :</td>
    <td><select name="publication" id="publication" class="select" onchange="document.getElementById('val_publication').value = this.value">
      <option value ="">Toutes</option>
      <option value ="2">Aujourd'hui</option>
      <option value ="<?php echo $hier ?>">hier</option>
      <option value ="<?php echo $septDernierJours ?>">des 7 derniers jours</option>
      <option value ="">De ce mois</option>
    </select></td>
  </tr>
</table>
<input type="submit"  name="confirm" id="confirm" value="ok" />
<br>
</form>
 
<table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>Référence</td>
    <td>Nom de la fonction</td>
    <td>Secteur</td>
    <td>Date</td>
  </tr>
 
</table>
 
</div>
<?php include("./inc/pied_de_page.php"); ?>
</body>
</html>
En validant une option sélectionnée dans la liste publication

J'obtiens cette erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\urbantech_v1\classes\Jobs.php on line 432
Ce n'est pas un problème d’identification du serveur car si je change le code de ma classe comme tel (j'ai juste viré le paramètre):

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
public function afficheJobFournisseur()
	{
		$req = $this->connection->query('SELECT a.id as id_annonce, a.titre as titre_annonce, DAY(j.date_creation) as jour, 
		                                          MONTH(j.date_creation) as mois, YEAR(j.date_creation) as annee, s.nom as nom_secteur
			        				       FROM annonce AS a
										   LEFT JOIN job AS j ON j.id = a.fk_id_job
										   LEFT JOIN secteur As s ON s.id = j.fk_id_secteur
										   WHERE (a.langue =  a.default_language)
 
										   ORDER BY j.date_creation DESC');
		$tab = array() ;								 
		$arrayRetour = array() ;
		while($donnees = $req->fetch()) 
		{
			$arrayRetour["reference"]            = $donnees["id_annonce"].$donnees["jour"].$donnees["mois"].$donnees["annee"];
			$arrayRetour["titre_annonce"]        = html_entity_decode($donnees["titre_annonce"]);
			$arrayRetour["nom_secteur"]          = html_entity_decode($donnees["nom_secteur"]);
			$arrayRetour["date_publication"]     = $donnees["jour"].'/'.$donnees["mois"].'/'.$donnees["annee"];
 
			array_push($tab,$arrayRetour);
		}
		return $tab;
		$req->closeCursor();	
	}
}
et que j' insert ceci dans ma page

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?php
foreach($annonce as $anno)
{
	echo '
	<tr>
		<td>'.$anno["reference"].'</td>
		<td>'.$anno["titre_annonce"].'</td>
		<td>'.$anno["nom_secteur"].'</td>
		<td>'.$anno["date_publication"].'</td>
	</tr>';
}
?>
tout en modifiant l'appel de ma fonction en retirant les paramètres:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$annonce = $jobs->afficheJobFournisseur();
Il m'affiche bien toutes les offres.
Auriez vous une idée d’où pourrait venir le problème? ou bien une solution parallèle?

Merci d'avance