Salut à tous !
Il y a quelques mois, j'ai décidé de coder mon site, dynamique, et plein de trucs cools !
Malheureusement, j'ai un script qui ne marche pas... Et c'est très triste...

Code (PHP) :

<?php
$page = intval($_GET['page']);
$limit1 = (intval($_GET['page']) - 1) * 12;
$limit2 = intval($_GET['page']) * 12;
$ans = $db->query('SELECT * FROM matable ORDER BY id DESC LIMIT '. $limit1 .', 12');

$countreq = $db->query('SELECT * FROM matable');
$count = 0;
while($a = $countreq->fetch()) {
  $count++;
}
if ($limit1 >= $count) {
  header('Location: ?page=1');
}
function pageExist($e) {
  if ($e === 'previous') {
    if ($_GET['page'] == '1') {
      echo 'blocked';
    } else {
      $previouspage = intval($_GET['page']) - 1;
      echo '" href="?page='. $previouspage;
    }
  } elseif ($e === 'next') {
    if ($page === ceil($count / 12)) {
      echo 'blocked';
    } else {
      $nextpage = intval($_GET['page']) + 1;
      echo '" href="?page='. $nextpage;
    }
  }
}
?>

Et le HTML :

<a class="changepage previous <?php pageExist('previous'); ?>" >Previous page</a>
<a class="changepage next <?php pageExist('next'); ?>">Next page</a>

En gros, le but est d'avoir une page qui récupère les projets via une requête MySQL, et, là, je souhaite ajouter deux boutons permettants de changer de pages ("Previous", "Next"), et que quand il n'y a pas de page(s) suivante(s), le bouton "Next" soit grisé (class "blocked").

J'utilises le truc avec $count parce que quand j'utilises la requête SQL faite pour, le reste de mon script PHP plante...
Est-ce qu'une personne bienfaisante pourrait me venir en aide ? C'est sur cet algo que je bloque :

    if ($page === ceil($count / 12)) {
      echo 'blocked';
    } else {
      $nextpage = intval($_GET['page']) + 1;
      echo '" href="?page='. $nextpage;
    }

Lorsque il y a un double égal, c'est tout le temps bloqué, alors que quand il y en a un triple, c'est toujours OK, et ça echo le href.

Merci d'avance ;)

Antoine.

11 réponses


TransientDev
Réponse acceptée

Oui, en modifiant les paramètres de la fonction j'ai le lien next qui se desactive.

<a class="changepage button next blocked">Next page</a>

Il faut ajouter $count en tant que deuxieme variable car elle est definier en dehors de la fonction

function pageExist($e, $count) {
// même code
}

et l'appel devient donc

<?php pageExist('next', $count); ?>

pour le design j'ai quelques soucis a le visualiser (problèmes d'url) donc je vous direz par mail quand j'aurais de le temps de faire les modifications pour le visualiser.

Bonjour,
vous n'avez pas déclaré la variable $page. Au dessus vous utilisez

if ($_GET['page'] == '1') {
//  ...
}
Takeback
Auteur

Si, je l'avais fait, mais pas montré le code... Je vais le faire !

Au temps pour moi, après quelque tests je pense que l'erreur viens du fait que tu compare un int avec un float

ceil($count / 12)

retournera un float, il faudra donc que tu pense à utiliser intval ici aussi

Takeback
Auteur

Oui, j'ai vu ça. Et sinon, alors que mets un intval() sur les deux, y'a jamais le résultat "blocked", de plus, le code se fout de ma gueule (sérieusement). Lorsque que je mets l'algo dans la fonction, c'est bogué, mais, attention, quand je mets l'algo en plein dans le code HTML, pour voir le résultat, et bien, ça marche...

Hum, étrange... c'est peut-être un problème de portée de la variable $page, essayez de la définir dans la fonction plutôt, ou passez la en tant que second paramètre.

Takeback
Auteur

J'avais fait le test avec intval($_GET['page']), mais toujours le même résultat... (j'ai remplacé tous les $pages par des intval). Si vous le voulez, je peux vous donner le code source.

PS : Je viens de tester en mettant le code PHP directement dans la balise HTML et pas dans une fonction, et ça marche super bien. Ça a aucun sens...

Vous pouvez en effet, soit par un lien vers un drive ou un depot github soit a cette adresse: transientdev@gmail.com
Pensez à me joindre un schema de votre base de donnée et je vous répondrez au plus tôt

Takeback
Auteur

Vous avez téléchargé le zip que je vous ai donné par email ?

Takeback
Auteur

Merci beaucoup !

Takeback
Auteur

Vous pouvez regarder le design ici.