SYSTÈME DE PAGINATION COMPLET

webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 27 avril 2010 à 09:23
genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 - 18 mars 2011 à 20:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51691-systeme-de-pagination-complet

genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 1
18 mars 2011 à 20:53
Je sais pas, il faudrait poster l'erreur dans la section forum. Moi je n'utilise pas EasyPHP, je préfère Wampserver qui pose moins de problème.
zouax Messages postés 9 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 20 janvier 2007
16 mars 2011 à 10:27
j'ai installé la dernière version d'easyphp et le message était :
Warning: PDO::__construct() [pdo.--construct]: [2002] Aucune connexion n'a pu ?tre ?tablie car l'ordinateur cible l'a (trying to connect via tcp://localhost:3306) in C:\Program Files (x86)\EasyPHP-5.3.5.0\www\...\index.php on line 20
echec connexion
puis apres ajout du $e->getMessage(); echo($e); die("echec connexion
"); le message ajouté est :
exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Aucune connexion n'a pu ?tre ?tablie car l'ordinateur cible l'a express?ment refus'e. ' in C:\Program Files (x86)\EasyPHP-5.3.5.0\www\a_x_i_b_l_e\phpPager\modeleIntermediaire\index.php:20 Stack trace: #0 C:\Program Files (x86)\EasyPHP-5.3.5.0\www\a_x_i_b_l_e\phpPager\modeleIntermediaire\index.php(20): PDO->__construct('mysql:host=loca...', 'root', '') #1 {main}echec connexion
avec :
$bdd = new PDO('mysql:host='.$host.';dbname='.$db, $login, $pass);
merci de votre aide
genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 1
15 mars 2011 à 23:27
Problème de connexion à la base de données, Faire un $e->getMessage() dans le bloc catch et vérifier les identifiants dans connexion.php
zouax Messages postés 9 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 20 janvier 2007
15 mars 2011 à 10:34
bonjour,
cette source est excellente, mais hélas, je n'arrive pas à trouver pourquoi j'ai un "echec connexion" en local avec easyphp5.3.1.0...
j'ai tenté de changer le port 3306 en 8888 ou 80 ou même le supprimer
$bdd = new PDO('mysql:host='.$host.';dbname='.$db.';port=3306', $login, $pass);

un coup de main serait bienvenue, j'aimerais devenir un vrai débutant svp
merci
mahmoudimohamed Messages postés 1 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 7 mai 2010
7 mai 2010 à 12:50
Bonjour,

Ta source est vraiment intéressante, bien faite. Mon besoin est de paginer ma page en trois parties. Comment peux je l'adapter pour faire ça. Merci pour la réponse.
genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 1
4 mai 2010 à 15:05
Cela veut dire que tu passes null à la méthode setPdo(); et pas un objet pdo. soit tu as fait une erreur de programmation ou soit tu n'a pas activé PDO. Je ne connais pas spécialement EasyPhp. Il faut déjà activer l'extension pdo correspondant à ta base de données dans php.ini
ex : extension=php_pdo_mysql.dll pour mysql
cs_dfs Messages postés 4 Date d'inscription dimanche 22 mai 2005 Statut Membre Dernière intervention 23 juin 2009
4 mai 2010 à 13:40
bonjour a tous
j'essaie d debute avec php et cette erreur me survient lors de ce script quelqu'un peut m'aider
//---------------------------------


Catchable fatal error: Argument 1 passed to PagerSql::setPdo() must be an instance of PDO, null given, called in C:\EasyPHP\www\exemplePager\pager\PagerSql.class.php on line 19 and defined in C:\EasyPHP\www\exemplePager\pager\PagerSql.class.php on line 59
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
3 mai 2010 à 17:22
salut

<< webdeb

Non, le constructeur parent doit être explicitement appellé dans la classe fille si la classe mère définie un constructeur. c'est bien spécifié içi :

http://fr2.php.net/manual/fr/language.oop5.decon.php

<< GENETAPT151

Pour une première, chapeau! çà remonte le niveau débutant. Merci pour eux.
genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 1
3 mai 2010 à 10:14
Salut, si le lien fonctionne mais il faut enlever l'espace 'exemplePage r'. j'ai tout essayé mais cette espace est toujours rajouté automatiquement dans la description.

lien : http://guillaume-genet.100webspace.net/exemplePager/index.php
cs_mouloudia16 Messages postés 7 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 3 mai 2010
3 mai 2010 à 10:07
Bonjour GENETAPT151,
Le lien ne fonctionne pas.
Bon courage.
Cordialement
genetApt151 Messages postés 30 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 2 avril 2011 1
28 avril 2010 à 19:13
Merci d'avoir répondu.

Effectivement, la classe PagerSql n'est pas très bien implémentée. Je vais passer l'objet pdo en paramètre pour abstraire la partie connexion à la base de données.

Passer des paramètres par défaut, j'y avais pas pensé. C'est un truc que je n’utilise jamais d'habitude. En fait, le problème avec PHP est qu'on ne peut pas définir plusieurs méthodes de même nom de prototype différent comme en java, c++.

Et enfin je ne vois pas l'intérêt d'avoir recours au mot-clé protected plutôt que private. ça sert à rien à part de permettre de faire n'importe quoi dans les classes filles et entrainer des erreurs.

Si on veut accéder aux attributs, il y a les setters et getters pour cela.
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
27 avril 2010 à 09:23
Hello,

Ta source est plutôt bien faite, bravo. Au niveau améliorations et simplification tu peux retirer le __construct() ne contenant qu'un appel au constructeur parent. Par défaut, PHP appel le constructeur parent donc on peut se passer de réimplémenter le constructeur si c'est uniquement pour appeler celui du parent. D'autre part, tu devrais retirer les commentaires de séparation de tes méthodes. Ils ne servent à rien si ce n'est d'alourdir la lecture du code.

Je te conseille plutôt d'avoir recours au mot-clé protected plutôt que private pour faciliter les héritages de tes classes. Dans tes constructeurs, il serait judicieux de passer au moins paramètre (obligatoire ou facultatifà : le nombre d'éléments par page:

public function __construct($nbByPage = 10)
{
$this->nbByPage = (int) $nbByPage;
}

Enfin pour le pager SQL, ton objet PDO je ne devrait pas être instancié directement dans ta méthode mais plutôt passé par dépendance au constructeur par exemple. Ca te permettra deux choses :

* Pouvoir réutiliser un objet PDO existant
* Faciliter les tests unitaires de tes classes en "mockant (simulant)" l'objet PDO avec un objet qui se comporte comme lui sans faire les requêtes SQL sur la base.

Ce qui donne :

class PagerSql extends Pager
{
protected $pdo, $table;
public function __construct(PDO $pdo, $table null, $nbByPage 10)
{
parent::__construct($nbByPage);

$this->pdo = $pdo;
$this->table = $table;
}
}

Je te laisse améliorer ton code en conséquence ;)

Hugo.
Rejoignez-nous