passage de requete sql par variables
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... :mouarf:
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:
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:
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:
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:
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:
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:
$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 :mrgreen: