[php] Calcul sur url

damienr Messages postés 11 Statut Membre -  
damienr Messages postés 11 Statut Membre -
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. gilbert1995 Messages postés 519 Statut Membre 29
     
    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
  2. gilbert1995 Messages postés 519 Statut Membre 29
     
    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
    ?>
    0
    1. gilbert1995 Messages postés 519 Statut Membre 29
       
      Ca marche ?
      0
    2. damienr Messages postés 11 Statut Membre
       
      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 !
      0
    3. damienr Messages postés 11 Statut Membre
       
      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é ?
      0
    4. gilbert1995 Messages postés 519 Statut Membre 29
       
      change le nom de la fonction pour autre choses genre page_next() au lieu de next() ;)
      0
    5. damienr Messages postés 11 Statut Membre
       
      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 .....)
      0
  3. damienr Messages postés 11 Statut Membre
     
    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"
    0
    1. gilbert1995 Messages postés 519 Statut Membre 29
       
      as-tu une liste de nom a tester plz
      0
    2. gilbert1995 Messages postés 519 Statut Membre 29
       
      Pour moi lorsque je crée une page (pay00099.php) le résultat est pay00100.php pay00098.php
      0
    3. damienr Messages postés 11 Statut Membre
       
      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 !
      0
    4. damienr Messages postés 11 Statut Membre
       
      j'essaye de suite également avec pay000100
      0
    5. damienr Messages postés 11 Statut Membre
       
      avec pay000100 j'obtiens par exemple pay000099 et pay000101
      0