Modiffier cours 6 pour PDO

Répondre
jackbocar
le 19/01/2007 à 19:31
jackbocar
Bonjour,

Comment puis-je faire des modifications efficaces du comment faire un affichage page par page pour l'utiliser avec PDO ?

cours N° 6 : http://www.lephpfacile.com/howto/index.php?p=6


J'ai essayé, sans résultats.

Je ne vois pas par quoi changer les $query de :
$query = $_SERVER['PHP_SELF'].'?debut=';

Merci de votre aide

Jack Bocar
LA GLOBULE
le 19/01/2007 à 20:21
LA GLOBULE
A priori, c'est une couche qui fait abstraction du serveur de base de données.

Bref, je vois pas en quoi ca change le comment faire, vu que la fonction traite 0 truc en SQL.
moogli
le 21/01/2007 à 16:52
moogli
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&eacute;ponse trouv&eacute;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&eacute;ponse trouv&eacute;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 !

smiley
Il en faut peu pour être heureux !!!!!
jackbocar
le 21/01/2007 à 20:10
jackbocar
Bonjour,

Merci de ta réponse, j'ai testé tes options, ça ne s'affiche pas plus.

Je crois que j'ai compris ce qui ne vas pas, c'est plus que probable la requête count(*). Ca ne compte pas, donc, cela ne peut rien afficher en résultat.

Je n'ai pas trouvé ce qu'il fallait écrire pour un simple comptage. Car pour un espace membres, j'ai trouvé cette ligne sur mon ouvrage "quote" :

$login = $dbh->quote($login);
J'ai fais un espace membres avec ->quote et il fonctionne très bien pour enregistrer les nouveaux membres, mais comme pour l'affichage page à page, le count ne fonctionne pas comme les requêtes mysql_query(), il ne me dit pas si il existe un login identique, il revient sur la page formulaire.php sans tenir compte du message d'erreur.


Pour ce qui est de revenir aux requête mysql_query(), je continue à les utiliser, mon site fonctionne avec ces requêtes, PDO, c'est pour être en phase avec PHP5 et voir le fonctionnement.

Pour ce qui est des SELECT, des INSERT INTO dans la base, des UPDATE, des DELETE, des SET, j'ai tout réussi à faire fonctionner, la seule chose visiblement qui pose problème, c'est COUNT.

Merci encore de tes commentaires.

Il faut que je fouille encore sur le net pour arriver à faire fonctionner ce COUNT.

Si tu as une idée pour COUNT, merci de me dire comment faire.

Jack Bocar
jackbocar
le 24/01/2007 à 10:36
jackbocar
Bonjour,

Après une journée de tests et de modifications de mon code, je n'arrive à affiche que 2 résultats par page et deux liens.

Alors que je me suis servi d'une table (menus) où il y a 385 ID d'enregistrements.

Quelqu'un peut-il me dire pourquoi ?

Quelqu'un peut-il me donner de nouvelles idées de recherches pour de nouveaux tests.

Comment arriver aux bons résultats escomptés ?

Jack Bocar

L'adresse du script sur le Wall :


http://www.lephpfacile.com/wall/wall.php?id=3616

Merci de votre aide.

Jack Bocar
jackbocar
le 24/01/2007 à 13:21
jackbocar
Re bonjour,

J'ai oublié de préciser ceci :
$nb_affichage_par_page = 2;

Sur le Wall, il n'y a que 2 affichage, car si j'augmente, plus rien ne s'affiche.

Jack Bocar
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours