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

Langage PHP Discussion :

Fatal error: Unsupported operand types dans pagination


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut Fatal error: Unsupported operand types dans pagination
    Bonjour à tous,
    j'ai un gros soucis avec une pagination.
    Je tente de trouver le problème mais pas moyen d'identifier si une variable ou autre chose cause cela.
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    function pag_partenaires(){
    		 /*** set the page name ***/
    		 $page_name = htmlentities($_SERVER['PHP_SELF']);
     
    		 /*** set the number of results per page ***/
    		 $limit = 20;
     
    		 /*** check the SESSION array for the total_records ***/
    		 if(!isset($_SESSION['total_records']))
    		 {
    		    try
    		    {
    		        /*** first get the count of records ***/
     
    		        $_SESSION['total_records'] = $this->dbParts->selectCountParts();
    		    }
    		    catch (Exception $e)
    		    {
    		        $_SESSION['total_records'] = 0;
    		    }
    		 }
    		    /*** check for a page number in GET ***/
    		    if( isset($_GET["page"]) == false)
    		    {
    		        /*** no page in GET ***/
    		        $page = 1;
    		    }
    		    /*** if the page number is not an int or not within range, assign it to page 1 ***/
    		     elseif(filter_var($_GET['page'], FILTER_VALIDATE_INT, array("min_range"=>1, "max_range"=>$_SESSION['total_records'])) == false)
    		     {
    		        $page = 1;
    		    }
    		    else
    		    {
    		        /*** if all is well, assign it ***/
    		        $page = (int)$_GET['page'];
    		    }
     
    		 /*** if we have no results then there is no point in going on ***/
    		 if($_SESSION['total_records'] == 0)
    		 {
    		    $content = 'No Records Available';
    		 }
    		 else
    		 {
    		    /*** feed the variables to the pager class ***/
    		    $pager = Pagination::getPagerData($_SESSION['total_records'], $limit, $page);
     
    		    /*** retrieve the variables from the pager class ***/
    		    $offset = $pager->offset;
    		    $limit  = $pager->limit;
    		    $page   = $pager->page;
     
    		    /*** begin the menu ***/
    		    $menu = '';
     
    		    /*** if this is page 1 there is no previous link ***/
    		    if($page != 1)
    		    {
    		        $menu .= '<li><a href="'.$page_name.'?page='.($page - 1).'">&lt;&lt; PREV </a></li>';
    		    }
     
    		    /*** loop over the pages ***/
    		    for ($i = 1; $i <= $pager->num_pages; $i++)
    		    {
    		        if ($i == $pager->page)
    		        {
    		            $menu .= '<li class="selected">'.$i.'</li>';
    		        }
    		        else
    		        {
    		            $menu .= '<li><a href="'.$page_name.'?page='.$i.'">'.$i.'</a></li>'."\n";
    		        }
    		    }
     
    		    /*** if we are on the last page, we do not need the NEXT link ***/
    		    if ($page < $pager->num_pages)  
    		    {
    		        $menu .= '<li><a href="'.$page_name.'?page='.($page + 1).'"> NEXT &gt;&gt;</a></li>';
    		    }
     
    		    /*** our sql statement ***/
    		    $sql = 'SELECT * FROM partenaires WHERE sector_activity = :sector_activity LIMIT :limit OFFSET :offset';
    		    /*** run the query ***/
    			$res = $this->layer->select($sql,array(':sector_activity'=>$this->getSector,':limit'=>$limit,':$offset'=>$offset));
    		    /*** the elements table content ***/
    		    $content = '';
    		    foreach ($res as $el)
    		    {
    		        $content .= '
    		        <tr><td>'.$el['id'].'</td>
    		        <td>'.$el['name'].'</td>
    		        <td>'.$el['sitename'].'</td></tr>';
    		    }
    		 }
    la fonction fautive du moins je pense :
    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
    public static function getPagerData($num_pages, $limit, $page){
    	    /*** the number of pages ***/
    	    $num_pages = ceil($num_pages / $limit);
    	    $page = max($page, 1);
    	    $page = min($page, $num_pages);
    	    /*** calculate the offset ***/
    	    $offset = ($page - 1) * $limit;
    	    /*** a new instance of stdClass ***/
    	    $ret = new stdClass;
     
    	    /*** assign the variables to the return class object ***/
    	    $ret->offset   = $offset;
    	    $ret->limit    = $limit;
    	    $ret->num_pages = $num_pages;
    	    $ret->page     = $page;
    	    /*** return the object ***/
    	    return $ret;
    	}
    L'erreur retourne que la ligne 47 cause lle petit prob :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $num_pages = ceil($num_pages / $limit);
    Peut être aurai je du simplifier le code pour avoir un truc fonctionnel
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A priori, soit $num_pages, soit $limit (soit les deux) ne sont pas des nombres.
    Essaye d'ajouter un var_dump des deux avant l'opération, pour voir ce qu'il ya réellement dedans et vérifie ce que tu envoie dans la fonction...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    j'ai revu le script pour faire plus simple en me basant sur le tuto de ce site.
    Le seul problème c'est que sur certaine page la pagination déborde et m'affiche trois liens en plus avec un contenu vide.
    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
    $limit = 25;
    		$sql1 = 'SELECT COUNT(*) as total FROM partenaires WHERE lang = :lang AND sector_activity = :sector_activity';
    		$request = $this->layer->select($sql1,array(':lang'=>$this->getLang,':sector_activity'=>$this->getSector));
    		foreach ($request as $t) $total = $t['total'];
    		$num_pages = ceil($total/$limit);
    		if($this->page > $limit || $this->page <= 0) {
    			$this->page = 1;
    		}
    		$offset = $this->page;
    		if($offset > $num_pages)
    		{
    		  $offset = $num_pages;
    		}
    		$start = $limit * ($this->page-1);
    		$sql = 'SELECT partenaires.id as idparts,partenaires.sitename, partenaires.name,partenaires.link_partner,partenaires.email,
    		partenaires.sector_activity,partenaires.lang,partenaires.date_submit ,count(envoimails.date_rep) AS repondu,
    		count(envoimails.date_insert) as inserer FROM partenaires INNER JOIN envoimails ON ( partenaires.id = envoimails.parts_id ) WHERE lang = :lang 
    		AND sector_activity = :sector_activity group by parts_id LIMIT '.$start.', '.$limit;//order by partenaires.email ASC,partenaires.id ASC
    		$res = $this->layer->select($sql,array(':lang'=>$this->getLang,':sector_activity'=>$this->getSector));
    		//foreach ($res as $message) $message['name'];
    		$this->smarty->assign('partner', $res);
    		if($num_pages>1){
    		$num = null;
    			for($i=1; $i<$num_pages; $i++){
    			     if($i==$offset)
    			     {
    			         $num .= '<li class="selected">'.$i.'</li>'; 
    			     }	
    			     else
    			     {
    			          $num .= '<li> <a href="?page='.$i.'">'.$i.'</a> </li>';
    			     }
    			   }
    			$this->smarty->assign('numb', $num);
    			}
    		}
    Une fois ce script fonctionnel je le refondrai pour en faire une class
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/08/2013, 11h53
  2. Réponses: 6
    Dernier message: 15/05/2013, 13h06
  3. [PHP 5.2] Fatal error: Unsupported operand types
    Par ju0123456789 dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2010, 18h07
  4. [MySQL] Fatal error: Unsupported operand types in..
    Par Sekigawa dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/03/2008, 10h58
  5. [PEAR][DB] Unsupported operand types in Renderer.php
    Par brissou dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/05/2007, 13h50

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