galerie en base de donnée

Eléphant du PHP | 241 Messages

11 avr. 2011, 22:00

En fait comme un idiot je ne t'avais pas envoyé le code d'une page qui permettait d'afficher un menu avec les pays disponibles dans la bdd 8-|
Donc pour me faire pardonner, je t'ai refais tout ce qu'il fallait avec la méthode du tutoriel que tu avais donné !
Cette fois-ci je vais essayer de ne pas oublier de fichiers !!! :oops:

La disposition des dossiers et des pages est comme ceci :
  • content/
    • ajoutphotos.php
      galeriebdd.php
      index.php
      traitement.php
  • france/
  • inde/
  • usa/
  • autrepays/
  • inc/
    • sql_connect.inc.php
  • uploads/
  • .htaccess
  • galerie.php
  • template.php
Pour les autres dossiers (comme les pays, etc) ca ne change pas de la dernière fois.

Maintenant les pages !!

template.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="Content-Language" content="fr" />
	<meta name="copyright" content="" />
	<meta name="description" content="" />
	<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" />
	<link rel="stylesheet" href="css/design.css" type="text/css" media="screen" />
<?php
if (isset($head)) { echo $head;}
?>
</head>
<body>
<div id="corps">	
<?php
echo $content;
?>
</div>
</body>
</html>
galerie.php
<?php
//Fichier de connexion à la bdd
include('inc/sql_connect.inc.php');

if(!isset($_GET["p"])){$_GET["p"]="index";}
if(!file_exists("content/".$_GET["p"].".php")){$_GET["p"]=404;}
ob_start();
include "content/".$_GET["p"].".php";
$content=ob_get_contents();
ob_end_clean();

include('template.php');
.htaccess

Code : Tout sélectionner

DirectoryIndex galerie.php
Permet de définir ta page galerie.php comme page d'appel par défaut.


Dans le dossier content maintenant :
ajoutphotos.php
<?php
$head = <<<EOD
<script type="text/javascript">
function cocher(liste,bouton) {
	var i = 0;
	var coche = false;
	if (bouton.value == 'Tout cocher') {
		coche = true;
		bouton.value = 'Tout décocher';
	} else {
		coche = false;
		bouton.value = 'Tout cocher';
	}
	while (liste[i]) {
		liste[i].checked = coche;
		i++;
	}
}
</script>

<style type="text/css" media="screen">
img {
	width: 100px;
	height: 100px;
	margin: 0px;
	padding: 0px;
	border: 0px;
}
table, td {
	border-collapse: collapse;
}
td {
	width: 200px;
	height: 100px;
	text-align: center;
}
tr {
	border: 1px solid black;
}
h3 {
	color: red;
}
#btn_valider {
	padding: 10px;
	color: maroon;
}
</style>

		<title>Ajout de photos</title>
EOD;

//Liste des pays autorisés dans la bdd
$pays = array('france','usa','inde','australie','java','japon');

//Si $_GET['pays'] est appelé alors on affiche la liste des photos qui peuvent être ajoutées pour ce pays
if (isset($_GET['pays']) && in_array($_GET['pays'],$pays)) {
	//On récupère le numéro du dernier trajet pour ce pays
	$req = $bdd->prepare("SELECT max(gal_trajet) FROM galerie_photos WHERE gal_pays=:pays");
	$req->bindValue('pays',$_GET['pays'],PDO::PARAM_STR);
	$req->execute();
	$last_trajet = $req->fetch();
	$req->closeCursor();
	
	/*
		La requête si dessous va compter les enregistrements pour un nom de photo,
		afin de vérifier que cette photo n'est pas déjà présente dans la bdd
	*/
	$req = $bdd->prepare("SELECT count(gal_id) FROM galerie_photos WHERE gal_photo=:photo");
	if ($ouvre = @opendir('uploads/petites/')) { //On ouvre le dossier uploads des petites photos pour lister les photos du dossier et les comparer avec celle déjà dans la bdd
?>

<form method="post" action="?p=traitement&pays=<?php echo $_GET['pays']; ?>">
	<table>

<?php
		while (false !== ($fic = readdir($ouvre))) {
			$req->bindParam('photo',$fic,PDO::PARAM_STR);
			$req->execute();
			if (($fic != ".") && ($fic != "..") && ($fic != 'petites')) { //On enlève le listage de dossier courant et précedent
				$existe = $req->fetchColumn(); //Retourne le nombre d'enregistrement trouvé
				if ($existe === '0') { //Si ne renvoi pas d'enregistrement alors on affiche les info pour ajouter la photo

?>

	<tr>
		<td>
			<a href="<?php echo "uploads/petites/$fic"; ?>" rel="lightbox-atomium"><img src="<?php echo "uploads/petites/$fic"; ?>" alt="" /></a><br />
			<?php echo $fic; ?>
		</td>
		<td>
			Ajouter pour <strong><?php echo htmlspecialchars($_GET['pays']); ?></strong><input type="checkbox" name="fic[]" value="<?php echo $fic; ?>" />
		</td>
		<td>
			<h4>Sens :</h4>
			<p>
				Horizontal <input type="radio" name="<?php echo "sens" . $fic; ?>" value="horizontal" /><br />
				Vertical <input type="radio" name="<?php echo "sens" . $fic; ?>" value="vertical" />
			</p>
		</td>
		<td>
			<p>
				Dernier numéro de trajet pour ce pays : <?php echo $last_trajet[0]; ?><br />
				Ordre du trajet : <input type="text" name="trajet[]" maxlength="10" size="5" />
			</p>
		</td>
	</tr>

<?php

				} else { //Sinon une photo avec ce nom existe déjà

?>

	<tr>
		<td><a href="<?php echo "uploads/petites/$fic"; ?>" rel="lightbox-atomium"><img src="<?php echo "uploads/petites/$fic"; ?>" alt="" /></a></td>
		<td colspan="3">
			<h3>Une photo avec ce nom est déjà présente</h3>
		</td>
	</tr>

<?php
				}
			}
		}
?>
		<tr>
			<td><a href="?p=ajoutphotos">Retour au menu d'ajout</a></td>
			<td><input type="button" value="Tout cocher" name="bouton" onclick="cocher(this.form.elements['fic[]'],this);"/></td>
			<td>
				Tout Horizontal<input type="radio" name="sens" value="horizontal" /><br />
				Tout Vertical<input type="radio" name="sens" value="vertical" /><br />
				Plusieurs choix <input type="radio" name="sens" value="plusieurs" checked="checked" />
			</td>
			<td><input type="submit" name="Valider" value="Valider" id="btn_valider" /></td>
		</tr>
	</table>
</form>

<?php
	$req->closeCursor();
	} else {
		echo "<h1>Impossible d'ouvrir le dossier 'uploads/'</h1>";
	}
} else {
?>

	<h1>Choisissez le pays où ajouter des photos</h1>
	<ul>
<?php
	foreach ($pays as $lien_pays) {
?>
		<li><a href="?p=ajoutphotos&pays=<?php echo $lien_pays; ?>"><?php echo ucfirst($lien_pays); ?></a></li>
<?php
	}
?>
	</ul>
	<a href="?p=index">Retour à l'accueil</a>
<?php
}
?>
galeriebdd.php
<?php
$i = 0; //Ne pas toucher !

$req = $bdd->prepare("SELECT DISTINCT gal_pays FROM galerie_photos");
$req->execute();
while ($donnees = $req->fetch()) {
	$liste_pays[$i] = $donnees['gal_pays']; //Liste des pays
	$i++;
}
//On sécurise le $_GET['pays']
if (isset($_GET['pays'])
	&& in_array($_GET['pays'],$liste_pays)
	&& isset($_GET['page'])
	&& is_numeric($_GET['page'])) 
{

$pays = $_GET['pays']; //On enregistre le pays dans une variable

//Défini la suite de la partie <head></head> pour le HTML
$head = <<<EOD
	<link rel="stylesheet" href="css/slimbox2.css" type="text/css" media="screen" />
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/slimbox2.js"></script>
<style type="text/css" media="screen">
body {
	margin: 0px auto 0px auto;
	padding: 0px;
	width: 1024px;
}
#galerie {
	width: 1024px;
	margin: 0px auto 0px auto;
	text-align: center;
}
img {
	height: 100px;
	width: 100px;
}	
</style>

		<title>$pays</title>
EOD;

	$nb_photos_page = 5; //Nombre de photos par page

	/*
		$_GET['page'] permet de savoir sur quel page on est positionnee
		$start permet de savoir à partir de quel moment on commence l'affichage des fichiers sur la page
	*/
	if ($_GET['page']>0) {
		$start = $_GET['page'] * $nb_photos_page - $nb_photos_page;
		$page = $_GET['page'];
	} else {
		$_GET['page'] = str_replace("-",'',$_GET['page']);//on enleve le/les - si quelqu'un les ecrits...
		$start = $_GET['page'] * $nb_photos_page - $nb_photos_page;
		$page = $_GET['page'];
	}

	/*
		On va afficher la galerie pour le pays choisi
		Et pour le numéro de la page sur laquelle on est
	*/

	$nb_fichiers_total = 0; //Ne pas toucher

	$req = $bdd->prepare("SELECT gal_photo FROM galerie_photos WHERE gal_pays=:pays ORDER BY gal_trajet LIMIT $start,$nb_photos_page");
	$req->bindValue('pays',$pays,PDO::PARAM_STR);
	$req->execute();
	echo "<p>\n";
	while ($donnees = $req->fetch()) {
		$photo = $donnees['gal_photo'];
?>

	<a href="<?php echo "$pays/grandes/$photo"; ?>" rel="lightbox-atomium"><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>

<?php
	}
		echo "</p>\n";

//Mise en place de la pagination
$nb_total = $bdd->prepare("SELECT COUNT(*) AS nb_total FROM galerie_photos WHERE gal_pays=:pays");
$nb_total->bindValue('pays',$pays,PDO::PARAM_STR);
$nb_total->execute();
$nb_total = $nb_total->fetch();
$nb_total = $nb_total['nb_total'];

$nb_pages = ceil($nb_total / $nb_photos_page);
?>
	<p>[
<?php
	for ($i=1;$i<=$nb_pages;$i++) {
		if ($i == $page ) {
?>
		<span class="page_focus"><?php echo $i; ?></span> -
<?php
		} else {
?>
		<a href="?pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="page_non_focus"><?php echo $i; ?></a> -
<?php
		}
	}
?>
	]</p>
<?php

} else {

header("Location: ?p=index");

}
?>
<a href="?p=index">Retour à l'accueil</a>
index.php
<?php
$head = <<<EOD
	<title>Accueil</title>
EOD;
?>
<h1>Choisissez la galerie de photo que vous voulez voir</h1>
<ul>
<?php
//On regarde les pays existants dans la bdd
$req = $bdd->query("SELECT DISTINCT gal_pays FROM galerie_photos");
while ($donnees = $req->fetch()) {
	$pays = $donnees['gal_pays'];
?>
	<li><a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=1">Photos de <?php echo ucfirst($pays); ?></a></li>
<?php
}
?>
	<li><a href="?p=ajoutphotos">Ajouter des photos</a></li>
</ul>
traitement.php
<?php 
$head = <<<EOD
<style type="text/css" media="screen">
.error_sens {
	color: red;
}
.error_fic {
	color: blue;
}
</style>

		<title>Traitement</title>
EOD;

//Liste des pays dans la bdd
$liste_pays = array('france','usa','inde','australie','java','japon');
$pays = $_GET['pays'];

if (isset($_POST['Valider'])) {

$i = 0; //Ne pas toucher
$ajout = 0; //Ne pas toucher

	//On vérifie que les champs importants sont remplis
	if (isset($_GET['pays'])
		&& in_array($_GET['pays'],$liste_pays)
		&& isset($_POST['fic'])
		) {

		//Pour chaque photo cochée on va l'ajouter dans la bdd
		foreach ($_POST['fic'] as $photo) {
			$sens = ''; //Ne pas toucher
			//Recupère le trajet s'il est défini, sinon on le met à zéro
			if (isset($_POST['trajet'][$i]) && is_numeric($_POST['trajet'][$i])) {
				$trajet = $_POST['trajet'][$i]; 
			} else {
				$trajet = 0;
			}
			//On remplace les . par des _ car dans les $_POST les . sont automatiquement modifiés en _
			if (isset($_POST['sens']) && ($_POST['sens'] != 'plusieurs')) {
				$sens = $_POST['sens'];
			} else {
				if (isset($_POST['sens' . strtr($photo,".","_")])) {
					$sens = $_POST['sens' . strtr($photo,".","_")]; //Sens choisi pour la photo
				} else {
?>
	<span class="error_sens">La photo <?php echo $photo; ?> a été cochée mais aucun sens ne lui ai défini.</span><br />
<?php
				}
			}
			if ($sens != '' ) {
				$ajout++;
				$petites = 'uploads/petites/' . $photo; //Chemin et nom des photos en petites
				$grandes = 'uploads/grandes/' . $photo; //Chemin et nom des photos en grandes
				if (file_exists($petites) && file_exists($grandes)) {
					//On déplace la miniature
					rename('uploads/petites/' . $photo, $pays . '/petites/' . $photo);

					//On déplace la photo en grande taille
					rename('uploads/grandes/' . $photo, $pays . '/grandes/' . $photo);

					//On ajoute la photo dans la bdd
					$req = $bdd->prepare("INSERT INTO galerie_photos VALUES('',:pays,:photo,:sens,:trajet)");
					$req->bindValue('pays',$pays,PDO::PARAM_STR);
					$req->bindValue('photo',$photo,PDO::PARAM_STR);
					$req->bindValue('sens',$sens,PDO::PARAM_STR);
					$req->bindValue('trajet',$trajet,PDO::PARAM_INT);
					$req->execute();

				} elseif (file_exists($petites) && !file_exists($grandes)) {
					echo "<span class=\"error_fic\">La photo $photo n'est pas présente en grande taille</span><br />\n";
				} elseif (!file_exists($petites) && file_exists($grandes)) {
					echo "<span class=\"error_fic\">La photo $photo n'est pas présente en petite taille</span><br />\n";
				}
			} else {
			}
			$i++;
		}
		if ($ajout > 0) {
?>
	<h1>Photos ajoutées avec succès</h1>
	<a href="?p=index">Retour à l'accueil</a>
<?php
		}
	} else {
		header('Location: ?p=ajoutphotos&pays=' . $pays);
	}
} else {
	header('Location: ?p=ajoutphotos&pays=' . $pays);
}
?>


Je te conseil de ne pas supprimer les pages que tu avais déjà faites, mais juste de les mettre de côtés et de repartir avec des fichiers vierges avec un copie-colle de mon code.
Il y aura peut-être quelques erreurs pas bien grave, j'ai remodif le code de mes pages de départ assez rapidement et j'ai surement oublié 2-3 trucs bidons.
Je reste donc toujours à disposition si tu as besoin d'aide/questions :wink:

Bonne soirée

Eléphant du PHP | 77 Messages

12 avr. 2011, 17:12

Salut,

Merci c'est très gentil à toi.

Malgré tout plusieurs problèmes persistent :

1) pour le template vu qu'il n'y a quasiment plus de code, et bien c'est une page blanche avec juste écrit la liste des pays et "ajouter des photos" seulement il n'y a que moi qui doit ajouter des photos, ce ne doit pas être visible

2) quand je clic sur un pays ou j'ai ajouté les photos (ajouté avec succès dans la bdd) et bien elles apparaissent toutes petites (je souhaite garder la taille de mes vignettes) et dans n'importe quel ordre ! verticales et horizontales mélangées alors que j'ai attribué des numéros différents. Il vaudrait peut être mieux qu'elles se mettent dans l'ordre ou je les rentrent non ??

3) sur cette galerie, une pagination apparait, mais si on clic sur l'un des nombres et bien on revient sur la même page que galerie, alors que l'adresse est http://localhost/tuan-gallery/galerie.p ... ava&page=6

4) lorsqu'on clic sur une des vignettes elles s'agrandie mais plus avec shadowbox

5) est il possible dans ajoutphotos.php que les images apparaissent directement a leur taille vignette, comme ca on voit direct horizontales et verticales (pas besoin de clic dessus pour voir sa taille et sa forme)

6) les photos doivent apparaitrent 9 par pages (bon ça je devrais trouver sans trop de soucis quelle ligne a modifier)

Je m'excuse j'en demande peut être beaucoup, j'ai bien conscience que c'est énorme tout ça, mais je souhaite que mon site reste t'el qu'il est et juste que cette ajout de photos et la pagination soit en php pour faciliter les choses

Encore mille merci pour ton aide précieuse !!

Eléphant du PHP | 241 Messages

13 avr. 2011, 00:33

Bonsoir,

1) J'ai conscience de ce problème, ce que j'ai fais n'est qu'une base de travail, après il faut faire un espace d'administration avec mot de passe etc.
Pour le graphisme pareil, il faut prendre la partie du code que tu veux et la mettre au bon endroit, à priori tu n'as besoin que de récupérer <?php echo $content; ?> et la partie $head.
Si tu as besoin d'aide je suis là :mrgreen:

2) C'est dans le css, je leurs aient attribués une taille de 100px, il faut supprimer 4 lignes dans la page galeriebdd.php (ligne 35 à 38 dans la variable $head)

Code : Tout sélectionner

A SUPPRIMER img { height: 100px; width: 100px; }
3) Petite oublie de ma part lors de la modification de mon code, ligne 98 à remplacer par celle-ci : (ne pas oublier le - à la fin)
<a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="page_non_focus"><?php echo $i; ?></a> -
4) Pense bien à mettre les fichiers aux bons endroits, dans les dossiers js/ et css/ (c'est comme ca que j'ai fait, après tu peux les changer, mais pense à changer dans le début de tes pages php)

5) Pareil, c'est du css, ligne 22 à 28 à supprimer

Code : Tout sélectionner

A SUPPRIMER img { width: 100px; height: 100px; margin: 0px; padding: 0px; border: 0px; }
6) Ligne 44 dans la page galeriebdd.php :wink:

Bonne nuit !

Eléphant du PHP | 77 Messages

14 avr. 2011, 12:14

Salut,

Merci, ça y est ça reprend forme petit a petit !
Là je vais essayer de bosser la mise en page cet aprem, j'ai déjà bien avancer.
J'ai fait les corrections que tu m'as dit également.

1) Seulement le problème reste l'ordre d'affichage des photos, tout est mélangé, la 1 que j'ai marqué n'est qu'en 3 eme page.....bizarre, et horizontales et verticales sont mixées également...

2) Comment redonner le bel espacement que j'avais avant entre mes photos ? Car je faisais cela grâce a un tableau en html

3) et comment réintégrer l'effet shadowbox pour les agrandissements ?

Eléphant du PHP | 241 Messages

14 avr. 2011, 22:34

Bonsoir,

1) bizarre cette histoire :shock: si tu vas voir dans phpmyadmin, quel est l'ordre des photos ?

2) L'espacement va se faire avec le css, regarde du côté de margin et padding (plutôt margin je dirais)

3) Il faut remettre les fichiers dans le dossier js/ et dans le dossier css/, les fichiers sont ici : http://www.digitalia.be/software/slimbox2

Eléphant du PHP | 77 Messages

15 avr. 2011, 11:04

Hello,

Alors

1) J'ai bien regardé dans phpmyadmin, et dans la table la numéro 1 ne correspond pas a celle qui appelle s'affiche en première position sur le site. A n'y rien comprendre.
http://www.toopix.eu/c39a74f61005442be4 ... e388c.html


2) normalement c'est bon j'ai rajouté dans galeriebdd
img {
margin: 30px
border: 1px double #959595;
}
Seulement quand je fais ça, la modification s'applique a toutes les images ! images de la galeries (parfait c'est ce que je veux), mais également aux "barres" images qui font mes séparations, la solution, je la connais c'est faire 2 règles css distinctes mais avec le code php la au milieu comment attribuer une nouvelle règle spéciale image "template" on va dire
Si bien sur c'est comme cela qu'il faut procéder.


3) Donc je remplace ligne 75 de galeriebdd.php
 <a href="<?php echo "$pays/grandes/$photo"; ?>" rel="lightbox-atomium"><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>
par
<a href="<?php echo "$pays/grandes/$photo"; ?>" rel="lightbox-cats"><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>
Edit : C'est bon pour la slimbox, tout marche nikel !

Le problème reste vraiment l'ordre des images !!

Eléphant du PHP | 241 Messages

15 avr. 2011, 14:00

Salut,

1) Vers les lignes 60 de la page galeriebdd.php, est-ce que la requête SQL est comme ceci ?
$req = $bdd->prepare("SELECT gal_photo FROM galerie_photos WHERE gal_pays=:pays ORDER BY gal_trajet LIMIT $start,$nb_photos_page");
Si elle n'est pas comme ca alors corrige la, sinon remet le code complet de ta page que je vois si y a un pas un truc qui a été modifié sans faire exprès.

2) Effectivement, ton code css va être effectif pour TOUTES les images de ton site, vers la ligne 70 de la page galeriebdd.php tu peux modifier le code d'affichage de tes photos.
<a href="<?php echo "$pays/grandes/$photo"; ?>" rel="lightbox-cats" class="decal_img"><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>
<!-- A la fin de la balise <a href="" ...> tu rajoute un "class="decal_img" "
Ensuite dans ton css à la place de mettre

Code : Tout sélectionner

img { margin: 30px border: 1px double #959595; }
Tu mets

Code : Tout sélectionner

.decal_img { margin: 30px; border: 1px solid #959595; }
Quelques petites corrections dans ton css, met solid au lieu de double, double ne se voit qu'à partir de 3px.
De plus tu avais oublié le ";" à la fin de margin:30px;

Eléphant du PHP | 77 Messages

15 avr. 2011, 21:37

Un peu bizarre tout ça..

Voila mon galeriebdd.php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?php
$i = 0; //Ne pas toucher !

$req = $bdd->prepare("SELECT DISTINCT gal_pays FROM galerie_photos");
$req->execute();
while ($donnees = $req->fetch()) {
        $liste_pays[$i] = $donnees['gal_pays']; //Liste des pays
        $i++;
}
//On sécurise le $_GET['pays']
if (isset($_GET['pays'])
        && in_array($_GET['pays'],$liste_pays)
        && isset($_GET['page'])
        && is_numeric($_GET['page']))
{

$pays = $_GET['pays']; //On enregistre le pays dans une variable

//Défini la suite de la partie <head></head> pour le HTML
$head = <<<EOD
 <link rel="stylesheet" href="css/slimbox2.css" type="text/css" media="screen" />
        <script type="text/javascript" src="js/jquery.js"></script>
        <script type="text/javascript" src="js/slimbox2.js"></script>
<style type="text/css" media="screen">
body {
        margin: 0px auto 0px auto;
        padding: 0px;
        width: 1024px;
}
.decal_img {
        margin: 30px;
        border: 1px solid #959595;
        }
#galerie {
        width: 1024px;
        margin: 0px auto 0px auto;
        text-align: center;
}     
</style>

                <title>$pays</title>
EOD;

        $nb_photos_page = 9; //Nombre de photos par page

        /*
                $_GET['page'] permet de savoir sur quel page on est positionnee
                $start permet de savoir à partir de quel moment on commence l'affichage des fichiers sur la page
        */
        if ($_GET['page']>0) {
                $start = $_GET['page'] * $nb_photos_page - $nb_photos_page;
                $page = $_GET['page'];
        } else {
                $_GET['page'] = str_replace("-",'',$_GET['page']);//on enleve le/les - si quelqu'un les ecrits...
                $start = $_GET['page'] * $nb_photos_page - $nb_photos_page;
                $page = $_GET['page'];
        }

        /*
                On va afficher la galerie pour le pays choisi
                Et pour le numéro de la page sur laquelle on est
        */

        $nb_fichiers_total = 0; //Ne pas toucher

        $req = $bdd->prepare("SELECT gal_photo FROM galerie_photos WHERE gal_pays=:pays ORDER BY gal_trajet LIMIT $start,$nb_photos_page");
        $req->bindValue('pays',$pays,PDO::PARAM_STR);
        $req->execute();
        echo "<p>\n";
        while ($donnees = $req->fetch()) {
                $photo = $donnees['gal_photo'];
?>

        <a href="<?php echo "$pays/grandes/$photo"; ?>" rel="lightbox-cats" class="decal_img"><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>

<?php
        }
                echo "</p>\n";

//Mise en place de la pagination
$nb_total = $bdd->prepare("SELECT COUNT(*) AS nb_total FROM galerie_photos WHERE gal_pays=:pays");
$nb_total->bindValue('pays',$pays,PDO::PARAM_STR);
$nb_total->execute();
$nb_total = $nb_total->fetch();
$nb_total = $nb_total['nb_total'];

$nb_pages = ceil($nb_total / $nb_photos_page);
?>
        <p>[
<?php
        for ($i=1;$i<=$nb_pages;$i++) {
                if ($i == $page ) {
?>
                <span class="page_focus"><?php echo $i; ?></span> -
<?php
                } else {
?>
                <a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="page_non_focus"><?php echo $i; ?></a> -
<?php
                }
        }
?>
        ]</p>
<?php

} else {

header("Location: ?p=index");

}
?>
<a href="?p=index">Retour à l'accueil</a>
La ligne de code que tu m'as demandée à l'air correct.
De plus pour le css, ça ne va pas... pour le contour il apparait mais juste sur le bas de chaque photo...avec 5px qui remonte de chaque côté.
Et le margin: 30px ne va pas. L'écart s'effectue bien sur les cotés, mais sur le dessus et le dessous elles sont collées. J'ai beau avoir éssayé
margin-top: 30px;
margin-bottom: 30px;
margin-left: 30px;
margin-right: 30px;

Eléphant du PHP | 77 Messages

21 avr. 2011, 17:39

Misterflo, es-tu encore dans les parages ?
Ou sinon vu que c'est les vacances.....

Eléphant du PHP | 241 Messages

21 avr. 2011, 23:14

Bonsoir,
oui je suis toujours dans les parages, mais j'avais un peu zappé cette histoire ^^'

Pour l'erreur de l'ordre des images, le code est bon, dans la bdd ca a l'air bon, je vois pas pourquoi elles ne s'affichent pas dans l'ordre :x (chez moi ca marche impec !)

Pour les images avec les margin il faut modifier le .decal_imgau niveau du css

Code : Tout sélectionner

.decal_img { margin: 30px; float: left; }
Par contre le reste ne s'affichera pas correctement a cause du float: left
Pour compenser tu peux rajouter dans le css un .clear que tu placera dans une <div class="clear"></div>.
Tu le place juste après le while qui affiche toutes tes photos.
...
	while ($donnees = $req->fetch()) {
		$photo = $donnees['gal_photo'];
?>

	<a href="<?php echo "$pays/grandes/$photo"; ?>" class="decal_img" rel="lightbox-atomium" ><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>

<?php
	}

//LIGNE A RAJOUTER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		echo '<div class="clear"></div>';
...
Et au niveau du css tu rajoute ceci :

Code : Tout sélectionner

.clear { clear: both; }


EDIT :
Tu peux modifier une ligne qui évitera des erreur W3C :
Cette ligne :
<a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="page_non_focus"><?php echo $i; ?></a> -
A remplacer par :
<a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="page_non_focus"><?php echo $i; ?></a> -
En fait c'est juste les & qu'il faut modifier en &

Eléphant du PHP | 77 Messages

22 avr. 2011, 12:21

Salut,

Merci pour ta réponse.

Si l'on ajoute un même pays en plusieurs fois, les dernieres photos ne tiennent pas compte du numéro attribué, (j'ai bien repris la ou je m'étais arrété)

Sinon c'est bien mieux alignés, mais il reste uncore un chouilla trop sur la gauche. J'ai tenté un margin-left: 30px; dans .clear sans résultats

Eléphant du PHP | 241 Messages

22 avr. 2011, 14:32

Salut,
il ne faut pas toucher au .clear pour décaler les images il faudrait plutôt décaler autre chose avec le css.
En plus petite erreur de ma part, le <div class="clear"> faut le mettre une ligne juste en dessous :D
...
         while ($donnees = $req->fetch()) {
                 $photo = $donnees['gal_photo'];
 ?>

         <a href="<?php echo "$pays/grandes/$photo"; ?>" class="decal_img" rel="lightbox-cats" ><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>

<?php
         }

//Ici il y a la ligne de fin de paragraphe </p>
                 echo "</p>\n";
//LIGNE A METTRE JUSTE APRES !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                 echo '<div class="clear"></div>';
...
J'ai enfin trouvé l'erreur pour le trajet :)
En fait quand on prend des images décaler, c'est à dire pas à la suite les unes des autres dans la page de choix, lorsque que l'on va prendre la valeur du trajet on le fait avec un
$_POST['trajet'][$i];
et un $i qui s'incrémente, seulement comme les photos ont été choisi en décalées, les valeurs du tableau ne sont pas les unes à la suite des autres (pas facile à expliquer #-o )
En gros, on prend 5 photos à la suite, le tableau $_POST['trajet'][$i] ressemble à ca :
$_POST['trajet'][0] = 1;
$_POST['trajet'][1] = 2;
$_POST['trajet'][2] = 3;
$_POST['trajet'][3] = 4;
$_POST['trajet'][4] = 5;
Maintenant, si on choisi 3 photos dans le désordre ca donne ceci
$_POST['trajet'][0] = 1;
$_POST['trajet'][1] = 2;
$_POST['trajet'][2] = 0;
$_POST['trajet'][3] = 0;
$_POST['trajet'][4] = 3;
Seulement le tableau contient 5 valeurs ! Et ma boucle s'arrête après 3 tours, car on a que 3 photos ! donc pour la dernière photo il prenait la valeur qui suivait celle précédente, dans ce cas ca prenait $_POST['trajet'][2] qui vaut 0 ! d'où le problème.

Pour résoudre ce problème il faut récréer un autre tableau qui mettra les valeurs les unes à la suite des autres.
Vers le début il faut rajouter en dessous de $i = 0 //Ne pas toucher
$y = 0; //Ne pas toucher
Et un peu plus en dessous il faut rajouter un foreach()
...
	//Pour chaque photo cochée on va l'ajouter dans la bdd
		foreach ($_POST['fic'] as $photo) {
			$sens = ''; //Ne pas toucher
			//Recupère le trajet s'il est défini, sinon on le met à zéro

	//LIGNES A RAJOUTER
			foreach ($_POST['trajet'] as $trajet) {
				if (!empty($trajet)) {
					$_POST['trajet'][$y] = $trajet;
					$y++;
				}
			}
	//FIN

			if (isset($_POST['trajet'][$i]) && is_numeric($_POST['trajet'][$i])) {
				$trajet = $_POST['trajet'][$i];
...



J'ai vraiment du mal à expliquer correctement l'erreur, donc si tu as besoin que je ré-explique je le ferai ! :mrgreen:

Eléphant du PHP | 77 Messages

23 avr. 2011, 14:55

Salut,

J’ai compris le debut de ton explication; en gros vu le systeme de fonctionnement des boucles, lorsqu'ici on rajoutait des photos a la suite, il nous disait bien a laquelle on s'était arrêtés, mais il reprenais ensuite la boucle à zéro. Enfin quelque chose dans ce genre là je pense.

Questions du jour...LOL

1) j'ai bien réussi a réappliquer un cadre autour des photos
.decal_img {
   margin: 30px;
   float: left;
   border: 1px double #959595;
Oui le double ne se distingue pas du solid, mais c'est pas grave, en fait ca ne marchait pas avant a cause de la position des images.
Je m'explique, si je fais
.decal_img {
   margin: 30px;
   float: left; //ici si je remplace left par none je me retrouve avec des moitiés de cadre et des photos qui se chevauchent etc..
   border: 1px double #959595;
Mais impossible de ramener tout cela au centre; j'ai tenté avec la div image de mon style_galerie.css, aucune influence.....pourquoi ??

2) Je souhaite placer la pagination plus beau entre 2 barres horizontales, pour ce faire je fais
$pagination= $nb_total;
//ou
$pagination= $nb_pages;
//ou
$pagination= $nb_total+nb_pages;
Et je place dans template.php,
 <?php
echo $pagination;
?>
Enfin plus je relis le code, plus je pense que je suis a côté de la plaque !!

3) si par la même occasion je souhaite customiser ma pagination, je procède comme ceci ?
/*ici commence la pagination*/
.pagination{
padding: 2px;
	text-align: center;
}



.pagination ul{
margin: 0;
padding: 0;
text-align: center; /*Set to "right" to right align pagination interface*/
font-size: 16px;
}

.pagination li{
list-style-type: none;
display: inline;
padding-bottom: 1px;
}

.pagination a, .pagination a:visited{
padding: 0 5px;

text-decoration: none;
color: #999;
}

.pagination a:hover, .pagination a:active{
border: 1px solid #333;
color: #333;
background-color: #000;
}

.pagination li.currentpage{
font-weight: bold;
padding: 0 5px;
border: 1px solid;
background-color: #000;
color: #333;
}

.pagination li.disablepage{
padding: 0 5px;
color: #929292;
}

.pagination li.nextpage{
font-weight: bold;
}

* html .pagination li.currentpage, * html .pagination li.disablepage{ /*Pour bug IE6.*/
margin-right: 5px;
padding-right: 0;
}
Donc ce code css au debut de galeriebdd.php; puis
<?php
                } else {
?>
                <a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="page_non_focus"><?php echo $i; ?></a> -
 
a remplacé par
<?php
                } else {
?>
                <a href="?p=galeriebdd&pays=<?php echo $pays; ?>&page=<?php echo $i; ?>" class="pagination"><?php echo $i; ?></a> -
 
puisque je n'ai pas vu de classe css "page_non_focus"....mais j'ai quand même un gros doute

4) Je ne sais pas si tu as pu le voir mais au dessus des photos, j'ai un texte court, comme "Photos de Cuba" ou "Photos des USA", etc..
Est il possible d'afficher donc ce nom en rapport avec l'adresse du site

Genre
$titre= $_GET["p"];
puis donc logiquement dans template.php
<?php
echo $titre;
?>
5) Avec ma version html je pouvais inscrire dans l'agrandissement shadowbox, par exemple le lieu précis de la photo, enfin une courte description, exemple
<a href="grandes images/5082_BALPO.jpg" rel="lightbox[Bali]" title="Bali, le temple patatipatata et blaablabla"><img src="vignettes/5082_BALPO.jpg" alt="Bali"/></a></p>
Je pense que c'est maintenant infaisable ???? Ca vous permettre un meilleur référencement vu que je n'ai pas beaucoup de texte..

6) MERCI !!!!!

Eléphant du PHP | 241 Messages

24 avr. 2011, 00:20

Salut,

Je vais essayer d'être le plus clair possible :P


1) Il faut faire attention, les images sont dans des balises <a>, il faut donc faire en sorte de "déplacer" les 2 ensembles !
Par exemple, si la balise <img /> est en float:left mais que la balise <a> est en float:right, les deux seront effectivement décalés.
C'est un peu ce qui ce passe ici si tu ne mets pas le float.
Si tu veux centrer il faut voir la balise principale qui entoure toutes tes photos, et sur cette balise tu applique un margin: 0px auto 0px auto; pour centrer.


2) Pour dire vrai j'ai pas vraiment compris ce que tu voulais faire :oops:
Si c'est juste pour mettre entre 2 lignes horizontales pourquoi vouloir reprendre une autre variable ?


3) Je ne vois pas vraiment l'aspect que tu veux donner à ta pagination, mais dans le css il y a des ul des li, alors que dans le code html il n'y en a pas :?


4) Si si c'est tout à fait possible, tu peux rajouter un champ dans la bdd pour chaque photo qui comprendra la description de cette photo. Ensuite il y a juste à rajouter ce qu'il faut en php.
Tu rajoute le champ gal_descr dans ta bdd.
ALTER TABLE `galerie_photos` ADD `gal_descr` TEXT NOT NULL
Ensuite tu modifie la page ajoutphoto.php en rajoutant un champ HTML pour entrer ton texte.
...
		<td>
			<p>
				Dernier numéro de trajet pour ce pays : <?php echo $last_trajet[0]; ?><br />
				Ordre du trajet : <input type="text" name="trajet[]" maxlength="10" size="5" />
			</p>
		</td>
<!-- A RAJOUTER -->
		<td>
			<p>
				<label for="descr">Description</label><input type="text" name="descr[]" value="" id="descr" maxlength="500" size="50" /><br />
			</p>
		</td>
<!-- FIN DE L'AJOUT -->
...
Après on modifie le fichier de traitement traitement.php pour bien penser à rajouter la description :D
...
		//Pour chaque photo cochée on va l'ajouter dans la bdd
		foreach ($_POST['fic'] as $photo) {
			$sens = ''; //Ne pas toucher

/* A RAJOUTER */
			//Recupère la description de la photo
			foreach ($_POST['descr'] as $descr) {
				if (!empty($descr)) {
					$_POST['descr'][$y] = $descr;
					$y++;
				}
			}
			if (isset($_POST['descr'][$i])) {
				$descr = $_POST['descr'][$i];
			} else {
				$descr = '';
			}

			$y = 0; //Ne pas toucher !
/* FIN DE L'AJOUT */

			//Recupère le trajet s'il est défini, sinon on le met à zéro
			foreach ($_POST['trajet'] as $trajet) {
				if (!empty($trajet)) {
...
Et pour finir, dans la page galeriebdd.php on rajoute une variable $descr qui prend la valeur de retour avec la requête SQL, et le champ title pour le texte des photos.
	while ($donnees = $req->fetch()) {
		$photo = $donnees['gal_photo'];
		$descr = $donnees['gal_descr'];             //A RAJOUTER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
?>

	<a href="<?php echo "$pays/grandes/$photo"; ?>" class="decal_img" rel="lightbox-atomium" title="<?php echo $descr; ?>"><img src="<?php echo "$pays/petites/$photo"; ?>" alt="" /></a>


Eléphant du PHP | 77 Messages

24 avr. 2011, 10:37

Bonjour,

Tout d'abord bonnes fêtes de Pâques :D

1) Alors, pour l'ajout de la description des images, j'ai bien fait tout ce que tu as dit, la case description apparait bien, mais rien n'apparait dans la slimbox !!!
J'ai pourtant testé direct sinon a partir de la bdd, en rajoutant a une photo déjà existante, vu que l'ajout d'autre photo et de leur propriété ne se fait pas !

2) pour le centrage, je vais chercher encore un peu :D il reste une ou deux choses que je n'ai pas testé encore

3) regarde la
http://www.tuan-gallery.com/fr/usa/gale ... usa_1.html

Tu verras par rapport a ce que je te demandais pour le titre de la page qui change "photos des USA", et la pagination qui est placée plus bas avec son css