lut,
vu t'est pb avec pdo, puorquoi ne pas utiliser simplement mysql ? la sécurisatin passe, généralement, par de la réfléxion et l'utilisation de fonction telle
mysql_real_escape_string et pas mal de rigeur !
pour ce qui est du problème posé, si tu nous disais ce qui ne va pas se serait quand même plus simple non ?
pour ce qui est de la variable $query dans la fonction barre_navigation, elle ne sert qu'a afficher la barre de navigation, que veut tu modifier à cela ? il n'y a aucune utilisation du sgbd dans cette fonction !
ensuite il reste simplement à remplacer le mysql_query() par le query() de pdo et le traitement via le foreach, ce que tu a fait !
Mais à tu compris la subtilitée de ces quelques ligne de code ?
<?php
$sql = 'SELECT count(*) FROM catalogue';
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune réponse trouvée';
}
?>
pour résumer :
juste après le mysql_query $nb_total est un tableau qui contient à l'index 0 la valeur retournée par le
count(*).
le test if (($nb_total = $nb_total[0]) == 0), réalise dans un premier temps une affectation :
$nb_total = $nb_total[0]. Cette affectation à pour résultat de "transformer" le tableau $nb_total en un entier qui aurat pour valeur, celle de l'index 0 du tableau qu'il était précedement ! (perdu la ? :) ).
ensuite arrive le test à proprement parler qui se résume à if ($nb_total == 0) (ça j'espère que tu comprend :) ).
Quand on regarde ton code :
<?php
$sql = 'SELECT count(*) as nb_total FROM catalogue';
$sth = $dbh->query($sql);
$result = $sth->fetchALL();
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune réponse trouvée';
}
?>
on remarque une erreur (fatale) car $nb_total n'existe pas (tableau ou scalaire peut importe). ceci simplement par ce que dans ton copié / collé tu n'a pas gardé le $nb_total de globule, et tu a, à la place, $resultat.
le test devient donc :
$sql = 'SELECT count(*) as nb_total FROM catalogue';
$sth = $dbh->query($sql);
$result = $sth->fetchALL();
if (($nb_total = $resultat[0]) == 0) {
echo 'Aucune réponse trouvée';
}
fait bien attention à ce genre d'oublie !
tu devrais utiliser la méthode : closeCursor() afin de libérer le jeux de résultat et éviter un problème lors d'une éventuelle autre requete !
Quand à la fermeture du lien vers le sgbd il uffit d'affecter la valeur null à l'objet pdo instancier !