variable $_GET dans une fonction

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 21:22

Comment y remédier ?

Mammouth du PHP | 985 Messages

26 oct. 2009, 21:36

Déjà:
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.

ViPHP
fab
ViPHP | 2657 Messages

26 oct. 2009, 21:42

dr@ke a bien vu, je pense que le problème principal de ta fonction c'est une histoire d'accolades!
Tu utilises des if et else sans, mais connais-tu la différence? Quand tu mets pas d'accolades SEULE la première instruction qui suit le if est pris en compte comme appartenant à la fonction.
Par exemple :
$var = 'a';
if($var == 'b')
   echo 'Un';
   echo 'Deux';
Va t'afficher : Deux

Donc si tu veux que plusieurs lignes appartiennent à la condition il faut utiliser les }
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 27 Messages

26 oct. 2009, 22:53

besoin d'aide, je dois m'embrouiller les pinceaux quelque part.
j'ai essayé, réessayé et réréessayé mais KO, je ni arrive pas

je post à nouveau le code, si quelqu'un peut m'aider a placer les accolades } car je commence a desespèrer
<!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 = '', $nb_page = '', $link = '', $arround=3, $firstLast=1) {    
  $value = '?menu=4&cat='.$_GET['cat'].'&page=%d';  
  $link = (empty($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 83).</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
    $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';
    }
    ?>
  </div>
</body>
</html>
merci d'avance

Eléphant du PHP | 369 Messages

27 oct. 2009, 21:21

besoin d'aide, je dois m'embrouiller les pinceaux quelque part.
j'ai essayé, réessayé et réréessayé mais KO, je ni arrive pas
je post à nouveau le code, si quelqu'un peut m'aider a placer les accolades } car je commence a desespèrer
merci d'avance
Je crois me souvenir, d'après ton premier post, que tu n'as fais qu'ajouter le $_GET. Si le script
marche sans (et je crois que tu l'as précisé) ce n'est pas un problème d'accolades. ...simple suputation
demandant confirmation.

Si tu as toujours la version originale peux-tu la placer ici?
Non que t'auras une solution mais ca permétra d'y voir plus claire.

Assures toi de bien indenter ton script, je suis persuadé que tu y véras bien mieux.

Nota: Pour l'entête de la fonction, mettre un bool en argument me semble mieux...
mais, bon, affaire de gout ;)

Bon j'y go espérant que tu ais une réponse qui puisse solutionner le problème,
je reviendrai voir de temps en temps ou tu en es, @+ ;)

Eléphanteau du PHP | 27 Messages

27 oct. 2009, 22:36

Bonjour FuZZyLine
notre ami dr@ke a trouvé comment incerer la variable dans la fonction
function pagination($current = '', $nb_page = '', $link = '', $arround=3, $firstLast=1) {    
  $value = '?menu=4&cat='.$_GET['cat'].'&page=%d';  
  $link = (empty($link)) ? $value : $link;

la variable $_GET['cat'] est bien prise en compte mais je n'affiche pas ma barre de pagination
alors qu'en mettant en dur une valeur à cat= tous fonctionne correctement, j'ai ma barre de pagination

Ci-dessous le code d'origne (celui qui fonctionne)
Je fait différentes manipulations, différents test mais comme précisé au tout début, je ne suis qu'un débutant, parfois difficile de lire et de mettre en oeuvre vos explications
  function pagination($current_page, $nb_pages, $link='?menu=4&cat=2&page=%d', $around=3, $firstlast=1){  
  $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 = 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 77).</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="106" height="85" /></a>  
    <br />
      <center><?php echo $row[1]; ?></center>
  </div>
<?php
  }
  mysql_close();
?>
  <div class="pagination">
    <?php echo "<center>".pagination($page, $nb_pages)."</center>"; ?>
  </div>
cordialement

Eléphant du PHP | 369 Messages

28 oct. 2009, 11:02

