par
rononedex » 09 févr. 2023, 13:19
Bonjour,
Je ne pense pas qu'il y ai besoin de l'ajax juste une condition php qui va calculé la dernière insertion en bdd ce qu'il faut comprend c'est que je redirige en fonction de get page si j'ai une page en get, mais ce get sera supérieur a la page en court si j'ai une réponse qui incrémente mon nombre de page total a afficher et je sais pas comment calculé ça !
Voici ma pagination fonctionne avec altoRouter les global son temporaire.
Code : Tout sélectionner
<?php
namespace App;
class URL{
public static function getInt(string $name, ?int $default = null): ?int
{
global $router, $match;
if(!isset($_GET[$name])) return $default;
if($_GET[$name] === '0') return 0;
if(!filter_var($_GET[$name], FILTER_VALIDATE_INT)) {
if(isset($match['params']) && $match['params'] != null){
if(isset($match['params']['slug']) && $match['params']['slug'] != null){
header('Location:' . $router->generate($match['name'], ['slug' => $match['params']['slug'], 'id' => $match['params']['id']]));
}else{
header('Location:' . $router->generate($match['name'], ['id' => $match['params']['id']]));
}
}else{
header('Location:' . $router->generate($match['name']));
}
setFlash("Le paramètre $name dans l'url n'est pas un entier",'orange');
http_response_code(301);
exit();
}
return (int)$_GET[$name];
}
public static function getPositiveInt(string $name, ?int $default = null): ?int
{
global $router,$match;
$param = self::getInt($name, $default);
if($param !== null && $param <= 0){
if(isset($match['params']) && $match['params'] != null){
if(isset($match['params']['slug']) && $match['params']['slug'] != null){
header('Location:' . $router->generate($match['name'], ['slug' => $match['params']['slug'], 'id' => $match['params']['id']]));
}else{
header('Location:' . $router->generate($match['name'], ['id' => $match['params']['id']]));
}
}else{
header('Location:' . $router->generate($match['name']));
}
setFlash("Le paramètre $name dans l'url n'est pas un entier positif",'orange');
http_response_code(301);
exit();
}
return $param;
}
}
page viewtopic
Code : Tout sélectionner
if(isset($_GET['page']) && $_GET['page'] === '1'){
$uri = explode('?',$_SERVER['REQUEST_URI'])[0];
$get = $_GET;
unset($get['page']);
$query = http_build_query($get);
if(!empty($query)){
$uri = $uri . '?' . $query;
}
header('Location:' . $uri);
http_response_code(301);
exit();
}
/********
* pagination
*********/
use App\URL;
$PerPage = (int) $GetParams->GetParam(2);
$CurrentPage = URL::getPositiveInt('page', 1);
$smtp = $db->prepare('SELECT COUNT(id) FROM f_topics_reponse WHERE f_topic_id = ?');
$smtp->execute([intval($params['id'])]);
$Count = (int)$smtp->fetch(PDO::FETCH_NUM)[0];
$pages = ceil($Count/$PerPage);
//on vérifie si la page existe bien sinon on redirige si on a pas de réponse
if($CurrentPage > $pages && $CurrentPage > 1) {
setflash("Ce numéro de page n'hexiste pas","orange");
header('Location:' . $router->generate($match['name'], ['id' => $params['id']]));
http_response_code(301);
exit();
}
$offset = $PerPage * ($CurrentPage - 1);
//ici ma requête select from reponse ORDER BY f_topic_rep_date ASC LIMIT $PerPage OFFSET $offset");
C'est ici que je dois prendre en compte la futur page
Code : Tout sélectionner
$db->prepare("INSERT INTO f_topics_reponse SET f_user_id = ?, f_rep_name = ?, f_topic_reponse = ?, f_topic_id = ?, f_topic_rep_date = NOW()")->execute($i);
setFlash("Votre réponse a bien étais poster");
redirect($router->generate('viewtopic',['id' => $params['id'] . '?page=' . $pages . '#rep-' . $db->lastInsertId()]));
Bonjour,
Je ne pense pas qu'il y ai besoin de l'ajax juste une condition php qui va calculé la dernière insertion en bdd ce qu'il faut comprend c'est que je redirige en fonction de get page si j'ai une page en get, mais ce get sera supérieur a la page en court si j'ai une réponse qui incrémente mon nombre de page total a afficher et je sais pas comment calculé ça !
Voici ma pagination fonctionne avec altoRouter les global son temporaire.
[code]
<?php
namespace App;
class URL{
public static function getInt(string $name, ?int $default = null): ?int
{
global $router, $match;
if(!isset($_GET[$name])) return $default;
if($_GET[$name] === '0') return 0;
if(!filter_var($_GET[$name], FILTER_VALIDATE_INT)) {
if(isset($match['params']) && $match['params'] != null){
if(isset($match['params']['slug']) && $match['params']['slug'] != null){
header('Location:' . $router->generate($match['name'], ['slug' => $match['params']['slug'], 'id' => $match['params']['id']]));
}else{
header('Location:' . $router->generate($match['name'], ['id' => $match['params']['id']]));
}
}else{
header('Location:' . $router->generate($match['name']));
}
setFlash("Le paramètre $name dans l'url n'est pas un entier",'orange');
http_response_code(301);
exit();
}
return (int)$_GET[$name];
}
public static function getPositiveInt(string $name, ?int $default = null): ?int
{
global $router,$match;
$param = self::getInt($name, $default);
if($param !== null && $param <= 0){
if(isset($match['params']) && $match['params'] != null){
if(isset($match['params']['slug']) && $match['params']['slug'] != null){
header('Location:' . $router->generate($match['name'], ['slug' => $match['params']['slug'], 'id' => $match['params']['id']]));
}else{
header('Location:' . $router->generate($match['name'], ['id' => $match['params']['id']]));
}
}else{
header('Location:' . $router->generate($match['name']));
}
setFlash("Le paramètre $name dans l'url n'est pas un entier positif",'orange');
http_response_code(301);
exit();
}
return $param;
}
}
[/code]
page viewtopic
[code]
if(isset($_GET['page']) && $_GET['page'] === '1'){
$uri = explode('?',$_SERVER['REQUEST_URI'])[0];
$get = $_GET;
unset($get['page']);
$query = http_build_query($get);
if(!empty($query)){
$uri = $uri . '?' . $query;
}
header('Location:' . $uri);
http_response_code(301);
exit();
}
/********
* pagination
*********/
use App\URL;
$PerPage = (int) $GetParams->GetParam(2);
$CurrentPage = URL::getPositiveInt('page', 1);
$smtp = $db->prepare('SELECT COUNT(id) FROM f_topics_reponse WHERE f_topic_id = ?');
$smtp->execute([intval($params['id'])]);
$Count = (int)$smtp->fetch(PDO::FETCH_NUM)[0];
$pages = ceil($Count/$PerPage);
//on vérifie si la page existe bien sinon on redirige si on a pas de réponse
if($CurrentPage > $pages && $CurrentPage > 1) {
setflash("Ce numéro de page n'hexiste pas","orange");
header('Location:' . $router->generate($match['name'], ['id' => $params['id']]));
http_response_code(301);
exit();
}
$offset = $PerPage * ($CurrentPage - 1);
//ici ma requête select from reponse ORDER BY f_topic_rep_date ASC LIMIT $PerPage OFFSET $offset");
[/code]
C'est ici que je dois prendre en compte la futur page
[code]
$db->prepare("INSERT INTO f_topics_reponse SET f_user_id = ?, f_rep_name = ?, f_topic_reponse = ?, f_topic_id = ?, f_topic_rep_date = NOW()")->execute($i);
setFlash("Votre réponse a bien étais poster");
redirect($router->generate('viewtopic',['id' => $params['id'] . '?page=' . $pages . '#rep-' . $db->lastInsertId()]));
[/code]