[php] Calcul sur url

Bonjour tout le monde,

Je suis entrain de créer quelques pages en php (par commodité, mes connaissances en php sont très limitées).
Je me heurte à un problème:
Dans un dossier, j'ai beaucoup de pages qui s'apellent "page001.php", "page002.php" etc ...

Je cherche à faire une requête php pour qu'un bouton affiche sur chaque page un lien vers la suivante, et ce en effectuant le calcul "page001" +1 = page002.
J'ai déjà ce qu'il faut pour obtenir le nom de la page courante (en fin de message).
J'imagine que maintenant je dois décomposer mon nom de page en deux variables, une texte et l'autre numérique pour pouvoir effectuer le calcul 001 + 1 = 002 et pour enfin avoir mon lien vers ma page 2.

Le code suivant m'affiche mon nom de page courante, sans l'adresse complète, il faut maintenant que je le modifie et que je l'inclue dans un lien.
$path = $_SERVER['PHP_SELF']; // $path = /home/httpd/html/index.php
$file = basename ($path);
echo"$file"; // index.php


Si quelqu'un a déjà rencontré le même problème, je suis à l'écoute des éventuelles solutions.

à bientôt !
Damien

3 réponses

  1. La fonction ci dessous prend en charge tout les 0 ex:01.php,001.php0001.php etc... Elle prend en charge n'importe quel extention aussi.
    <?php
    function page($act){
    		$nom =  substr(basename($_SERVER['PHP_SELF']),0, (strlen(basename($_SERVER['PHP_SELF'])) - (strlen(preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)) + 4)));
    		$nb = strlen(preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1));
    	if($act=="next") {
    		$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)+1;
    		return $nom . str_pad($n, $nb, '0', STR_PAD_LEFT) . substr(basename($_SERVER['PHP_SELF']), strrpos(basename($_SERVER['PHP_SELF']), '.'));
    	} else {
    		$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)-1;
    		return $nom . str_pad($n, $nb, '0', STR_PAD_LEFT) . substr(basename($_SERVER['PHP_SELF']), strrpos(basename($_SERVER['PHP_SELF']), '.'));
    	}
    }
    echo page("next");
    echo page("prev");
    ?>
    1. exemple avec la page001.php
      <?php
      function next(){$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)+1;if($n<10){$n='00'.$n;}elseif($n<100){$n='0'.$n;}return $n.".php";}
      function prev(){$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)-1;if($n<10){$n='00'.$n;}elseif($n<100){$n='0'.$n;}return $n.".php";}
      echo next(); // page002.php
      echo prev(); // page000.php
      ?>
      1. Ca marche ?
      2. Salut Gilbert,

        Merci beaucoup pour l'intérêt que tu as porté à mon problème.
        Désolé pour le retard de la réponse, j'aurais dû préciser que je n'avais accès à internet que durant la semaine.
        J'ai essayé ton code, mais finalement j'utilise un format comme ceci pour mes pages : "pay0001.php" etc, donc ton code ne marche plus avec une décimale de plus.

        J'essaye de modifier cela seul pour que ça marche, et sinon je reposterai ici.

        Encore une fois, merci de ton aide !
      3. Hum, je viens d'essayer ceci =>
        function next(){$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)+1;if($n<10){$n='000'.$n;}elseif($n<100){$n='00'.$n;}return $n.".php";}


        Mais on me dit :
        Fatal error: Cannot redeclare next() in C:\wamp\www\photos\apipil\pay\pay0001.php on line 92

        ... ai-je loupé ?
      4. change le nom de la fonction pour autre choses genre page_next() au lieu de next() ;)
      5. impecc' !!

        Ca marche super, avec la modification que j'avais apporté.
        Bon par contre j'ai eu un peu de mal à inclure le résultat dans mes liens donc j'ai fait un petit truc un eu moche visible en fin de message.

        Par contre j'ai un dernier petit soucis. La formule me rapporte actuellement que le "0002.php" de la fin de l'url par exemple. J'aimerai qu'il me rapporte également la chaine de caractère qui est avant, pour que ça me donne par exemple "pay0002.php". Je ne eux pas inclure ce "pay" avant le code php dans mon lien car ce mot change pour chaque dossier de mon site web.

        je bidouille deuis tout à l'heure, pour l'instant sans succès, si je trouve je vous tiens au courant !

        encore une fois merci !

        <?php
        function page_next(){$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)+1;if($n<10){$n='000'.$n;}elseif($n<100){$n='00'.$n;}return $n.".php";}
        function page_prev(){$n=preg_replace('#[a-z./]#i', '', $_SERVER['PHP_SELF'], -1)-1;if($n<10){$n='000'.$n;}elseif($n<100){$n='00'.$n;}return $n.".php";}
        ?>
        <a href="pay<?php echo page_prev();  ?>"><img src="gauche.jpg" width="25" border="1" alt="" /></a>
        <a href="pay<?php echo page_next();  ?>"><img src="droite.jpg" width="25" border="1" alt="" /></a>


        (je sais c'est pas beau .....)
    2. Merci beaucoup pour ton aide Gilbert, nous ne nous connaissons pas aussi j'apprécie particulièrement l'aide !

      Cette formule paraît bien sympa mais pour autant elle ne marche toujours pas parfaitement, j'ai souvent un "1" qui se rajoute à la fin de la partie alphabétique du nom d'url, et remplace le dernière lettre du nom.

      Par ex, si je suis sur la page cory00012.php, le lien suivant s'affiche "cor100013.php"

      Quelque chose de bizarre se passe, car certaines url de trois lettres et 4 chiffres se calculent très bien alors que dans d'autres albumsle calcul va mal se faire, et donner par exemple comme résultat "pa10005.php" au lieu de "pay0005.php"
      1. as-tu une liste de nom a tester plz
      2. Pour moi lorsque je crée une page (pay00099.php) le résultat est pay00100.php pay00098.php
      3. Ouaip ! (j'étais justement entrain de m'arracher les cheveux à résoudre ce problème :)

        ex de noms de pages au hasard :
        cory0008
        cory0009
        cory00010
        cory00011
        cory00012
        cory00013
        pay0001
        pay0002
        pay0003
        echino00015
        echino00016
        echino00017
        echino00018
        echino00019
        echino00020
        echino00021
        opuntia0001
        opuntia0002
        opuntia0003
        opuntia0004
        opuntia00015
        opuntia00016
        opuntia00017
        opuntia00018
        opuntia00019

        La chose à prendre en compte c'est que lors du passage de 9 à 10 les trois zéros restent (ce qui n'est finalement pas logique mais toutes mes pages sont comme ça ...)

        merci encore !
      4. j'essaye de suite également avec pay000100
      5. avec pay000100 j'obtiens par exemple pay000099 et pay000101