Salut,
Bonjour FuZZyLine
notre ami dr@ke a trouvé comment incerer la variable dans la fonction
function pagination($current = '', $nb_page = '', $link = '', $arround=3, $firstLast=1) {    
  $value = '?menu=4&cat='.$_GET['cat'].'&page=%d';  
  $link = (empty($link)) ? $value : $link;
function pagination($current = '', $nb_page = '', $link = false, $arround=3, $firstLast=1)
{    
  $value = "?menu=4&cat=".$_GET["cat"]."&page=%d";  
  $link = !$link ? $value : $link;
  [...]

C'est plus pertinant, le résulat, bien qu'identique reste plus rapide ET marche suivant tes propos
précédents mais à toi de voir. Chacun ses gouts comme j'ai dis.
la variable $_GET['cat'] est bien prise en compte mais je n'affiche pas ma barre de pagination
alors qu'en mettant en dur une valeur à cat= tous fonctionne correctement, j'ai ma barre de pagination
Ce n'est donc pas un problème d'accolades... Si biensur (comme spécifié) tu n'as fais qu'ajouter le GET

Seule une comparaison de l'original sur ton script modifé pourra t'apporter une réponse.

Pose des tests ainsi:
// Ta valeur à tester dans un print_r ou un var_dump
print_r($ta_valeur);
die("Ligne : ".__LINE__);
Ci-dessous le code d'origne (celui qui fonctionne)
Je fait différentes manipulations, différents test mais comme précisé au tout début, je ne suis qu'un débutant, parfois difficile de lire et de mettre en oeuvre vos explications
T'en fais pas, je ne me considère pas comme un gourou du php lol

Me suis permis de ré-indenter/re-visiter ton script. On a chacun sa façon d'indenter, la mienne est celle-ci.
A toi de réindenter à ta manière.
<?php
   // !!! IMPORTANT: Ajoute les lignes qui suivent
   //
   // Complément sur les erreurs, ajoute cette ligne en haut de ta page. 
   // Très utile lors du développement.
   //
   error_reporting(E_ALL | E_STRICT);
   ini_set("display_error", 1);

   function pagination($current_page, $nb_pages, $link='?menu=4&cat=2&page=%d', $around=3, $firstlast=1)
   {  
      $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 = 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 77).</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="106" height="85" /></a>  
    <br />
      <center><?php echo $row[1]; ?></center>
  </div>
<?php
  }
  mysql_close();
?>
  <div class="pagination">
    <?php echo "<center>".pagination($page, $nb_pages)."</center>"; ?>
  </div>
Nota sur le script: J'en viens à me demander si vraiment le GET que tu veux mettre est utile...
Au vu de ce script le GET est assigné en amont puis traité. Autrement dit l'ajout que tu fais ne peut
qu'entrer en conflit avec celui déja traité.

Certe, c'est ma conclusion mais... Je dois pas être loin de la solution.

@+ bon code ;)

Eléphanteau du PHP | 27 Messages

28 oct. 2009, 20:22

Bonjour à tous

Tout d'abord, je tiens à remercier toutes les personnes qui ont contribué à la résolution de mon souci et
plus particulièrement à FuZZyLine qui m'a permis en quelque minute de résoudre mon problème avec son bout de code
<?php
   // !!! IMPORTANT: Ajoute les lignes qui suivent
   //
   // Complément sur les erreurs, ajoute cette ligne en haut de ta page. 
   // Très utile lors du développement.
   //
   error_reporting(E_ALL | E_STRICT);
   ini_set("display_error", 1);
?>
Mais une petite explication s'impose
En effet après avoir incéré le code de FuZZyLine, là l'horreur plusieurs variables n'étaient pas ou plus déclarées !!!!
Dans la fonction d'origine,
<?php
function pagination($current = '', $nb_page = '', $link = false, $arround = 3, $firstLast = 1) {
?>

la variable $current n'existe pas, il fallait la remplacer par $current_page (manqué _page)
la variable $nb_page n'existe pas, il fallait la remplacer par $nb_pages (manque un s)
la variable $arround n'existe pas, il fallait la remplacer par $around (un seul r)
la variable $firstLast n'existe pas, il fallait la remplacer par $firstlast (le l en minuscule)
il faillait écrire :
function pagination($current_page = '', $nb_pages = '', $link = false, $around = 3, $firstlast = 1){
après avoir modifié une par une ces variables HO miracle cela fonctionne, je redecouvre ma barre de pagination et qui plus ai fonctionne merveilleusement bien

Encore une fois MERCI à tous
Merci pour tous vos conseilles, que j'appliquerais a la lettre.
Grace a vous tous, j'aurais apris plein de choses.

PS : FuZZyLine ce petit bout de code fera systematiquement partie de ma programation.

Eléphant du PHP | 369 Messages

28 oct. 2009, 21:11

Re,
Bonjour à tous
Tout d'abord, je tiens à remercier toutes les personnes qui ont contribué à la résolution de mon souci et
plus particulièrement à FuZZyLine qui m'a permis en quelque minute de résoudre mon problème avec son bout de code
[...]
après avoir modifié une par une ces variables HO miracle cela fonctionne, je redecouvre ma barre de pagination et qui plus ai fonctionne merveilleusement bien
Encore une fois MERCI à tous
Merci pour tous vos conseilles, que j'appliquerais a la lettre.
Grace a vous tous, j'aurais apris plein de choses.
Que ce problème soit résolu, c'est cool, mais qu'en plus tu en ais retiré une certaine expèrience je trouve
ca franchement satisfaisant. (Je t'avoue que ca me titillait un brin les neurones lol)
PS : FuZZyLine ce petit bout de code fera systematiquement partie de ma programation.
eh eh eh... ;)

J'y go, bonne continuation @+ ;)