2016-09-02 7 views
0

J'ai un exemple URL http://www.example.com/index.php?pagina=some-cool-document&page=5

Lorsque le fichier PHP existe et le $_GET superglobale est réglé, il fonctionne. Par exemple:

http://www.example.com/index.php?pagina=some-cool-document&page=5 - Montrera page 5

http://www.example.com/index.php?pagina=some-cool-document&page=0 et http://www.example.com/index.php?pagina=some-cool-document&page=1 - affichera la page 1

s'il n'y a que dix pages et la valeur de la page est 11 ou une valeur plus élevée, il affichera la page 10 comme il ya seulement 10 pages à afficher

Les exemples ci-dessus et les informations sur mon URL fonctionnent.

Le problème auquel je suis confronté est lorsque la page n'est pas une clé de tableau ou lorsque la page n'est pas numérique, elle affiche une page sans rien; Quelques exemples d'URL:

http://www.example.com/index.php?pagina=some-cool-document (page est pas définie dans l'URL/pas une clé du tableau) http://www.example.com/index.php?pagina=some-cool-document&page=hello-world (page n'a pas de valeur numérique)

1: Je voudrais montrer le contenu de la page 1 au lieu d'un blanc page lorsque la page n'est pas une clé de tableau.

2: Je voudrais montrer un message tel que:

echo 'Sorry, the page ' . $_GET['page'] . 'is not available, please click <a href="http://www.example.com/index.php?pagina=some-cool-document&page=1">here</a> to visit the first page.'; 

lorsque la page est pas numérique, quelle est la meilleure façon de se débarrasser de la page blanche et d'obtenir ce travail?

Ce que j'ai essayé:

$page = isset($_GET['page']) && ($page = intval($_GET['page'])) > 0 ? $page : 1; // I use this option as it does some of the things I want... 

$page = (isset($_GET['page']) && trim($_GET['page']) == '1') ? trim($_GET['page']) : '1'; // found here on stackoverflow, 100% is not working for me :-(

$page = isset($_GET['page']) && ($page = !empty($_GET['page']) && is_null($_GET[page])) ? $_GET['page'] : 1; // This one also does some of the things I want to do but is not working that well 

J'ai aussi fait quelque chose avec if is_numeric($_GET['page']){ mais le résultat est toutes les pages sont la page 1 et pas de pages blanches pour la valeur non numérique à la page, donc je suis toujours tester d'autres options avec is_numeric()

J'ai essayé aussi quelques options avec array_key_exists, par exemple (ne fonctionnait pas pour moi):

if (!array_key_exists('page', $_GET)) { 
    $page = $_GET['page']; 
} else { 
    $_GET['page'] = ''; 
} 

Je suis toujours à lire les autres S questions tackOverflow et Google, mais je n'ai trouvé aucune méthode de travail pour résoudre ce problème ...

Quoi d'autre puis-je essayer de faire fonctionner cela?

EDIT

NOTE: Toutes les variables (dans un message) sont définis dans d'autres parties de mon code et tous sont définis avant que je les ai utilisés.

la valeur de la page doit être numérique sans autres caractères, juste [0-9] devrait être utilisé comme une valeur autre que montrer le message ..

Le code ci-dessous est le code que je l'utilise, il n'affiche pas la page 1 lorsque la valeur de la page est trop élevée et aucun contenu d'aucune page.

Le contenu de la page 1 est apparaître en dessous du message lorsque la valeur de la page contient d'autres caractères, je voudrais vous débarrasser du contenu et seulement montrer le message en cas d'erreur est détectée

$Last_Page = ceil($totalNodes/$perPage); 


$page = isset($_GET['page']) && ($page = intval($_GET['page'])) > 0 ? $page : 1; 

if(!is_int($_GET['page']) || $_GET['page'] < 0 || $_GET['page'] > $Last_Page){ 
    echo 'Sorry, the page ' . $_GET['page'] . ' is not available, please click <a href="' . $site_URI . '/index.php?pagina=' . $_GET['pagina'] . '&page=1">here</a> to visit the first page.'; 
    }else{ 
     $page = $_GET['page']; 
} 
+1

Si vous obtenez uniquement une page blanche, essayez d'activer le rapport d'erreurs. error_reporting (E_ALL); ini_set ('display_errors', 1); – markt

+0

@markt ce serveur ne permet pas de le faire, j'ai édité php.ini et réparé 1 erreur, une faute de frappe .. la page blanche a disparu et la page 1 est affichée quand '$ _GET ['page']' est indéfini – jagb

Répondre

0

J'ai écrit le code suivant et tout fonctionne très bien. Lorsque $_GET['page'] est pas défini, il affichera un autre contenu Lorsque $_GET['page'] est défini avec une valeur valide, il affichera le contenu de la page Lorsque $_GET['page'] est définie par une valeur non valide, il affichera un message d'erreur

$Last_Page est défini avant le code et a une valeur comprise entre 1 et le numéro de la dernière page $site_URI = 'http://www.example.com'; est défini avant ...

le code php:

<?php 
// Get rid of undefined index 
class Page_Pagination { 
    function get($page) { 
     return isset($_GET['page']) ? $_GET['page'] : null; 
     } 
} 
$GET_page = new Page_Pagination; 
$page = $GET_page->get('page'); // look in $_GET['page'] 
// Create array with all available page numbers! 
for ($i = 1; $i <= $Last_Page; ++$i) { 
    $Available_Pages[] = $i; 
    } 
    if (in_array($page, $Available_Pages)) { // is the GET value in the array? 
     // Do something with $page as the value is valid! $page is defined before this line and has a valid value so it can be used here ;) 
     }elseif($page == null){ 
     // Do something if page variable is NULL 
     echo 'something here to enjoy the visitors...'; 
     }else{ // value of page variable is NOT a valid value and is not NULL 
      echo 'Sorry, the page ' . $_GET['page'] . ' is not available, please click <a href="' . $site_URI . '/index.php?pagina=' . $_GET['pagina'] . '&page=1">here</a> to visit the first page.'; // Include a file or echo something or do something else on here... 
      } 
?> 
0

essayez ceci:

if(!is_int($_GET['page']) || $_GET['page'] < 0 || $_GET['page'] > maxpagesAvailable) 
{ 
    echo 'Sorry, the page ' . $_GET['page'] . 'is not available, please click <a href="http://www.example.com/index.php?pagina=some-cool-document&page=1">here</a> to visit the first page.'; 
} 
else{ 
    $page = $_GET['page']; 
} 
+1

Shouldn n'est-ce pas? – RGriffiths

+0

oui j'ai mal compris la question @RGriffiths, j'ai corrigé ma réponse – Jeanclaude

+0

@Jeanclaude Cela fonctionne presque si la page est un nombre trop élevé le message d'écho est affiché mais si la page contient d'autres caractères, il affichera le message et sous le message montrera la page 1, je ne veux pas le contenu de la page 1 ci-dessous le message texte je vais continuer à essayer de se débarrasser du contenu et je posterai une modification à ma question avec le code approprié – jagb

0

Tout d'abord, vous ne devriez pas faire l'habitude de modifier vos $_GET et $_POST superglobales; Référence here. Mais, pour répondre à votre question, je simplement couru ce code et il fonctionne:

$page = isset($_GET['page']) && (intval($_GET['page'])) > 0 && $_GET['page'] <= 1 ? $_GET['page'] : 1; 

Si vous voulez avoir un message envoyé, utilisez une normale si la déclaration au lieu d'une déclaration ternaire.