On peut très bien lister les fichiers présent dans un dossier !
CREATE TABLE `galerie`.`galerie_photos` (
`gal_id` INT NOT NULL ,
`gal_pays` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`gal_photo` VARCHAR( 300 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( `gal_id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
PS : j'avais dis que je posterai un début de code, ca va venir promis
Effectivement comme une photo ne peut provenir que d'un seul pays, pas besoin de seconde table avec les pays.Donc en gros, une table avec 3 champs seraient suffisant.
Un champ id
Un champ pays
Et un champ image
Même plus besoin de se casser la tête avec une table externe pour les pays, et plus besoin de mettre toutes les photos dans un seul champ pour le pays.PS : j'avais dis que je posterai un début de code, ca va venir promisCREATE TABLE `galerie`.`galerie_photos` ( `gal_id` INT NOT NULL , `gal_pays` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `gal_photo` VARCHAR( 300 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , PRIMARY KEY ( `gal_id` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
Le champ supplémentaire pourrait donc être celui du sens de l'image.4) pour l'apparition c'est assez complexe dans mon cas
pour un pays, il faut trier horizontales ensemble et verticales ensembles, puis il y a une continuité dans la progression du voyage, un "trajet". C'est possible d'arriver a choisir tout ça ?? (dans ce cas la ce serait donc par numéro d'id non ?)
CREATE TABLE IF NOT EXISTS `galerie_photos` (
`gal_id` int(11) NOT NULL AUTO_INCREMENT,
`gal_pays` varchar(30) NOT NULL,
`gal_photo` varchar(100) NOT NULL,
`gal_sens` enum('horizontal','vertical') NOT NULL DEFAULT 'horizontal',
`gal_trajet` int(11) NOT NULL,
PRIMARY KEY (`gal_id`),
UNIQUE KEY `gal_photo` (`gal_photo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
On dispose du champ gal_pays pour renseigner le pays de la photo, le champ gal_photo qui correspond au nom de la photo, le champ gal_sens pour choisir vertical ou horizontal, et enfin le champ gal_trajet qui permet de définir un ordre d'apparition des photos.<?php
//Connexion à la BDD
try
{
$db_host = ""; //Lieu où est héberger la BDD
$db_name = ""; //Nom de la BDD
$db_login = ""; //Login de connexion à la BDD
$db_mdp = ""; //Mot de passe de connexion à la BDD
$bdd = new PDO("mysql:host=$db_host;dbname=$db_name",$db_login,$db_mdp);
}
catch(Exception $e)
{
exit('Erreur : ' . $e->getMessage());
}
?>
<!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" />
<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>
<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>
</head>
<body>
<div id="corps">
<?php
//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="traitement.php?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="ajoutphotos.php">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="?pays=<?php echo $lien_pays; ?>"><?php echo ucfirst($lien_pays); ?></a></li>
<?php
}
?>
</ul>
<a href="index.php">Retour à l'accueil</a>
<?php
}
?>
</div>
</body>
</html>
Au début du fichier, il y a un tableau qui contient le nom des pays autorisés dans la bdd.<?php
//Fichier de connexion à la bdd
include('sql_connect.inc.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" />
<style type="text/css" media="screen">
.error_sens {
color: red;
}
.error_fic {
color: blue;
}
</style>
<title>Traitement</title>
</head>
<body>
<div id="corps">
<?php
//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="index.php">Retour à l'accueil</a>
<?php
}
} else {
header('Location: ajoutphotos.php?pays=' . $pays);
}
} else {
header('Location: ajoutphotos.php?pays=' . $pays);
}
?>
</div>
</body>
</html>
Et enfin, la page qui permet de voir ces galeries de photos<?php
//Connexion à la BDD
try
{
$db_host = ""; //Lieu où est héberger la BDD
$db_name = ""; //Nom de la BDD
$db_login = ""; //Login de connexion à la BDD
$db_mdp = ""; //Mot de passe de connexion à la BDD
$bdd = new PDO("mysql:host=$db_host;dbname=$db_name",$db_login,$db_mdp);
}
catch(Exception $e)
{
exit('<html><body><h1>Erreur de connexion à la BDD</h1></body></html>');
}
$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
$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'];
}
?>
<!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" />
<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>Contenudossier</title>
</head>
<body>
<div id="galerie">
<?php
/*
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: index.php");
}
?>
<a href="index.php">Retour à l'accueil</a>
</div>
</body>
</html>
$db_host = "localhost"; //Lieu où est héberger la BDD
$db_name = "tuan-galerie"; //Nom de la BDD
$db_login = "root"; //Login de connexion à la BDD (j'ai aussi testé "root@localhost")
$db_mdp = ""; //Mot de passe de connexion à la BDD
et j'arrive sur ca comme page
Code : Tout sélectionner
Objet non trouvé!
L'URL requise n'a pu etre trouvée sur ce serveur. Si vous avez tapé l'URL à la main, veuillez vérifier l'orthographe et réessayer.
Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le gestionnaire du site.
Error 404
localhost
29/03/2011 21:15:32
Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 Code : Tout sélectionner
Serveur: localhost via TCP/IP
Version du serveur: 5.1.41
Version du protocole: 10
Utilisateur: root@localhost
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
Serveur web
Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
Version du client MySQL: 5.1.41
Extension PHP: mysqli<div id="corps">
<!-- On ne garde que ce code, le reste peut être effacé (y compris la balise <div id="corps">)-->
</div>
Ensuite comme dans le tutoriel, dans ton index.php, selon l'appel en $_GET tu vas inclure la page demandé.
<?php
...
if (isset($_GET['p']) && file_exists($_GET['p'] . '.php')) {
ob_start();
include($_GET['p']);
$content = $ob_get_content();
ob_end_clean();
}
/*
Donc si $_GET['p'] = 'ajoutphotos' et que le fichier existe
on va chercher le code de cette page contenu dans le fichier ajoutphotos.php
*/
...
?>