Mon problème initial est résolu !
Je pense que ma deuxième requête ne passait pas car elle était contenue dans la boucle du fetch() de ma première requête. J'ai résolu le problème en supprimant cette deuxième requête et en la remplaçant par une condition simple.
J'ai aussi modifié les requêtes :
$req = $bdd->query('SELECT * FROM annonces');
en
$req = $bdd->prepare('SELECT * FROM annonces');
$req->execute();
ce qui a réglé le problème du bouton 'Tout afficher' et de la première arrivée sur la page (qui devait aussi permettre d'afficher toutes les annonces).
Le problème maintenant, c'est que la fonction "Rechercher" ne fonctionne plus ! En effet, les annonces sont systématiquement toutes affichées, peu importe ce que je rentre dans mon formulaire de recherche !
Le plus étonnant, c'est que dans le code suivant :
<?php //AFFICHAGE DES ANNONCES
if(!isset($_POST['optionAffichage'])){ //Première arrivée sur la page
$req = $bdd->prepare('SELECT * FROM annonces');
$req->execute();
}
elseif($_POST['optionAffichage']=='afficherTout'){ //L'utilisateur a cliqué sur 'Tout afficher'
$req = $bdd->prepare('SELECT * FROM annonces');
$req->execute();
}
elseif($_POST['optionAffichage']=='afficherRecherche'){ //L'utilisateur a effectué une recherche
$niveauRecherche=$_POST['niveauRecherche'];
$matiereRecherche=$_POST['matiereRecherche'];
$req = $bdd->prepare("SELECT * FROM annonces WHERE (matiere1=:matiereRecherche OR matiere2=:matiereRecherche) AND (niveau=:niveauRecherche OR niveau='Collège/Lycée') ORDER BY salaire DESC");
$req->execute(array('matiereRecherche' => $matiereRecherche,
'niveauRecherche' => $niveauRecherche));
echo "RECHERCHE niveau : " .$niveauRecherche. " matiere : ".$matiereRecherche;
}
?><ul><?php
// On affiche toutes les annonces
while ($donnees = $req->fetch())
{
if($donnees['publiable']!=0)
{
//On mémorise l'id de l'annonce pour pouvoir la transmettre si un élève est intéressé.
$annonce=$donnees['id'];
?>
<li><?php echo $donnees['prenom']; ?> <?php echo $donnees['nom']; ?>, cours de <?php echo $donnees['matiere1']; ?>/<?php echo $donnees['matiere2']; ?>, niveau <?php echo $donnees['niveau']; ?>, pour <?php echo $donnees['salaire']; ?>€/h.
<?php
if($statut=='eleve')
{
//L'utilisateur est un élève, on peut lui demander s'il est intéressé
?>
<a href='detailsannonce.php?annonce=<?php echo $annonce; ?>'>Intéressé(e) ?</a>
<?php
}
}
} //Fin de la boucle d'affichage des annonces
?></li></ul><?php
$req->closeCursor();
?>
////////////////////////////////////////////FIN DE L'AFFICHAGE DES ANNONCES
La ligne où j'affiche $matiereRecherche et $niveauRecherche fonctionne parfaitement et se modifie en fonction de ce que je rentre dans mon formulaire. L'erreur étant toujours aussi mystérieuse que la précédente, j'en appelle encore à vous
Pour moi, mon code devrait marcher à merveilles, sachant que la table annonces contient bien tous les champs nécessaires (id, matiere1, matiere2, niveau, salaire...)