IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

pagination passage parametre déprecié


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut pagination passage parametre déprecié
    Bonjour,

    l'activation vers PHP 5.3 soulève chaque jour son lot de tracasseries

    aujourd'hui, c'est la pagination qui ne passe plus


    L'ancienne formule de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    http://www.domaine.com/rubrique/liste.php?nbinf=20&nbpage=20


    ne permet plus de passer à la page suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    //pagination							
     
     
    if (!$nbpage){
    $nbpage=20;
    }
     
    if (!$nbinf){
    $nbinf=0;
    } 
     
    if (!$choix){
    $choix=0;
    } else {
    $choix -=1;
    $nbinf = $choix * $nbpage ;
    }
    $nbsup= $nbinf + $nbpage;
    $nbprec = $nbinf - $nbpage;
    $page = $nbinf / $nbpage;
    $page = $page + 1;
    $nbtotalpage = $total / $nbpage;
    $nbtotalpage = ceil($nbtotalpage);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ($page != $nbtotalpage) {
    echo "<a href='http://www.domaine.com/rubrique/liste.php?nbinf=$nbsup&amp;nbpage=$nbpage'>page suivante</a>\n";

    Il n'y a pourtant pas de signal d'erreur, mais il ne se passe tout simplement rien

    Y aurait il des paramètres dépréciés dans cette fonction

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Oui, les Register Globals ont été dépréciés pour des raisons (plus qu'évidentes) de sécurité.

    Voir: http://php.net/manual/fr/security.globals.php

    Tu dois désormais utiliser les superglobales $_GET ou $_POST, préférablement avec les filtres, pour obtenir des informations de l'utilisateur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut
    Merci pour le lien

    En essayant d'installer un nouveau code , j'ai l'erreur suivante:

    mysql_fetch_row() expects parameter 1 to be resource, boolean given in
    Unable to count rows: Unknown column '$now' in 'where clause'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     $now = date('Ymd'); 
    $query = mysql_query('SELECT COUNT(*) FROM evenement WHERE publication="oui" AND date_fin >= $now  ');
     
    while ($evenement = mysql_fetch_object ($resultat))
       {
     
       $id_evenement = $evenement->id_evenement;
       $date_debut = $evenement->date_debut;
       $date_fin = $evenement->date_fin;
       }
     
     
    $fetched = mysql_fetch_row($query) 
    	or die('Unable to count rows: '.mysql_error());
    $count = current($fetched);
    Je n'arrive pas à passer cette étape de compter les occurences dans la base

    la date Ymd qui est pourtant bien déclarée

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Une erreur de concaténation dans la requête je pense

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Quel est le type du champ date_fin dans ta base de données ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    Quel est le type du champ date_fin dans ta base de données ?
    Bonjour,

    C'est un varchar dans une table ISO 8859-1

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Ok donc tu as une erreur dans ton sql :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS nbRec FROM evenement WHERE publication = 'oui' AND date_fin >= '$now';
    D'ailleurs pourquoi utiliser un varchar pour un champ date ?
    Integer je veux bien mais varchar !?!!??

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut
    merci rawsrc

    Ce champs aurait du être bien paramétré dès le départ mais pour l'instant je ne m'aventurerais pas à le changer

    J'ai toujours cette erreur:

    Selection error:Unknown column '$now' in 'where clause'

    le doit se retrouver ailleurs dans cette partie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $fetched = mysql_fetch_row($query) 
    	or die('Unable to count rows: '.mysql_error());
    $count = current($fetched);
     
    // Create the Spagination object and set up count & limit per page
    $pagi = Spagination::create($count, 15);
     
    // Pagination calculated all needed params, let's get the actual data
    $books = mysql_query('
    	SELECT * FROM evenement WHERE publication="oui" AND date_fin >= $now 
    	LIMIT '.$pagi->limit().' 
    	OFFSET '.$pagi->offset()
    ) or die('Selection error:'.mysql_error());

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Oui c'est normal, mon code avait pour but de te montrer qu'il manquait des guillemets autour de ta valeur (texte) $now :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $now   = date('Ymd'); 
    $query = mysql_query("SELECT COUNT(*) FROM evenement WHERE publication = 'oui' AND date_fin >= '$now' ");

  10. #10
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Selection error:Unknown column '$now' in 'where clause'
    C'est dû au fait que tu utilise des guillements simple or le remplacement des variables par leur valeurs dans les chaines de caractères ne s'effectue qu'avec des guillements doubles. Voir http://www.php.net/manual/fr/languag....syntax.double

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str = "hello";
    var_dump('say $str to peter');
    // est différent de
    var_dump("say $str to peter");

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut
    Merci de vos précisions,

    Maintenant la pagination s'affiche sous un beau tableau
    (il s'agit d'un script valide PHP 5 que l'on trouve sur codecanyon.net )

    Mais le problème initial n'est pas résolu
    Les pages suivantes restent identiques ... (tjrs sous PHP 5.3)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    // Get count of some records in the db
     
    // Get count of some records in the db
    $now   = date('Ymd'); 
    $query = mysql_query("SELECT COUNT(*) FROM evenement WHERE publication = 'oui' AND date_fin >= '$now' ");
     
     
    while ($evenement = mysql_fetch_object ($resultat))
       {
     
       $id_evenement = $evenement->id_evenement;
       $date_debut = $evenement->date_debut;
       $date_fin = $evenement->date_fin;
       $datefin = DateTime::createFromFormat('Ymd', $date_fin)->format('Y-m-d');
       }
     
     
    $fetched = mysql_fetch_row($query) 
    	or die('Unable to count rows: '.mysql_error());
    $count = current($fetched);
     
    // Create the Spagination object and set up count & limit per page
    $pagi = Spagination::create($count, 15);
     
    // Pagination calculated all needed params, let's get the actual data
    $books = mysql_query('
    	SELECT *  FROM evenement WHERE publication = "oui" AND date_fin >= "$now"
    	LIMIT '.$pagi->limit().' 
    	OFFSET '.$pagi->offset()
    ) or die('Selection error:'.mysql_error());
     
    while ($evenement = mysql_fetch_object ($resultat))
       {
    $pagination->template('digg');
     
     
    $pagi = Spagination::create(300)
    	->limit(15) 
    	->current_page(10)
    	->count(500) 
    	->lang('ba')
    	->template('digg')
    	->query_key('key_in_query_string')
    	->render(); 
    /**
     * $pagi is a string containing HTML now because render() 
     * returns rendered template
     */
     // Get the current limit
    $limit = $pagi->limit();
    // Total number of items
    $count = $pagi->count();
    // Current pagination page
    $page = $pagi->current_page();
    // Query key in $_GET array this pagination is using
    $query_key = $pagi->query_key();
    // Template
    $template = $pagi->template();
    $pagi->url_handler(function($page){
    	// ... return the URL with page defined
    });
    // Current language
    $lang = $pagi->lang(ba);
     $html = (string) $pagi; // Get the pagination HTML in $html var, same as:
    $html = $pagi->render(); 
     
    $pagi->render(FALSE); // 
    function custom_url_handler($page)
    {
    	return 'http://www.domaine.com/rubrique/liste.php'.$page;
    }
    $pagi->url_handler('http://www.domaine.com/rubrique/liste.php');
     
     
       }
    // Display pagination 
    echo $pagi; // Echoes the pagination HTML inplaceoes the pagination HTML

  12. #12
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Tu as une erreur dans le sql de $books. Relis la remarque faite par Benjamin concernant l'utilisation des guillemets simples ou doubles.
    Voici le sql corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $books = mysql_query("
       SELECT * FROM evenement WHERE publication = 'oui' AND date_fin >= '$now'
       LIMIT {$pagi->limit()} 
       OFFSET {$pagi->offset()}"
    )
    Faut lire et relire le code.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut
    j'ai une erreure avec les guillemets comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $books = mysql_query("
    	SELECT * FROM evenement WHERE publication = 'oui' AND date_fin >= '$now'
    	LIMIT '.$pagi->limit().
    	OFFSET '.$pagi->offset()") or die('Selection error:'.mysql_error());


    Faut -il à chaque fois compléter les champs entre parenthèse de type

    render () ?

    ou est-ce qu'il y en a qu'il faut laisser vides ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    // Pagination calculated all needed params, let's get the actual data
    $books = mysql_query('
    	SELECT * FROM evenement WHERE publication = "oui" AND date_fin >= "$now"
    	LIMIT '.$pagi->limit().' 
    	OFFSET '.$pagi->offset()) or die('Selection error:'.mysql_error());
     
    while ($evenement = mysql_fetch_object ($resultat))
       {
    $pagination->template('blue');
     
     
    $pagi = Spagination::create(50)
    	->limit(15) 
    	->current_page(10)
    	->count(100) 
    	->lang('fr')
    	->template('blue')
    	->query_key('key_in_query_string')
    	->render(); 
    /**
     * $pagi is a string containing HTML now because render() 
     * returns rendered template
     */
     // Get the current limit
    $limit = $pagi->limit(15);
    // Total number of items
    $count = $pagi->count(100);
    // Current pagination page
    $page = $pagi->current_page(10);
    // Query key in $_GET array this pagination is using
    $query_key = $pagi->query_key();
    // Template
    $template = $pagi->template();
    $html = (string) $pagi; // Get the pagination HTML in $html var, same as:
    $html = $pagi->render(); 
     
    $pagi->render(FALSE); // Echoes the pagination HTML
    $pagination->template('blue');
    // Current language
    $lang = $pagi->lang(fr);
    Merci !

  14. #14
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par event Voir le message
    j'ai une erreure avec les guillemets comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $books = mysql_query("
    	SELECT * FROM evenement WHERE publication = 'oui' AND date_fin >= '$now'
    	LIMIT '.$pagi->limit().
    	OFFSET '.$pagi->offset()") or die('Selection error:'.mysql_error());
    C'est normal, tu ouvres avec des guillemets doubles et tu refermes avec des simples -> erreur (j'ai tout mis sur une ligne histoire de bien voir les guillemets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $books = mysql_query("SELECT * FROM evenement WHERE publication = 'oui' AND date_fin >= '$now' LIMIT " . $pagi->limit() . " OFFSET " . $pagi->offset()) or die('Selection error:'.mysql_error());
    Citation Envoyé par event Voir le message
    Faut -il à chaque fois compléter les champs entre parenthèse de type

    render () ?
    Pas de réponse à cette question vu que je ne connais pas du tout le script que t'utilises, donc c'est à toi de lire la doc...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 33
    Par défaut
    Merci beaucoup rawsrc

    Il n'y a plus d'erreures , cela devrait normalement le faire, mais toujours pas de défilement

    Je me demandais si le fait d'être sur un mutu pouvait être la cause, et s'il fallait ajouter une ligne dans le htaccess

  16. #16
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par event Voir le message
    Je me demandais si le fait d'être sur un mutu pouvait être la cause, et s'il fallait ajouter une ligne dans le htaccess
    Absolument pas et ça n'a rien à voir avec les fichiers .htaccess
    C'est la manière dont tu utilises le script qui est problématique. Y a un ou deux trucs que tu ne dois pas correctement paramétrer.

Discussions similaires

  1. passage parametre
    Par souchraf dans le forum Oracle
    Réponses: 2
    Dernier message: 15/05/2006, 15h21
  2. probleme passage parametre dans l'url IE
    Par kurthectic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/04/2006, 15h40
  3. [XSLT] [JAXP] passage parametres lors de chainage xslt
    Par Pi2 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 22/02/2006, 09h38
  4. [servlet] passage parametre entier
    Par cmoa59 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/03/2005, 10h03
  5. Fichier bat + FTP + passage parametres
    Par Leti dans le forum Scripts/Batch
    Réponses: 20
    Dernier message: 13/12/2004, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo