8791 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai photocopié toutes les pages d'un livre soit environ 500 photos,chacune porte le numéro de la page et son adresse est incluse dans une base de données.
Je souhaite mettre un lien vers page précédente, page suivante sur chaque page.
Pour éviter de faire un travail fastidieux, je pense utiliser php et un fichier include.

Etant entendu qu'il me faut extraire le numéro qui correspond à la photo de la page,je compte utiliser $_SERVER'PHP_SELF'
donc si $_SERVER'PHP_SELF' me renvoie par exemple page10.php,
il faut que j'arrive à lire 10 pour en déduire un lien vers id=9 pour image9 et vers ide=11 pour image11
et créer page9.php et page11.php avec image9.jpg et image11.jpg...
et les nouveaux liens automatiquement sur ces nouvelles pages...
Est-ce réalisable ?
avec une expression régulière probablement...mais encore ?
Merci de votre attention
Bonjour lavercq,
Peut-être peux-tu te tourner vers substr()?
echo substr('abcdef', 1, 3);  // bcd

Ça te permettrait d'enlever 'page' et '.php', et donc d'obtenir ta page…

PS: Photocopié les pages d'un livre? Avec l'accord de son auteur?
Merci pour l'idée,
mais avec substr on obtient les premiers caractères, or ce que je veux garder ce sont les derniers...
ce sont deux ou trois chiffres correspondant au numéro de la page...

Je tiens à te rassurer, l'ouvrage dont je détiens l'original a été publié à la fin du XVIIIe,
je ne crois pas que l'auteur soir encore en vie...
ça se saurait...!
ni, qu'il soit décédé depuis moins de 70 ans...!!

Bien cordialement
Salut,

on doit effectivement s'en sortir avec substr mais sinon :
<?php
$page = 'page333.php';
$pattern = '/[0-9]{1,3}/';
preg_match($pattern, $page, $matches);
$numero_page = $matches[0];
echo $numero_page;
?>
Bonjour,

l'adresse doit être comme ceci : page.php?id=n avec id=1 pour la page 1 (et ainsi de suite).

-Avec un $_GET tu connais l'id de l'image à afficher
-Reste à rechercher l'image dans la base de données et à l'inclure dans la page
-Avec une soustraction et une addition, tu crée la pagination

Ou alors j'ai rien pigé Smiley biggol . (ou tu as des url style http://mondomaine.com?page333.php ?)

Je ne crois pas qu'il y est de fonction toute faite pour extraire un nombre d'une chaine de caractère.
Modifié par bzh (15 Mar 2009 - 23:30)
bzh a écrit :
Je ne crois pas qu'il y est de fonction toute faite pour extraire un nombre d'une chaine de caractère.
Euh... ben si ! preg_match ! Smiley biggol
Heyoan a écrit :
Euh... ben si ! preg_match ! Smiley biggol


Oui , bien compris Smiley langue . Ma remarque était en rapport avec :

lavercq a écrit :

Est-ce réalisable ?
avec une expression régulière probablement...mais encore ?
Mon message de remerciement a été supprimé...!
Comment se fait-il ?
Il m'est venu une autre idée en avançant dans le projet...
Les liens page précédente et page suivante c'est une bonne chose, mais maintenant il me faudrait automatiser la création de chaque page...
sans quoi, je vais devoir créer 500 pages à la main !
Est-ce que je peux envisager de faire un appel à la base de données dans laquelle se trouvent:
id et url de l'image
de façon que l'image voulue vienne s'afficher lorsque l'on clique sur un des deux liens...?
Est-ce une bonne solution ?
Ou bien y a-t-il une autre possibilité ?
De toutes façons, il me semble qu'il faut créer la première page à la main...non ?
Merci à nouveau
Il faut créer un seule et unique page pour afficher toutes les images.

exemple :

Livre.php


<?php
// recherche de l'image à afficher selon l'id
if (isset($_GET['id'])) $id = $_GET['id']; // on test si la variable 'id' est présente dans l'url et on le stocke dans la variable $id

else $id = 1; // on a pas de variable id dans l'url, on affiche la première page

// connexion à la base de données 

$connect = mysql_connect('ton serveur' , 'ton nom d\'utilisateur', 'ton mot de passe') or die('Erreur de connection au serveur'); // connection a MySQL

mysql_select_db('ta base de donnee', $connect) or die('Erreur de connection à la base de donnée'); // selection de la BDD

// recherche de la page

$requete = 'SELECT image FROM matable WHERE id = \''. mysql_real_escape_string($id) .'\''; // mysql_real_escape_string sert à protéger des injection sql

// test si la requête à fonctionné
if (mysql_num_rows($select_cat) > 0 && file_exists($resultat['image'])) echo '<img src="'. ($resultat['image']).'" />'; // requete ok, image existe : on affiche l'image

else echo 'mauvaise requête ou pas d\'image'; // pas bon

// pagination
$page_precedente = $id - 1; 
$page_suivante = $id +1; 
$total_de_page = 500; // le nombre total de page

// affichage de la pagination
if ($page_precedente > 1) echo ' <a href="http://tonsite.fr/livre.php?id='.$page_precedente.'"> page précédente </a>' ; // si la page à un id supérieur à 1 on affiche le lien vers la page précédente

if ($page_suivante < $total_de_page) echo ' <a href="http://tonsite.fr/livre.php?id='.$page_suivante.'"> page suivante </a>' ; // si la page à un id inférieur au nombre total de page on affiche le lien vers la page suivante

// fin de script
?>



Je n'ai pas testé mon code mais globalement ça devrait fonctionner.

<edit> Si tu as appelé tes images ; image1, image2, image3 (donc que tu connais le nom de tes images), tu n'as pas besoin d'utiliser de base de données mais juste d'afficher l'image correspondante :

echo '<img src=/mondossier/monimage"'.$id.'.jpg" />'; //nom de l'image 

</edit>
Modifié par bzh (16 Mar 2009 - 17:33)
J'ai de grosses difficultés...
Voici l'affichage après bien des modifications Smiley decu
image:

images:/[0-9]{1,3}/

-1
1
page précédent page suivant page suivante
Il me semble que si j'arrivais à faire afficher la première image !
Les autres suivraient automatiquement...n'est-ce pas ?
Comment faut-il rédiger l'appel ?
Ceci ne marche pas :
if (mysql_num_rows($url)> 0)
{
echo ("image:<img src='. '($url Smiley url )'.' />");
}
et cela, non plus :
echo("image:<img src=$_SERVER['REQUEST_URI']/.$url>");
Salut,

je crois que tu ne pige pas vraiment le principe Smiley smile . Tu as une page, dans mon exemple livre.php.

La tu veux savoir quoi afficher, tu va donc rechercher l'id de l'image (il n'est plus question d'expression régulière -> à la poubelle). Si l'url à un id, elle sera de cette forme si :

livre.php?id=232
ou livre.php?id=352
etc...
sinon la page par défaut livre.php

c'est une seul est même page, seul le paramètre 'id' change.

Avec cette partie du code tu récupère donc ton id :

// recherche de l'image à afficher selon l'id

if (isset($_GET['id'])) $id = $_GET['id']; // on test si la variable 'id' est présente dans l'url et on le stocke dans la variable $id

else $id = 1; // on a pas de variable id dans l'url, on affiche la première page


$_GET['id'] te permet d'aller récupérer cette valeur : livre.php?id=232 et si il n'y a pas d'id dans l'url id sera égal à 1 (la première page). Ce paramètre 'id', tu le crée dans les liens page suivante et page précédente.

je passe pour la connexion au serveur , ça à l'air de fonctionner. Vérifie bien que ta requête sort le bon résultat essaye d'afficher l'url de l'image par exemple.

ensuite si ta requête à fonctionné, tu as l'url de l'image. Quand tu fais un echo, il faut choisir entre les guillemets double " et les simple '.

tu veux afficher :

<img src="urldemonimage/image5.jpg" />


echo '<img src="'.$url.'" />' ; // un ' pour ouvrir, un ' pour fermer
echo "<img src=\"".$url."\" />" ; // un " pour ouvrir, un " pour fermer \" permet d'afficher le " sans l'interpreter


Maintenant, tu crées les liens page précédente et page suivante.


echo ' <a href="livre.php?id='.$page_precedente.'"> page précédente </a>' ;


Normalement le code que je t'ai donné dans le message précédent est complet.
Modifié par bzh (17 Mar 2009 - 11:33)
OK
Voici la première page :
http://jc.clariond.free.fr/Laurensi/HistCast/h9.php#
Ce que je ne comprends pas, c'est comment on choisit ensuite un autre id...?
Il faut une boite de sélection peut-être ?
Actuellement,on peut passer à la page suivante, mais c'est bien parce que j'ai créé manuellement quelques pages php à la suite...
Ce que je voudrais faire c'est appeler les images par les url qui sont dans une table contenant deux champs : id_image et url.
de façon à incorporer l'image appelée par son id, dans une page php créée à la volée, et ayant deux liens permettant d'accéder ensuite aux pages précédente et suivante...
1°)Suis-je clair dans la définition du projet ?
2°)L'avais-tu compris comme ça ?
Personnellement,je regrette de ne pas être capable de comprendre comment tu proposes l'organisation...
J'ai bien compris ce que tu veux faire

lavercq a écrit :

Ce que je ne comprends pas, c'est comment on choisit ensuite un autre id...?


en créant un lien http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id=2 . Tes liens page suivante et page précédente en locurence.

Avec n'importe quel id :

page précédente aura pour lien $id -1
page suivante aura pour lien $id +1


// pagination
$page_precedente = $id - 1; 
$page_suivante = $id +1; 
$total_de_page = 500; // Pour éviter d'avoir un nombre infini de page

// affichage de la pagination

if ($page_precedente > 1) echo ' <a href="http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id='.$page_precedente.'"> page précédente </a>' ; // >1 car 1 est la première page

if ($page_suivante < $total_de_page) echo ' <a href="http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id='.$page_suivante.'"> page suivante </a>' ; // < total de page car on ne veut pas aller plus loin que le nombre de page


Quand l'utilisateur va cliquer sur le lien :
http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id=355
-> page suivante va prendre la valeur
http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id=356
-> page précédente la valeur
http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id=354

Toi dans ta page, tu va récupérer cette valeur avec $_GET['id'].
http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id= 356

Valeur que tu récupère en début de code car c'est elle qui te permet de :
-créer ta pagination
-afficher l'image


if (isset($_GET['id'])) $id = $_GET['id']; // stocke l'id présent dans l'url dans la var $id
else $id = 1; // pas d'id dans l'url on force la première page


Ensuite tu recherches dans ta base de donnée l'url de l'image correspondant à cet id et tu l'affiches :

echo '<img src="'.$url.'" />' ; // $url : adresse de ton image
Si je suis ton idée, j'affiche des images...
donc, je ne peux rien mettre d'autre sur la page...
pas de lien...
Non, il faudrait pouvoir créer les pages php à la volée...en incorporant l'image à chaque page successivement...
Actuellement,j'ai créé la première page php avec les liens,mais la deuxième page n'affiche qu'une image...
plus de lien, on ne peut pas aller plus loin !
Et, si je fais un lien vers une autre page php,il faut qu'elle existe préalablement !

Est-ce vraiment faisable ?
lavercq a écrit :

Non, il faudrait pouvoir créer les pages php à la volée...en incorporant l'image à chaque page successivement...


C'est ce que je t'explique depuis 2 jours Smiley fou .

Montre moi ton code, ce sera plus simple.
Voici la 1ère page, h9.php:
<?php
require "connexion.php";
?>
<html><head><title>Histoire de Castellane par LAURENSI,Prieur.(1719-1808)</title></head>
<?php
$total_de_page=580;
// recherche de l'image à afficher selon l'id
if (isset($_GET['id'])) $id = $_GET['id']; // stocke l'id présent dans l'url dans la var $id
else $id = 9; // pas d'id dans l'url on force la première page qui est la page 9
// recherche de la page
$requete =mysql_query("SELECT url FROM laurensi_images WHERE id = 9");
if (!$requete) {
echo('rien');
die('<p>Error retrieving items from database!<br />'.'Error: ' . mysql_error() . '</p>');}
while ($sql = mysql_fetch_array($requete)) {
$url = (($sql['url']));
echo("<IMG SRC=$url>\n");}
?>
</body></html>
<?php
require"pagesuite.php";
include "basdepage.php";
?>
et voici la pagesuite :
<?php
$total_de_page=580;
$page = htmlspecialchars($_SERVER['REQUEST_URI']);
$nbr = 4;
$name = substr($page,1,-$nbr);
$pattern = '/[0-9]{1,3}/';
preg_match($pattern, $page, $matches);
$numero_page = $matches[0];
$pp=($numero_page-1);
$ps=($numero_page+1);
if ($pp >= 9) {echo (" <a href=http://chemin/h$pp.php> page précédente </a>") ;
} // si la page à un id supérieur à 9 on affiche le lien vers la page précédente
echo("adresse:$_SERVER[REQUEST_URI]\n");

if ($ps < $total_de_page){ echo("<a href=h$ps.php> page suite </a>");} // si la page à un id inférieur au nombre total de page on affiche le lien vers la page suivante
?>
Re Smiley smile ,

j'ai regardé ce que tu avais déjà fais sur ton site et dans la mesure ou tu connais déjà le nom de tes images (9.jpg, 10.jpg, etc), tu n'as absolument pas besoin de base de donnée.

Exemple avec la page h9.php :


<html>
  <head>
    <title>Histoire de Castellane par LAURENSI,Prieur.(1719-1808)</title>
  </head>
  <body>
  <?php

  // parametres

  $total_de_page=580; // nombre de page
  if (isset($_GET['id'])) $id = $_GET['id']; // id 'n' de la page
  else $id = 1; // page 1

  // image à afficher

  echo '<img src="img/'.$id.'.jpg" />' ; // adresse de l'image

  /*
 si id = 3 -> affiche <img src="img/3.jpg" />
 si id = 150 -> affiche <img src="img/150.jpg" />
 si id = 260 -> affiche <img src="img/260.jpg" />
 etc...
  */

  // pagination

  $pp = $id - 1; // page précédente
  $ps = $id + 1; // page suivante  

  // création des liens

  if ($pp >= 1) { // si on a un numéro de page supérieur à 1
    echo '<a href="?id='.$pp.'">page précédente</a>'; // on affiche le lien vers la page précédente
  }

  /*
 si id = 3 -> affiche <a href="?id=2">page précédente</a>
 si id = 150 -> affiche <a href="?id=149">page précédente</a>
 si id = 260 -> affiche affiche <a href="?id=259">page précédente</a>
 etc...
 et si id >= 1 -> n'affiche rien car il n y a pas de page en dessous de 1
  */

  if ($ps <= $total_de_page) { // si on a un numéro de page inférieur au total de page
    echo '<a href="?id='.$ps.'">page suivante</a>'; // on affiche le lien vers la page suivante
  }

  /*
 si id = 3 -> affiche <a href="?id=4">page suivante</a>
 si id = 150 -> affiche <a href="?id=151">page suivante</a>
 si id = 260 -> affiche affiche <a href="?id=261">page suivante</a>
 etc...
 et si id <= $total_de_page -> n'affiche rien car il n y a pas de page après 580
  */

// fin de script

?>
  </body>
</html>


Comment ça marche ? ton utilisateur consulte le livre à l'adresse :

http://jc.clariond.free.fr/Laurensi/HistCast/h9.php
-> on recherche l'id dans l'url ; ici il n'y en a pas. On considère donc que c'est la première page
-> on affiche l'image 1 <img src="img/1.jpg" />
-> on crée un lien vers la page précédente ; ici la page précédente est inférieur à 1 et dans la logique, on a pas de page en dessous de 1 donc on affiche pas le lien
-> on crée un lien vers la page suivante. La pas de problème il reste un paquet de page. On affiche le liens vers la page 2 : <a href="?id=2">page suivante</a> qui va te mener en chemin absolu à http://jc.clariond.free.fr/Laurensi/HistCast/h9.php?id=2

L'utilisateur clique sur ce lien
-> cette fois l'id = 2 .
-> on affiche l'image 2 . <img src="img/2.jpg" />
-> on crée un lien vers la page précédente. Cette fois si il y a une page en dessous de 2 donc on affiche : <a href="?id=1">page précédente</a>
-> on crée un lien vers la page suivante. <a href="?id=3">page suivante</a>

<edit>
effectivement ton livre commence à la page 9 donc remplacer
else $id = 1; // page 1 par else $id = 9; // page 9
et
if ($pp >= 1) { // si on a un numéro de page supérieur à 1 par
if ($pp >= 9) { // si on a un numéro de page supérieur à 9
</edit>
Modifié par bzh (19 Mar 2009 - 10:59)
ça marche parfaitement.
MERCI !!!
Mais, je n'arrive pas à mettre les liens dans une form...question d'esthétique !
Lorsque l'apparence est bonne,le lien ne fonctionne plus...
c'est désespérant !
À toutes fins utiles, (et même si ce n'est plus la question) lorsque la variable $page est de la forme "pagexxx.php", les deux expressions suivantes :

1 /- Supprimer 4 caractères au deux extrémités (soit 8 en tout),
$nos=substr($page,4,strlen($page)-8);

2 /- Remplacer les caractères autres que les digits par des vides
$nos=preg_replace("/[^\d]+/","",$page);

devraient permettre d'obtenir les numéros de page assez aisément.

Sinon, exercice très pédagogique en PHP, mais javascript ne serait-il pas préférable ?
Modifié par Julien de Prabere (23 Mar 2009 - 12:11)