PHP débutant : problème script pour galerie

Fermé
Gizmil Messages postés 706 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 octobre 2022 - 17 nov. 2011 à 20:43
 le père - 21 nov. 2011 à 00:14
Salut,

voici un petit problème que je rencontre en PHP. Etant novice, il est très possible que j'ai fais une erreur quelque part mais celle-ci ne m'apparaît pas ! Donc, j'espère que vous serez plus inspirés que moi !

Je vous explique en quelques mots ce que j'essaye de faire :

je crée une galerie d'images et je veux afficher les miniatures de ces images sur une page, de sorte qu'il n'y aie plus qu'à cliquer dessus pour visualiser les images en taille réelle. Seulement, voilà : sachant qu'il y a 179 images et donc le même nombre de miniatures à afficher, on peut vite imaginer qu'afficher toutes les miniatures sur une seule page est assez lourd esthétiquement et puis ça allonge le temps de chargement de la page.

D'où mon idée de créer une présentation des miniatures en plusieurs pages grâce à PHP. Pour plus de fonctionnalité, je décide d'écrire un seul script dans un fichier unique pour générer toutes mes pages de miniatures.

Seulement, voilà, il y a un souci ! l'une de mes fonctions ne semble pas vouloir prendre en compte les variables que j'ai déclaré auparavant et, là, je ne comprend pas...

Au final, je déclare 3 fonctions :

- defineStateNavigation() :

établit simplement sur quelle page je me situe (la première, la dernière ou l'une des pages intermédiaire) afin de déterminer quel lien et quel affichage je vais attribuer à mes boutons PREV/NEXT.

- displayImages() :

fait apparaître les images dans ma page. L'idée : vu que je crée ma galerie en un seul fichier via un script, pour que mon script sache quel numéro d'image afficher en premier (image 'index' de la galerie), à chaque clic sur le bouton PREV ou NEXT, j'additionne ou je soustrais à une variable le nombre de photos qui peuvent être contenues sur une page.

- displayGalleryButtons() :

fait apparaître les boutons PREV/NEXT à la suite des images.

Voici le script :

<?php
	//VARIABLES A DEFINIR -------------
	$nameGallery = 'mariages';
	$nbrImages = 179;
	$nbrImagesPerLines = 5;
	$nbrLinesPerPages = 5;
	//VARIABLES PREDEFINIES -----------
	$nbrImagesPerPage = $nbrImagesPerLines*nbrLinesPerPages;
	$folderGallery = 'galerie_'.$nameGallery;
	$nbrLines = 0;
	if($clicOnPrev){ 
		$numImageIndex -= $nbrImagesPerPage;
	}elseif($clicOnNext){
		$numImageIndex += $nbrImagesPerPage;
	}else{
		$numImageIndex = 1;
	}
	//FONCTIONS PREDEFINIES -----------
	function defineStateNavigation(){
		if($numImageIndex==1){
			$stateNavigation = 'begin';
		}elseif($numImageIndex>1 && $numImageIndex<$numImageIndex-$nbrImagesPerPage){
			$stateNavigation = 'center';
		}elseif($numImageIndex>=$numImageIndex-$nbrImagesPerPage){
			$stateNavigation = 'end';
		}
		switch($stateNavigation){
			case 'begin':
				$titleButtonPrev = 'Pas de page précédente';
				$titleButtonNext = 'Voir la page suivante';
				$classButtonPrev = 'butPrevGrey';
				$classButtonNext = 'butNext';
				$wayGalleryPrev = '#';
				$wayGalleryNext = 'index.php?contenu=visio&type='.$nameGallery.'&numImageIndex='.$numImageIndex.'&clicOnPrev=false&clicOnNext=true';
			break;
			case 'center':
				$titleButtonPrev = 'Voir la page précédente';
				$titleButtonNext = 'Voir la page suivante';
				$classButtonPrev = 'butPrev';
				$classButtonNext = 'butNext';
				$wayGalleryPrev = 'index.php?contenu=visio&type='.$nameGallery.'&numImageIndex='.$numImageIndex.'&clicOnPrev=true&clicOnNext=false';
				$wayGalleryNext = 'index.php?contenu=visio&type='.$nameGallery.'&numImageIndex='.$numImageIndex.'&clicOnPrev=false&clicOnNext=true';
			break;
			case 'end':
				$titleButtonPrev = 'Voir la page précédente';
				$titleButtonNext = 'Pas de page suivante';
				$classButtonPrev = 'butPrev';
				$classButtonNext = 'butNextGrey';
				$wayGalleryPrev = 'index.php?contenu=visio&type='.$nameGallery.'&numImageIndex='.$numImageIndex.'&clicOnPrev=true&clicOnNext=false';
				$wayGalleryNext = '#';
			break;
		}
	}
	function displayImages(){
		for($numImage = $numImageIndex; $numImage <= $numImageIndex+$nbrImagesPerPage; $numImage++){
			if ($numImage<10){
				echo '<a class="lightbox" href="pages/'.$folderGallery.'/images/creapix_image_00'.$numImage.'.jpg"><img class="miniature_galerie" src="pages/'.$folderGallery.'/miniatures/creapix_image_00'.$numImage.'_miniature.jpg" /></a>';
			}
			elseif ($numImage<100){
				echo '<a class="lightbox" href="pages/'.$folderGallery.'/images/creapix_image_0'.$numImage.'.jpg"><img class="miniature_galerie" src="pages/'.$folderGallery.'/miniatures/creapix_image_0'.$numImage.'_miniature.jpg" /></a>';
			}
			else{
				echo '<a class="lightbox" href="pages/'.$folderGallery.'/images/creapix_image_'.$numImage.'.jpg"><img class="miniature_galerie" src="pages/'.$folderGallery.'/miniatures/creapix_image_'.$numImage.'_miniature.jpg" /></a>';
			}
			if(is_int($numImage/$nbrLinesPerPages)){
				echo '<hr>';
			}
		}
	}
	function displayGalleryButtons(){
		echo '
		<hr>
		<div class="buttonsText">
			<a href="'.$wayGalleryPrev.'" class="'.$classButtonPrev.'" title="'.$titleButtonPrev.'"></a>
			<a href="'.$wayGalleryNext.'" class="'.$classButtonNext.'" title="'.$titleButtonNext.'"></a>
		</div>
		';
	}
	//EVENEMENTS ---------------------
	defineStateNavigation();
	displayImages();
	displayGalleryButtons();
?>


Voici ce que me retourne actuellement le serveur :

Warning: Division by zero in /homez.194/gomyr/www/divers/zone_tests/studiocreapix2/pages/galerie_mariages/galerie.php on line 62

Je ne vois pas ce qui pose problème à la ligne 62. J'ai bien une division par la variable $nbrLinesPerPages à la ligne 65 mais sa valeur est définie au début du script, elle vaut 5 et non 0 comme semble l'indiquer le commentaire ci-dessus.

A côté de ça, autre chose m'inquiète : j'ai fais des écho des variables de ma fonction displayImages(). Le fait est qu'ils ne renvoient aucune valeur quand je déclare ces derniers à l'intérieur de la fonction. A l'extérieur, tout va bien !

La question est : pourquoi ?

Etant débutant, il est possible que j'aie des erreurs de syntaxe ou autres. Donc, n'hésitez pas à m'aiguiller, si possible ! Ce serait sympa si vous pouvier jeter un coup d'oeil à ce problème, merci ! (-;
A voir également:

3 réponses

Bonjour

Par défaut, les variables sont locales dans les fonctions en PHP. C'est à dire qu'une variable à l'intérieur d'une fonction n'a aucun rapport avec une variable de même nom à l'extérieur de cette fonction.
Si tu veux qu'il s'agisse de la même variable, il suffit de la déclarer globale à l'intérieur des fonctions où tu l'utilises :
  function defineStateNavigation(){    
    global $numImageIndex,$autrevariable1,$autrevariable2;
1
Gizmil Messages postés 706 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 octobre 2022 65
18 nov. 2011 à 18:49
Salut, Le père ! Merci pour ton aide !

Alors, j'ignorais, concernant la portée des variables, qu'elles se limitaient aux fonctions. Jusqu'à présent, je n'ai travaillé que sur de l'ActionScript. Bien sûr, on y trouve aussi différents niveaux de portée mais, en AS, il me semble que la portée des variables définies au sein d'une fonction est accessible à l'extérieur de celle-ci. Du moins, il me semble l'avoir constaté ! Voilà pourquoi j'ai imaginé qu'il en était de même avec PHP.

Donc, là, effectivement, je comprend pourquoi ça ne peut pas marcher !

Cela dit, j'ai encore une petite question !

J'ai lu dans un guide PHP que déclarer une variable globale se faisait comme ceci :

$GLOBALS['maVar'] = 'le contenu de maVar';

Or, tu m'indiques de faire ceci :

global $maVar = 'le contenu de maVar';

Y a t-il une différence dans la manière de déclarer une variable gobale en fonction de l'endroit où on se trouve ?
0
Bonjour

$GLOBALS['maVar'] = 'le contenu de maVar'; ?
Ceci ne crée pas à proprement parler une variable globale, mais utilise le tableau superglobal $GLOBALS pour pour rendre une valeur globale. Le résultat est le même, mais l'utilisation du mot clef global me semble plus simple, car il permet de manipuler un nom de variable 'normal'.

Y a t-il une différence dans la manière de déclarer une variable gobale en fonction de l'endroit où on se trouve ?
Pas que je sache. Une variable en dehors de toute fonction est globale, une variable dans une fonction est globale si elle est déclarée 'global' dans la fonction. Exception à remarquer : certains tableaux prédéfinis du PHP sont dits superglobaux car ils sont toujours globaux sans qu'on ait besoin de le préciser : $_GET, $_POST, ...

Va voir :
http://www.php.net/manual/fr/language.variables.superglobals.php
et
http://www.php.net/manual/fr/language.variables.scope.php
0