variable $_GET dans une fonction

Eléphanteau du PHP | 27 Messages

25 oct. 2009, 09:24

Bonjour à tous,

Voila je rencontre un souci lorsque je veux incérer une variable $_GET['cat'] dans une fonction
J'ai récupéré sur le net une fonction pour faire de la pagination et j'aimerai incérer cette variable dans la fonction
$_GET['cat'] vaut par exemple 2
en forcant la valeur tous fonctionne correctement.

Voici le debut de la fonction
function pagination($current_page, $nb_pages, $link='?menu=4&cat=2&page=%d', $around=3, $firstlast=1) {

mais si j'incère $_GET['cat'] à la place du 2, la : message erreur
merci pour votre aide

Eléphant du PHP | 369 Messages

25 oct. 2009, 09:41

Salut tout seul,
Bonjour à tous,
Voila je rencontre un souci lorsque je veux incérer une variable $_GET['cat'] dans une fonction
J'ai récupéré sur le net une fonction pour faire de la pagination et j'aimerai incérer cette variable dans la fonction
$_GET['cat'] vaut par exemple 2
en forcant la valeur tous fonctionne correctement.
Voici le debut de la fonction
function pagination($current_page, $nb_pages, $link='?menu=4&cat=[b]2[/b]&page=%d', $around=3, $firstlast=1) {
mais si j'incère $_GET['cat'] à la place du 2, la : message erreur
merci pour votre aide
Tu aurais pas le texte de l'erreur soulevée?

S'il s'agit de ce que j'imagine il te faut donner par défaut une valeur à $_GET['cat'], celle-ci ne doit
pas exister au premier appel donc tu dois lui assigner uine valeur par défaut. Ton script, une fois modifié,
peut ressembler à ceci:
if (!isset($_GET['cat'])) $_GET['cat'] = -1;
J'ai présumé que la valeur ne vaudra jamais -1 et donc par un test secondaire on peut savoir si cette
valeur est une vrai valeur ou une pseudo valeur attribuée par défaut.

En revanche si $_GET['cat'] doit, de fait, exister c'est que tu as une erreur en amont.

Voili, voilou... Si ca ne répond pas à ton besoin oublie pas de poster le type d'erreur dans
ton prochain post.

@+ ;)

Eléphanteau du PHP | 27 Messages

25 oct. 2009, 10:19

Bonjour, FuZZyLine
Je suis un vrai débutant et plus tout jeune donc beaucoup de misère à comprendre

Si je fais un echo $_GET['cat']; la valeur est : 2

Si j'incère la variable $_GET['cat'] dans la fonction
function pagination($current_page, $nb_pages, $link='?menu=4&cat='$_GET['cat']'&page=%d', $around=3, $firstlast=1){

voici le type de messgage d'erreur que je rencontre lors de l'incertion de ma variable.
Parse error: syntax error, unexpected T_VARIABLE, expecting ')' in C:\wamp\www\essai\affiche_liste_art.php on line 11

as tu une soluce ?, si oui comment la métre en place ?

Eléphant du PHP | 369 Messages

25 oct. 2009, 10:44

Re,
Bonjour, FuZZyLine
Je suis un vrai débutant et plus tout jeune donc beaucoup de misère à comprendre
Si je fais un echo $_GET['cat']; la valeur est : 2
Si j'incère la variable $_GET['cat'] dans la fonction
function pagination($current_page, $nb_pages, $link='?menu=4&cat='$_GET['cat']'&page=%d', $around=3, $firstlast=1){
voici le type de messgage d'erreur que je rencontre lors de l'incertion de ma variable.
Parse error: syntax error, unexpected T_VARIABLE, expecting ')' in C:\wamp\www\essai\affiche_liste_art.php on line 11
as tu une soluce ?, si oui comment la métre en place ?
Re-script ainsi je pense que ce sera bon:
function pagination($current_page, $nb_pages, $link = '?menu=4&cat='.$_GET['cat'].'&page=%d', $around=3, $firstlast=1)
Ci-dessus c'est très moche... voir je l'interdirais tellement c'est... (joke)
Essaie de prendre en compte le script suivant.
$link = '?menu=4&cat='.$_GET['cat'].'&page=%d';
function pagination($current_page, $nb_pages, $link, $around=3, $firstlast=1)
Ca implique juste d'assigner $link avant de lancer la fonction.

En gros tel que as écrits ta ligne tu tentais de concaténner l'inéxistant. Ce qui, biensur, ne peut être fait.
La concaténation se fait par le point " . ".
Ensuite, et pour mémoire, tout ce qui est entre ' (simple quote) est considéré comme du texte.

Ca devrait tourner sans erreur je pense. @+ ;)

Eléphanteau du PHP | 27 Messages

25 oct. 2009, 11:08

FuZZyLine, merci pour ta rapidité et tes explications
Effectivement je n'ais plus de message d'erreur a ce niveau
mais un nouveau!

Warning: Missing argument 3 for pagination(), called in C:\wamp\www\essai\affiche_liste_art.php on line 91 and defined in C:\wamp\www\essai\affiche_liste_art.php on line 11

je te joins le code de ma page en esperant que tu y verras plus claire, tous cela me dépasse

<!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>

<?php
$link = '?menu=4&cat='.$_GET['cat'].'&page=%d';
function pagination($current_page, $nb_pages, $link, $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 = 5;
# 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 75).</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>
<p class="content">
&nbsp;&nbsp;&nbsp;<?php echo $row[1]; ?>
</p>
</div>
<?php
}
mysql_close();
?>
<div class="pagination">
<?php echo "<center>".pagination($page, $nb_pages)."</center>"; ?>
</div>
</body>
</html>

Eléphant du PHP | 369 Messages

25 oct. 2009, 12:11

FuZZyLine, merci pour ta rapidité et tes explications
Effectivement je n'ais plus de message d'erreur a ce niveau
mais un nouveau!
Warning: Missing argument 3 for pagination(), called in C:\wamp\www\essai\affiche_liste_art.php on line 91 and defined in C:\wamp\www\essai\affiche_liste_art.php on line 11
je te joins le code de ma page en esperant que tu y verras plus claire, tous cela me dépasse
[...]
2/3 points si je peux me permetre: Encadre toujours ton code sur le forum du tag php, bouton au dessus
de la zone texte. Hésite pas à utiliser le tag Quote quand il s'agit de message/citation...

Points concerant l'écriture d'un script propre:
> Indenter
Sinon on ne comprend rien (ou presque)
> Les lignes de com: Préfère le // ou les /* */ au #.
Le dièse est peu utilisé et n'est pas génial (sémantiquement parlant) je trouve.

Bon, maintenant ton erreur: Troisème variable inéxistante. La fonction en attend un.
Ajoute ceci et ca devrait rouller
// Remplace le $link hors fonction, celui tout en haut dans ton script
//
$linkByDefault = '?menu=4&cat='.$_GET['cat'].'&page=%d';

function pagination($current_page, $nb_pages, $link = $linkByDefault, $around=3, $firstlast=1)
{
.
.
.
Effectivement tu peux aussi revenir à la version antèrieur, en ce cas c'est accèpté...
Mais bah, c'est à toi de voir. J'avais pas saisi dans tes posts précédents qu'il s'agissait d'une valeur
par défaut. Pour ma défence c'était pas précisé eh eh eh ;)
function pagination($current_page, $nb_pages, $link = '?menu=4&cat='.$_GET['cat'].'&page=%d', $around=3, $firstlast=1)
Autre point important, et tu véras l'intérêt plus tard, ne nomme jamais tes variables comme tu nommes
les fonctions. Ca embrouille les yeux. C'est pas illégal c'est juste : moche et vraiment ca devient pénible.

L'explication sur ta fonction maintenant:

Celle-ci attend le nombre exacte d'élément indiqués lors de création. Si certain de ses éléments son
"auto-déclaré" en ce cas tu peux ne pas les envoyer lors du lancement au contraire ceux qui ne sont
pas "auto-déclarés", eux, tu dois forcément les y mettre. J'appel auto-déclaré les éléments qui sont
suivis d'une assignation par défaut comme.
function toto($aaa, $bbb = "ByDefault")
{
   echo $aaa;
   echo $bbb;
}
$aaa n'est pas assigné par défaut donc il faut l'intégrer au lancement
$bbb est déclaré par défaut donc n'est pas obligatoire
// Tu peux donc lancer une fonction de ce type ainsi:
//
toto("Hello");

// Ou
//
toto("Hello", "Assignation");
Voila, j'espère avoir été compréhensible et que biensur ton soucis est levé.

@+ bon code ;)

Eléphanteau du PHP | 27 Messages

25 oct. 2009, 12:49

Bien compris sur la notion des tag (pour la prochaine fois) et bien compris aussi pour // ou les /* */ au lieu de #

Mais helas FuZZyLine ca ne roule pas comme je le souhaine, on revient au point de départ désolé de te soliciter de nouveau
$linkByDefault = '?menu=4&cat='.$_GET['cat'].'&page=%d';  
function pagination($current_page, $nb_pages, $link=$linkByDefault, $around=3, $firstlast=1){
Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\essai\affiche_liste_art.php on line 11

ViPHP
fab
ViPHP | 2657 Messages

25 oct. 2009, 14:59

Essaye directement ça plutot :
function pagination($current_page, $nb_pages, $link= '?menu=4&cat='.$_GET['cat'].'&page=%d', $around=3, $firstlast=1){
Je suis pas certain qu'en valeur par défaut d'un paramètre de fonction on puisse mettre une variable
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 369 Messages

25 oct. 2009, 15:23

Re,
[...]
Mais helas FuZZyLine ca ne roule pas comme je le souhaine, on revient au point de départ désolé de te soliciter de nouveau
$linkByDefault = '?menu=4&cat='.$_GET['cat'].'&page=%d';  
function pagination($current_page, $nb_pages, $link=$linkByDefault, $around=3, $firstlast=1){
Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\essai\affiche_liste_art.php on line 11
Bon, voyons une solution autre: Moche, je te l'accorde mais qui marche... (très, très moche)
   // Simulation de ta fonction
   //
  function pagination($current, $nb_page, $link = false, $arround = 3, $firstLast = 1)
  {
     // Assignation et prise en charge de l'argument $link
     //
     $value = "?menu=4&cat=".$_GET["eee"]."&page=%d";
     $link = !$link ? $value : $link;

     // Test
     //
     echo $current."<br>";
     echo $nb_page."<br>";
     echo $link."<br>";
     echo $arround."<br>";
     echo $firstLast."<br>";

     // Finalisation du test par url
     //
     return "<a href=\"index.php".$link."\">azerty</a>";
  }

  // Lancement de la fonction
  //
  $test = pagination(1, 10);
  echo $test;
Ce qu'il faut comprendre: Je donne par défaut a ton argument $link la valeur faux.
A l'intèrieur de la fonction je teste sa valeur: si faux, alors, je lui assigne $value au contraire,
s'il vaut "différent de faux" je garde sa propre valeur.

Il y a une solution plus propre mais j'avoue que je bloque lol Mais, oui, y a plus propre !
Ceci étant, j'ai testé ca marche.

@+ bon code ;)

EDIT: @fab: Tu viens de pointer l'erreur, si je m'étais posé cette question avant me serais pas pris la tête lol

Eléphanteau du PHP | 27 Messages

25 oct. 2009, 16:49

j'essai de comprendre avec dificulté je l'avou, mais je me suis peut être lancé sur un gros morceau, je crois qu'il ni que comme ca que je pourai avancer
j'ai testé ton bout de code et effectivement avec la commande echo on affiche bien les differentes valeurs

1
2
?menu=4&cat=2&page=%d
3
1

on s'apercoit que la valeur de ma variable "$_GET['cat']" est présente dans ?menu=4&cat=2&page=%d

ma question est la suivante et j'espère ne plus t'embêter après car je croix avoir déjà trop abusé de ta gentillesse.
comment mêtre tout cela en place ?
j'ai cherché mais pas trouvé
car en appliquant uniquement
 
function pagination($current, $nb_page, $link = false, $arround = 3, $firstLast = 1){  
    $value = "?menu=4&cat=".$_GET["cat"]."&page=%d";
    $link = !$link ? $value : $link;
rien ne s'affiche, je veux dire par la aucun lien (pour me permettre de passer de page en page)
j'ai peut être oublié quelque chose, mais quoi !!

Eléphant du PHP | 369 Messages

25 oct. 2009, 17:29

j'essai de comprendre avec dificulté je l'avou, mais je me suis peut être lancé sur un gros morceau,
je crois qu'il ni que comme ca que je pourai avancer j'ai testé ton bout de code et effectivement avec
la commande echo on affiche bien les differentes valeurs
[...]
on s'apercoit que la valeur de ma variable "$_GET['cat']" est présente dans ?menu=4&cat=2&page=%d
ma question est la suivante et j'espère ne plus t'embêter après car je croix avoir déjà trop abusé de
ta gentillesse. comment mêtre tout cela en place ?
j'ai cherché mais pas trouvé
car en appliquant uniquement
 
function pagination($current, $nb_page, $link = false, $arround = 3, $firstLast = 1)
{  
    $value = "?menu=4&cat=".$_GET["cat"]."&page=%d";
    $link = !$link ? $value : $link;
rien ne s'affiche, je veux dire par la aucun lien (pour me permettre de passer de page en page)
j'ai peut être oublié quelque chose, mais quoi !!
J'en perds mon latin. Ecrit tel quel ca doit marcher.

...Je viens de regarder de nouveau ton script (plus haut) et un point a retenu mon attention:
la fonction sprintf. Celle-ci permet de formater une chaine mais je constate que tu n'y indiques
aucun format autrement dit seul le premier argument est attribué.

Exemple de son usage : $string = sprintf("Chaine : %s Chiffre : %d", "Hello", 123564);
Ce que tu as écrits: sprintf($link, $current_page-1);

Un conseil essai de virer tous les sprintf et remplace par une concaténation normale (a renouveller
autant de fois que sprintf est présent). J'ai repris ton ancien script je ne sais s'il a changé depuis.
$pagination .= '<a class="prevnext" href="'.sprintf($link, $current_page-1).'" title="Page précédente">&laquo; Précédent</a>'
Remplace par:

1)
$pagination .= '<a class="prevnext" href="'.$link.$current_page-1.'" title="Page précédente">&laquo; Précédent</a>'
2)

[*]Ou... Evitant ainsi de trop dénaturer ton propse script
$pagination .= '<a class="prevnext" href="'.sprintf("%s%d", $link, $current_page-1).'" title="Page précédente">&laquo; Précédent</a>'
Vraiment pas certain que ca donne quelque chose mais je vois vraiment rien d'autre, désolé.

Je repasse plus tard... @+ ;)

EDIT: [*] J'aimerai pas qu'on ré-écrive ce que je fais, j'essaie, donc, de rester un minimum dans l'esprit du tien ;)
Essai la solution 1 et/ou 2 mais ca doit donner le même résultat.

@+ ;)

Eléphanteau du PHP | 27 Messages

25 oct. 2009, 21:12

J'ai essayé tes 2 soluces sans succès
Je te remerci d'avoir essayé de résoudre mon souci

Je garderai un oeil sur le forum au cas ou
merci encore

ViPHP
fab
ViPHP | 2657 Messages

26 oct. 2009, 05:06

Ca signifie quoi sans succes? Tu en es ou là exactement et quels sont tes messages d'erreurs?
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, 07:02

Bonjour Fab
Avec toute les manipulations que m'a proposé FuZZyLine, je n'ai plus de message d'erreur mais aussi plus d'affichage concernant la barre de lien pour passer de page en page.
lorsque je met la valeur de la variable $_GET['cat'] en dur
exemple cat = 2 ou 5 ou autre, j'affiche bien mes articles avec le nombre de page tout s'affiche correctement (pour cette categorie).
function pagination($current_page, $nb_pages, $link='?menu=4&cat = 2&page=%d', $around = 3, $firstlast = 1){
si j'utilise la modification proposé par FuZZyLine:
function pagination($current, $nb_page, $link = false, $arround = 3, $firstLast = 1){
  $value = "?menu=4&cat=".$_GET["cat"]."&page=%d";  
  $link = !$link ? $value : $link;
la valeur $_GET['cat'] est bien prise en compte (vu dans la barre des taches en passant la souris sur les differents liens categorie), mais je n'affiche que la première page avec le nombre d'articles déterminés mais rien en bas de ma page pas de lien pour passer à la page 2 etc..
j'ai pensé qu'il s'agissait d'un problème d'affichage (css) mais même en passant outre, toujours pas d'affichage de cette fameuse barre de lien.
Voila Fab j'espère avoir été assez explicite sur mon souci.

Eléphant du PHP | 369 Messages

26 oct. 2009, 09:54

Salut,
Bonjour Fab
[...]
J'avoue que si fab peut t'aider ca me ferait assez plaisir de lire la réponse.
Inutile de dire que je n'ai d'autre idée mais que j'hésiterais pas à reposter si une me vient.

@+ ;)