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 !!!
La disposition des dossiers et des pages est comme ceci :
- content/
- ajoutphotos.php
galeriebdd.php
index.php
traitement.php
- ajoutphotos.php
- france/
- inde/
- usa/
- autrepays/
- inc/
- sql_connect.inc.php
- uploads/
- .htaccess
- galerie.php
- template.php
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.phpDans 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
Bonne soirée