begin process at 2012 05 27 20:07:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > EXEMPLE DE DIAPORAMA EN PHP

EXEMPLE DE DIAPORAMA EN PHP


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :php, diaporama Niveau :Débutant Date de création :07/03/2007 Date de mise à jour :16/06/2008 23:10:16 Vu :43 088

Auteur : Rainbow

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Ce petit script montre le principe d'un diaporama en PHP. Il faut lui fournir par la methode GET le répertoire et le numéro de la nième photo à afficher (0 pour la première et il corrige si le numéro est trop élévé.
Pour être autonome, ce diaporama est associé à un petit formulaire qui permet de choisir le répertoire (chemin relatif par rapport au script).
Principe : On parcour le répertoire pour y trouver les images, connaître leurs noms et leurs numéros d'ordre. après avoir vérifié que le nuéro n'est pas supérieur au nombre maximum d'image, on affiche l'image associé à un menu proposant le numéro précédent, le numéro suivant et un retour au formulaire(Si on est à la dernière image, la "suivante" est la première et inversement pour la "précédente")

Source

  • <?php
  • // diaporama.php
  • /* Ce script montre comment faire un diaporama en PHP
  • On n'affiche successivement toute les diapo d'un répertoire et on revient
  • à la première quand on a terminer ou on fait l'inverse.
  • Normalement si on rajoute ou enlève des diapos entre deux clics on met
  • de l'incertitude temporaire dans la chronologie mais l'algorithme ne plante pas.
  • Chaque appel doit fournir le répertoire et un n° de diapo
  • dans la chaîne de requête suivant l'url
  • On utilise la methode GET car on utilise des envoi par le menu.
  • Deux utilisations réalistes pour lancer ce script:
  • a) Un menu passe l'url du script et le n° de diapo 0 (zéro)
  • b) Dans une série de vignettes, le clic sur l'une d'elles
  • passe l'url du script et le n° de la vignette
  • */
  • error_reporting(E_ALL &~E_NOTICE); // EasyPhp n'affiche pas les notices
  • // Initialisations
  • $b_diapo = false; // à priori, je n'ai pas de diapo (Pessimiste ?)
  • $texte = ''; // futur contenu du <body> html
  • $filtre = '\.(jpg|gif|png)'; // régex d'identification des extensions de diapo
  • $hauteur = '450'; // hauteur d'affichage des diapo en pixels
  • // A - C'est là que ça commence
  • // Est-ce que je connais le répertoire et le n° de la diapo ?
  • // Normalement comme dit ci-dessus, je peux recevoir ces informations grâce
  • // à un choix dans un menu. Le cas ci-dessous (par formulaire) risque d'être
  • // peu utilisé
  • // Mais c'est quand même là quil faut vérifier que l'uri est valide
  • if ( (isset($_GET['dir'])) && (isset($_GET['nr'])) ) {
  • $dir = $_GET['dir'];
  • $nr = $_GET['nr'];
  • $b_diapo = true;
  • }
  • if (!($b_diapo)) {
  • // Si je n'ai pas mes infos, je les demande
  • // renvoi au module appelant, à la page d'accueil ...
  • // ou, comme ici, par un formulaire
  • // (Le répertoire, est le répertoire relatif à celui du script)
  • $texte .= '<form action="'.$_SERVER['PHP_SELF'].'" method="get" name="diaporama">'
  • .'<input type="hidden" name="nr" value="0" />'
  • .'<input type="text" name="dir" value=""/>'
  • .'<input type="submit" value="Valider"/>'
  • .'</form>'
  • ;
  • }
  • else {
  • // B - C'est là que ça recommence
  • // Je connais le répertoire et le n° de la diapo
  • // 1. je repère toutes les diapos du répertoire et je
  • // met leurs noms dans un tableau
  • if ( $handle = opendir($dir) ) {
  • while (false !== ($file = readdir($handle))) {
  • if (preg_match('/'.$filtre.'/s',strtolower($file))) {
  • $diapos[] = $file; // élément 0 du tableau puis suivants ;
  • }
  • } // on pourrait s'arrêter au n° de la diapo
  • closedir($handle);
  • } else {echo $dir.' NON TROUVE ';}
  • // 2. Si j'ai des diapos
  • if (isset($diapos[0])) {
  • $max = count($diapos); // nombre de diapo trouvées
  • if (!($nr<$max)) { // au cas ou on m'a oté des diapos entre-temps, je réduit le N°
  • $nr = $max-1;
  • }
  • // 3. J'affiche la diapo
  • $texte .= '<img src="'.$dir.'/'.$diapos[$nr].'" alt="" height="'.$hauteur.'" />';
  • // 4. Je fais un menu
  • $texte .= '<ul class="suivante">';
  • // (nr + (max+1)) modulo max = n° précédent
  • $texte .= '<li><a href="'
  • .$_SERVER['PHP_SELF'].'?dir='.$dir.'&nr='.strval(($nr+($max-1))%$max).'" >'
  • .'&nbsp; << Précédente &nbsp;'
  • .'</a></li>'
  • ;
  • $texte .= ' ';
  • // Retour au module d'où je venais (event. modifier l'url)
  • $texte .= '<li><a href="'
  • .$_SERVER['PHP_SELF'].'" >'
  • .'&nbsp; ^Retour^ &nbsp;'
  • .'</a></li>'
  • ;
  • $texte .= ' ';
  • // (nr + 1) modulo max = n° suivant
  • $texte .= '<li><a href="'
  • .$_SERVER['PHP_SELF'].'?dir='.$dir.'&nr='.strval(($nr+1)%$max).'" >'
  • .'&nbsp; Suivante >> &nbsp;'
  • .'</a></li>'
  • ;
  • $texte .= '</ul>';
  • }
  • else { echo $_GET['dir'].' vide';}
  • // NB. l'utilisation de $_SERVER['PHP_SELF'] (moi-même) comme url
  • // permet de faire fonctionner ce script quelque soit son nom
  • }
  • ?>
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  • <html>
  • <head>
  • <title>Choisir un image</title>
  • <!-- Pour avoir mon menu sur une seule ligne -->
  • <style type="text/css">
  • .suivante li {display: inline;}
  • </style>
  • </head>
  • <body>
  • <?php
  • echo $texte;
  • ?>
  • </body>
  • </html>
<?php	
// diaporama.php

/* Ce script montre comment faire un diaporama en PHP

		On n'affiche successivement toute les diapo d'un répertoire et on revient
		à la première quand on a terminer ou on fait l'inverse.
		Normalement si on rajoute ou enlève des diapos entre deux clics on met 
		de l'incertitude temporaire dans la chronologie mais l'algorithme ne plante pas.
		
		Chaque appel doit fournir le répertoire et un n° de diapo
		dans la chaîne de requête suivant l'url
		On utilise la methode GET car on utilise des envoi par le menu.
		Deux utilisations réalistes pour lancer ce script:
			a) Un menu passe l'url du script et le n° de diapo 0 (zéro)
			b) Dans une série de vignettes, le clic sur l'une d'elles
					passe l'url du script et le n° de la vignette 
		*/
		
error_reporting(E_ALL &~E_NOTICE);	// EasyPhp n'affiche pas les notices
		
// Initialisations

$b_diapo = false;			// à priori, je n'ai pas de diapo (Pessimiste ?)
$texte = '';					// futur contenu du <body> html
$filtre = '\.(jpg|gif|png)';	// régex d'identification des extensions de diapo
$hauteur = '450';			// hauteur d'affichage des diapo en pixels

// A - C'est là que ça commence
// Est-ce que je connais le répertoire et le n° de la diapo ?
// 	Normalement comme dit ci-dessus, je peux recevoir ces informations grâce  
// 	à un choix dans un menu. Le cas ci-dessous (par formulaire) risque d'être 
//  peu utilisé
//  Mais c'est quand même là quil faut vérifier que l'uri est valide

if ( (isset($_GET['dir'])) && (isset($_GET['nr'])) ) {
	$dir = $_GET['dir'];
	$nr = $_GET['nr'];
	$b_diapo = true;
	}
	

if (!($b_diapo)) {
	// Si je n'ai pas mes infos, je les demande 
	// renvoi au module appelant, à la page d'accueil ...
	// ou, comme ici, par un formulaire
	// (Le répertoire, est le répertoire relatif à celui du script)
	$texte .= '<form action="'.$_SERVER['PHP_SELF'].'" method="get" name="diaporama">'
						.'<input type="hidden" name="nr" value="0" />'
						.'<input type="text"  name="dir" value=""/>'
						.'<input type="submit"  value="Valider"/>'
						.'</form>'
						;
	}
	else { 
	// 	B - C'est là que ça recommence
	//	Je connais le répertoire et le n° de la diapo
		// 	1. je repère toutes les diapos du répertoire et je 
		//		 met leurs noms dans un tableau
	if ( $handle = opendir($dir) ) { 
		while (false !== ($file = readdir($handle))) {
			if (preg_match('/'.$filtre.'/s',strtolower($file))) {
				$diapos[] = $file; // élément 0 du tableau puis suivants ;
				} 
			}	// on pourrait s'arrêter au n° de la diapo
		closedir($handle);
		} else {echo $dir.' NON TROUVE ';} 
		// 2. Si j'ai des diapos
	if (isset($diapos[0])) {
		$max = count($diapos);	// nombre de diapo trouvées
		if (!($nr<$max)) {	// au cas ou on m'a oté des diapos entre-temps, je réduit le N°
			$nr = $max-1;
			}
		// 3. J'affiche la diapo
		$texte .= '<img src="'.$dir.'/'.$diapos[$nr].'" alt="" height="'.$hauteur.'" />';
		// 4. Je fais un menu
		$texte .= '<ul class="suivante">';
			// (nr + (max+1)) modulo max  = n° précédent
			$texte .= '<li><a href="'
				.$_SERVER['PHP_SELF'].'?dir='.$dir.'&nr='.strval(($nr+($max-1))%$max).'" >'
				.'&nbsp; << Précédente &nbsp;'
				.'</a></li>'
				;
			$texte .= ' ';
			// Retour au module d'où je venais (event. modifier l'url)
			$texte .= '<li><a href="'
				.$_SERVER['PHP_SELF'].'" >'
				.'&nbsp;  ^Retour^ &nbsp;'
				.'</a></li>'
				;
			$texte .= ' ';
			// (nr + 1) modulo max  = n° suivant
			$texte .= '<li><a href="'
				.$_SERVER['PHP_SELF'].'?dir='.$dir.'&nr='.strval(($nr+1)%$max).'" >'
				.'&nbsp; Suivante >> &nbsp;'
				.'</a></li>'
				;
		$texte .= '</ul>';
		}
		else { 	echo $_GET['dir'].' vide';}
		
		// NB. l'utilisation de $_SERVER['PHP_SELF'] (moi-même) comme url 
		// permet de faire fonctionner ce script quelque soit son nom
		
	}

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Choisir un image</title>
<!-- Pour avoir mon menu sur une seule ligne -->
<style type="text/css">
	.suivante li {display: inline;}
 </style>
</head>

<body>

<?php	

echo $texte;	

 ?>


</body>
</html>

 Conclusion

J'ai mis mes remarques et suggestions dans les commentaires


 Historique

16 juin 2008 23:10:16 :
Correction : Il manquait les cotes dans $_SERVER['PHP_SELF'].

 Sources du même auteur

Source avec Zip IPHONE - ICÔNE D'APPEL TÉLÉPHONIQUE SUR L'ÉCRAN D'ACCUEIL
COMMENT, AVEC GD, DESSINER UN RECTANGLE TRANSPARENT PLEIN AV...

 Sources de la même categorie

Source avec une capture MODULE JOOMLA 1.5 NOW LISTENING par Alcantornet
Source avec Zip Source avec une capture UPLOAD CENTER par basssem81
Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK

 Sources en rapport avec celle ci

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
REDIMENSIONNEMENT D'IMAGE PHP par JStevens
Source avec Zip AFFICHAGE ET GESTION DE DIAPORAMA EN PHP SANS BASE DE DONNÉE... par mldvb
Source avec Zip Source avec une capture EAGLEIMAGE - - - TRAITEMENT ET STOCKAGE D'IMAGES par CyrilElan

Commentaires et avis

Commentaire de kiki67100 le 12/03/2007 12:31:16

Vraiment bien comme source pour un debutant comme moi merci

Commentaire de webdeb le 12/03/2007 22:09:28

Salut !

Ce n'est pas $_SERVER[PHP_SELF] mais $_SERVER['PHP_SELF']. De plus, il faut sécuriser cette variable en lui appliquant un htmlspecialchars() pour la protéger contre l'injection de code HTML malicieux...

++

Commentaire de Rudy3212 le 31/03/2007 22:56:45

L'idée est bonne

Commentaire de BurN3D le 16/05/2009 03:50:50

Comment faire pour ne pas avoir a choisir le repertoire et juste le predefinir, de plus si possible ajouter un timer entre chaque photo pour faire un style de slideshow ?  ... Desoler je suis debutant et jessaie dapprendre merci d'avance.

Commentaire de homere57 le 04/08/2009 19:49:38

bonjour modifier cette partie pour par exemple lancer le script à partir d'une autre page en cliquant sur une vignette.
[quote]
<?php
// diaporama.php
pt montre comment faire un diaporama en PHP

On n'affiche successivement toute les diapo d'un répertoire et on revient
à la première quand on a terminer ou on fait l'inverse.
Normalement si on rajoute ou enlève des diapos entre deux clics on met
de l'incertitude temporaire dans la chronologie mais l'algorithme ne plante pas.

Chaque appel doit fournir le répertoire et un n° de diapo
dans la chaîne de requête suivant l'url
On utilise la methode GET car on utilise des envoi par le menu.
Deux utilisations réalistes pour lancer ce script:
a) Un menu passe l'url du script et le n° de diapo 0 (zéro)
b) Dans une série de vignettes, le clic sur l'une d'elles
passe l'url du script et le n° de la vignette
*/

error_reporting(E_ALL &~E_NOTICE); // EasyPhp n'affiche pas les notices

// Initialisations

$b_diapo = false; // à priori, je n'ai pas de diapo (Pessimiste ?)
$texte = ''; // futur contenu du <body> html
$filtre = '\.(jpg|gif|png|jpeg)'; // régex d'identification des extensions de diapo
$hauteur = '450'; // hauteur d'affichage des diapo en pixels


$dir=$_GET['valeur_id'];     // valeur du lien provenant d'une autre page
if ( (isset($_GET['dir'])) && (isset($_GET['nr'])) ) {
$dir= $_GET['dir'];
$nr = $_GET['nr'];
$b_diapo = true;
}


?>
<!>
<! on recupere le nom du repertoire >
<input type="hidden" name="nr" value="0" />
<input type="hidden"  name="dir" value="<? echo  $dir; ?>"/>
<?
[/quote]
a+

Commentaire de Oumbra le 18/01/2010 22:59:09

Bonsoir,

J'ai apprécié ton tuto et m'en suis inspiré, seulement un petit détail me gène.
En fait j'ai rajouté plusieurs zone d'affichage pour pouvoir visualiser plusieurs images en même temps comme ceci :([] représente les images et le chiffre le numéro de l'image dans le répertoire)
[1][2][3][4][5]
    [0]
[6][7][8][9][10]

l'image centrale possède une taille supérieur bien évidement :).
Donc mon problème est le suivant :
Lorsque je clique sur mon bouton suivant toutes mes images s'avancent (ce que je désire) mais le hic c'est que lorsque quand le répertoire ne compte que 10 ou x images, les blocs possédant des images et dont le chiffre n'est égale a aucune image dans le répertoire, m'affichent un icon tout moche (celui pour le image mal informée etc...)
Mon idée était donc je dire quand le 10ème bloc est égal à null y mettre l'image 0 et le hic se fait voir ici :( celà ne fonctionne pas :(....

voici l'extrait de mon code :

<?php
error_reporting(E_ALL &~E_NOTICE);
$b_diapo = false; // à priori, je n'ai pas de diapo (Pessimiste ?)
$texte = ''; // futur contenu du <body> html
$filtre = '\.(jpg|gif|png)'; // régex d'identification des extensions de diapo
$dir = 'photos'; //répertoire des photos
$nr = 0;

if ( (isset($_GET['nr'])) )
{
$nr = $_GET['nr'];
}
$handle = opendir($dir);
while (false !== ($file = readdir($handle)))
{
if (preg_match('/'.$filtre.'/s',strtolower($file)))
{
$diapos[] = $file; // élément 0 du tableau puis suivants ;
}
}
closedir($handle);
// 2. Si j'ai des diapos
if (isset($diapos[0]))
{
$max = count($diapos); // nombre de diapo trouvées
if (!($nr<$max))
{ // au cas ou on m'a oté des diapos entre-temps, je réduit le N°
$nr = $max-1;
}
//On initialise des variables pour un test
$valide = true ;
$num = 0 ;
$ecart = 0 ;
//tant que la variables $valide est égale à vrai faire
while ($valide == true)
{
$num = $num + 1 ; //On incrémente un compteur
if (($diapos[0+$num] == null) and ($num <= 9))// Si la diapo n'est égale à rien  et que $num est inférieur ou égal à 9 alors
{
$valide = false ;
$ecart = 9 - $num ;
}
if ($num == 10)//Si la variable $num est égale à 10 alors
{
$valide = false ;
}
}
if ($ecart > 0)
{
$c = 0 ;
while ($num <= 9)
{
$diapos[$num] = $diapos[$nr+$c] ;
$num = $num + 1 ;
$c = $c + 1 ;
}
}
// 3. On affiche les diapos
$texte .= '
<table align=center>
<tr>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+1].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+2].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+3].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+4].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+5].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
</tr>
</table>
<br>
<table align=center font size=5 color=black>
<td><center>'.$diapos[$nr].'</center></td>
</table>
<table align=center>
<td><center>
<IMG SRC="'.$dir.'/'.$diapos[$nr].'" BORDER=1 height=\'300\' width=\'500\'>
</center></td>
</table>';
$texte .= '<table align="center"><tr>';
// (nr + (max+1)) modulo max  = n° précédent
$texte .= '<td width="100" align="center"><a href=diaporama.php?dir='.$dir.'&nr='.strval(($nr+($max-1))%$max).'>'
.'<input type=\'submit\' value=\'Précedent\'>'
.'</a></td>'
;
$texte .= ' ';
// Retour au module d'où je venais (event. modifier l'url)
$texte .= '<td width="100" align="center"><a href=diaporama.php>'
.'<input type=\'submit\' value=\'Retour\'>'
.'</a></td>'
;
$texte .= ' ';
// (nr + 1) modulo max  = n° suivant
$texte .= '<td width="100" align="center"><a href=diaporama.php?dir='.$dir.'&nr='.strval(($nr+1)%$max).' >'
.'<input type=\'submit\' value=\'Suivant\'>'
.'</a></tr>'
;
$texte .= '</tr></table>
<table align=center>
<tr>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+5].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+6].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+7].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+8].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
<td><center><IMG SRC="'.$dir.'/'.$diapos[$nr+9].'" BORDER=1 height=\'100\' width=\'100\'></center></td>
</tr>
</table>';
}
?>

