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
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 <?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(); } } ?>
En validant une option sélectionnée dans la liste publication
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>
J'obtiens cette erreur:
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 Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\urbantech_v1\classes\Jobs.php on line 432
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
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(); } }
tout en modifiant l'appel de ma fonction en retirant les paramètres:
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>'; } ?>
Il m'affiche bien toutes les offres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $annonce = $jobs->afficheJobFournisseur();
Auriez vous une idée d’où pourrait venir le problème? ou bien une solution parallèle?
Merci d'avance![]()
Partager