variable $_GET dans une fonction

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 10:11

merci FuZZyLine

Mammouth du PHP | 985 Messages

26 oct. 2009, 13:20

Repost ton code en entier maintenant qu'il est mis à jour grace a ce Topic.
Une vue d'ensemble du code de ton script simplifiera les choses :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 15:44

Bonjour, Dr@ke
Voici le code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <link rel="stylesheet" TYPE="text/css" href="css/style.css" />
</head>
<body>
  <table width="560" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>
        Nos tissus :
      </td>
    </tr>
  </table>
<?php   
  //function pagination($current_page, $nb_pages, $link='?menu=4&cat=2&page=%d', $around=3, $firstlast=1){ 
 
  function pagination($current, $nb_page, $link=false, $arround=3, $firstLast=1){
  $value = "?menu=4&cat=".$_GET["cat"]."&page=%d";  
  $link = !$link ? $value : $link;

  $pagination = ' ';  
  if (!ereg('%d', $link)) $link .= '%d';  
    if ($nb_pages > 1){        
    // Lien précédent  
    if ($current_page > 1)  
    $pagination .= '<a class="prevnext" href="'.sprintf($link, $current_page-1).'" title="Page précédente">&laquo; Précédent</a>';  
    else  
    $pagination .= '<span class="prevnext disabled">&laquo; Précédent</span>';       
      // Lien(s) début  
      for ($i=1 ; $i<=$firstlast ; $i++){  
      $pagination .= ' ';  
      $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>';  
      }       
    // ... après pages début ?  
    if (($current_page-$around) > $firstlast+1)  
    $pagination .= ' &hellip;';       
    // On boucle autour de la page courante  
    $start = ($current_page-$around)>$firstlast ? $current_page-$around : $firstlast+1;  
    $end = ($current_page+$around)<=($nb_pages-$firstlast) ? $current_page+$around : $nb_pages-$firstlast;  
      for ($i=$start ; $i<=$end ; $i++){  
      $pagination .= ' ';  
      if ($i==$current_page)  
      $pagination .= '<span class="current">'.$i.'</span>';  
      else  
      $pagination .= '<a href="'.sprintf($link, $i).'">'.$i.'</a>';  
      }       
    // ... avant page nb_pages ?  
    if (($current_page+$around) < $nb_pages-$firstlast)  
    $pagination .= ' &hellip;';       
    // Lien(s) fin  
    $start = $nb_pages-$firstlast+1;  
    if($start <= $firstlast) $start = $firstlast+1;  
      for ($i=$start ; $i<=$nb_pages ; $i++){  
      $pagination .= ' ';  
      $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>';  
      }       
    // Lien suivant  
    if ($current_page < $nb_pages)  
    $pagination .= ' <a class="prevnext" href="'.sprintf($link, ($current_page+1)).'" title="Page suivante">Suivant &raquo;</a>';  
    else  
    $pagination .= ' <span class="prevnext disabled">Suivant &raquo;</span>';  
    }
  return $pagination;  
  } 
  // Numero de page (1 par défaut)  
  if(isset($_GET['page']) && is_numeric($_GET['page']))  
  $page = $_GET['page'];  
  else  
  $page = 1;   
  // Nombre d'info par page  
  $pagination = 35;   
  // Numéro du 1er enregistrement à lire  
  $limit_start = ($page - 1) * $pagination;  
  // Nb d'enregistrement total  
  Connect_mySql(); 
  $nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM article WHERE supArt='.$_GET['cat'].'');  
  $nb_total = mysql_fetch_array($nb_total);  
  $nb_total = $nb_total['nb_total'];   
  // Pagination  
  $nb_pages = ceil($nb_total / $pagination);
  // liste des articles
  Connect_mySql();
  $query = "SELECT * FROM article WHERE supArt = ".$_GET['cat']." ORDER BY image ASC LIMIT ".$limit_start.",".$pagination;
  $result = mysql_query($query) or die("<font color='#006600'>&nbsp;Erreur sur la page affiche_liste_art.php - (ligne 85).</font>");
  $i = 0;
  while($row = mysql_fetch_row($result)){
  $i++;
?>
  <div class="content">
    <a href="<?php echo $_SERVER['PHP_SELF']; ?>?menu=4&art=<?php echo $row[0]; ?>"><img src="./admin/media_tissus/<?php echo $row[12]; ?>" title="<?php echo $row[3]; ?>&nbsp;&euro;/m" border="0" width="75" height="60" /></a>  
    <br />
      <center><?php echo $row[1]; ?></center>
  </div>
<?php
  }
  mysql_close();
?>
  <div class="pagination">
    <?php echo pagination($page, $nb_pages); ?>
  </div>
</body>
</html>           

Mammouth du PHP | 985 Messages

26 oct. 2009, 16:17

function pagination($current, $nb_page, $link=false, $arround=3, $firstLast=1){
  $value = "?menu=4&cat=".$_GET["cat"]."&page=%d";  
  $link = !$link ? $value : $link;
A première vue, je ferais plus comme cela:
function pagination($current = '', $nb_page = '', $link = '', $arround=3, $firstLast=1) {
          $value = '?menu=4&cat=' . $_GET['cat'] .'&page=%d';  
          $link = (empty($link)) ? $value : $link;
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 16:33

Voici le retour
  function pagination($current, $nb_page, $link, $arround=3, $firstLast=1){    /* <----------- ligne 22 */
  $link = (isset($link)) ? $link : "?menu=4&cat=".$_GET["cat"]."&page=%d";
-----------------------------
  <div class="pagination">
    <?php echo pagination($page, $nb_pages); ?>  <!-- <------------- ligne 103 -->
  </div>
</body>
</html>  
---------------------------
Warning: Missing argument 3 for pagination(), called in C:\wamp\www\essai\affiche_liste_art.php on line 103 and defined in C:\wamp\www\essai\affiche_liste_art.php on line 22

Mammouth du PHP | 985 Messages

26 oct. 2009, 16:36

Oui j'avais corrigé :wink: :
function pagination($current = '', $nb_page = '', $link = '', $arround=3, $firstLast=1) {
          $value = '?menu=4&cat=' . $_GET['cat'] . '&page=%d';  
          $link = (empty($link)) ? $value : $link;
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 16:56

Aprés avoir inceré ta correction, plus de message d'erreur mais la barre
<?php echo pagination($page, $nb_pages); ?>
de lien pour passer de page en page n'apparait pas.

ViPHP
fab
ViPHP | 2657 Messages

26 oct. 2009, 17:02

Essaye de mettre des echo un peu partout dans ton code pour voir le chemin parcouru :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 985 Messages

26 oct. 2009, 17:05

Replace:
<?php echo pagination($page, $nb_pages); ?>
Par:
<?php 
$page = (isset($page)) ? trim($page) : null;
$nb_pages = (isset($nb_pages)) ? trim($nb_pages) : null;
if(!empty($page) && !empty($nb_pages)) {
echo pagination($page, $nb_pages);
}
else {
echo 'Lien Invalide';
}
?>
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 17:20

En placant un echo "toto"; juste après ton code, toto s'affiche en bas à la place de la barre de pagination
après quelque soit l'emplacement de echo "toto"; entre :
  $pagination = '';  
  if (!ereg('%d', $link)) $link .= '%d';  
    if ($nb_pages > 1){        
    // Lien précédent  
    if ($current_page > 1)  
    $pagination .= '<a class="prevnext" href="'.sprintf($link, $current_page-1).'" title="Page précédente">&laquo; Précédent</a>';  
    else  
    $pagination .= '<span class="prevnext disabled">&laquo; Précédent</span>';       
      // Lien(s) début  
      for ($i=1 ; $i<=$firstlast ; $i++){  
      $pagination .= ' ';  
      $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>';  
      }       
    // ... après pages début ?  
    if (($current_page-$around) > $firstlast+1)  
    $pagination .= ' &hellip;';       
    // On boucle autour de la page courante  
    $start = ($current_page-$around)>$firstlast ? $current_page-$around : $firstlast+1;  
    $end = ($current_page+$around)<=($nb_pages-$firstlast) ? $current_page+$around : $nb_pages-$firstlast;  
      for ($i=$start ; $i<=$end ; $i++){  
      $pagination .= ' ';  
      if ($i==$current_page)  
      $pagination .= '<span class="current">'.$i.'</span>';  
      else  
      $pagination .= '<a href="'.sprintf($link, $i).'">'.$i.'</a>';  
      }       
    // ... avant page nb_pages ?  
    if (($current_page+$around) < $nb_pages-$firstlast)  
    $pagination .= ' &hellip;';       
    // Lien(s) fin  
    $start = $nb_pages-$firstlast+1;  
    if($start <= $firstlast) $start = $firstlast+1;  
      for ($i=$start ; $i<=$nb_pages ; $i++){  
      $pagination .= ' ';  
      $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>';  
      }       
    // Lien suivant  
    if ($current_page < $nb_pages)  
    $pagination .= ' <a class="prevnext" href="'.sprintf($link, ($current_page+1)).'" title="Page suivante">Suivant &raquo;</a>';  
    else      
    $pagination .= ' <span class="prevnext disabled">Suivant &raquo;</span>';  
    }
rien
si je place un echo "toto"; entre
return $pagination;  
  } 

  // Numero de page (1 par défaut)  
  if(isset($_GET['page']) && is_numeric($_GET['page']))  
  $page = $_GET['page'];  
  else  
  $page = 1;   
  // Nombre d'info par page  
  $pagination = 20;   
  // Numéro du 1er enregistrement à lire  
  $limit_start = ($page - 1) * $pagination;  
  // Nb d'enregistrement total  
  Connect_mySql(); 
  $nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM article WHERE supArt='.$_GET['cat'].'');  
  $nb_total = mysql_fetch_array($nb_total);  
  $nb_total = $nb_total['nb_total'];   
  // Pagination  
  $nb_pages = ceil($nb_total / $pagination);
  // liste des articles
  Connect_mySql();
  $query = "SELECT * FROM article WHERE supArt = ".$_GET['cat']." ORDER BY image ASC LIMIT ".$limit_start.",".$pagination;
  $result = mysql_query($query) or die("<font color='#006600'>&nbsp;Erreur sur la page affiche_liste_art.php - (ligne 85).</font>");
  $i = 0;
  while($row = mysql_fetch_row($result)){
  $i++;
  echo "toto";
?>
  <div class="content">
    <a href="<?php echo $_SERVER['PHP_SELF']; ?>?menu=4&art=<?php echo $row[0]; ?>"><img src="./admin/media_tissus/<?php echo $row[12]; ?>" title="<?php echo $row[3]; ?>&nbsp;&euro;/m" border="0" width="75" height="60" /></a>  
    <br />
      <center><?php echo $row[1]; ?></center>
  </div>
<?php
  }
  mysql_close();
?>
  <div class="pagination">
    <?php echo pagination($page, $nb_pages); ?>
  </div>
</body>
</html>          
toto aparait un fois en haut de la page ou plusieurs fois si je l'incère dans la boucle while

Mammouth du PHP | 985 Messages

26 oct. 2009, 17:24

Ce n'est pas toto qui faut afficher mais le contenu des variables au fur et à mesure de ton code, pour vérifier l'exécution de ton code...

Sinon remplace le bout de code que je t'ai donné dans mon précédent message, cela sécurisera au moins cette partie la.
Restera plus si cela ne t'affiche pas "Lien Invalide", de chercher l'erreur dans ta fonction...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 18:18

Excuse-moi Dr@ke, j'avais sauté une étape, je n'avais pas vu ton message précédent
J'ai placé ton bout de code et : même resultat pas de barre ni de message Lien Invalide

J'espère avoir bien compris lorsque tu me demandais de faire un echo des varaiables
J'ai donc fait un echo des 5 variables à chaque ligne de la page
echo $current."<br />";
echo $nb_page."<br />";
echo $link."<br />";
echo $arround."<br />";
echo $firstLast;
juste après ton code j'affiche les différentes valeur :
1
2
?menu=4&cat=2&page=%d
3
1
et rien entre
if ($nb_pages > 1){
--- code ---
}
juste avant return j'affiche a nouveau les valeurs de variables

j'espère que ca pourra t'aider car moi il y a longtemps que je suis larguer

Mammouth du PHP | 985 Messages

26 oct. 2009, 18:34

Juste avant le return $pagination; , juste pour tester le temps de trouver l'erreur:
echo ' Variable $pagination: ' . var_dump($pagination);
Pour les autres variables, tu peux utiliser la même technique pour savoir a quoi correspond ce que tu affiches...
Et ce même si cela n'affiche rien du tout...
En faisant comme cela, tu vas découvrir quelles variables font défaut et ainsi pouvoir détecter et corriger l'erreur...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 20:13

Voici le résultat affiché à ton code
string(0) "" Variable $pagination:

Mammouth du PHP | 985 Messages

26 oct. 2009, 20:51

Donc ta variable $pagination est vide au moment ou ta fonction envoie sa valeur a ton echo pour afficher le lien.
Donc Normal que cela n'affiche rien.

[EDIT]
Petit conseil: Met des accolades avec tes if,ifelse et else...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.