Dans mon HTML j'affiche avec un echo $texte;
Bien sur ce code fonctionne mais j'avoue que c'est assez laid le fait que mon diaporama ne forme pas une boucle infini :/

HELPPPPPP =>>>> please :)

Commentaire de phx1988 le 12/03/2011 23:42:35

ton code ne marche pas:

Warning: opendir(22) [function.opendir]: failed to open dir: No error in D:\wamp\www\prd.php on line 60
22 NON TROUVE 22 vide

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Sur la papier et dans ma tete mon diaporama c'est ça ... [ par gnosis35 ] Bonjour, J'aimerai réaliser un site et notamment créer un diaporama. J'ai pourtant quelques questions avant de me lancer. Pour cela j'aimerai récolte Sur la papier et dans ma tete mon diaporama c'est ça ... [ par gnosis35 ] Bonjour, J'aimerai réaliser un site et notamment créer un diaporama. J'ai pourtant quelques questions avant de me lancer. Pour cela j'aimerai récolte mysql ne comprend pas les valeurs... [ par nanti ] Bonjour à tous !J'essaie actuellement de gérer un diaporama en JS via une page en php.Le problème est que lorsque dans l'HTML, je place mon php, celui Messagerie instantannée avec php+mysql [ par Kanouo ] bonjour je suis etudiant en 3 eme année et je dois realiser pour mon projet de fin d'étude un portail intranet client/serveur mais la réalité c'est qu envoyer mail en php [ par sidalilo ] bonjour...je suis debutant en php j'ai assayé d'envoyer un mail en php mais j'ai reçu ce message:Warning: mail() [function.mail]: Failed to connect to connexion a mysql () easyphp) [ par angelimad ] bonjour,via du code php j'essaye de me connecté a mysql (easyphp), l'erreur que j'ai rencontré c'est que j'ai pas le droit de me connecter a la base d connexion entre php et xls [ par zaydoo ] bonjour est-ce qu'il est possible de faire un passage des paramètres d'un script php à une connexion de ODBC(mySQL) en xls? merci beaucoup php/mysql [ par hadjila20 ] bonjour à tous, voilà j'ai un problème et jésper vraiment que je trouverai la solution dans ce forum. Je suis dans le cadre de la réalisation d'un sit problem PHP acces aux objets [ par fraichor ] Personne ne peut [^^sad1]m aider? kann echt keiner mir helfen? Equivalent php de fonction asp [ par biniou38 ] Bonjour, J'ai un bout de code asp, dans ma page php, que je voudrais mettre en php. Mais je bloque sur queleques fonctions pour trouver l'équivalent


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales