Voici mon code :
includes/inc-connexion.php
try {
$db = new PDO('mysql:host=localhost; charset=utf8; dbname=projet_images', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Echec de la connexion ' . $e->getMessage();
}
includes/inc-config.php
define('WEB_TITLE', 'Projet images');
define('WEB_DIR_NAME', 'projet-images');
define('IMAGE_DIR_NAME', 'images');
define('IMAGE_THUMB_NAME', 'thumbnails');
define('IMAGE_DIR_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');
define('IMAGE_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');
define('WEB_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/');
define('THUMB_DIR_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/' . IMAGE_THUMB_NAME . '/');
define('THUMB_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/' . IMAGE_THUMB_NAME . '/');
class/Image.phpclass Image
{
protected $id;
protected $title;
protected $descr;
protected $filename;
protected static $error;
const MSG_ERROR_ID = 'ID doit être un entier.';
const MSG_ERROR_TITLE = 'TITRE doit être une chaîne de caractères.';
const MSG_ERROR_DESCR = 'DESCR doit être une chaîne de caractères.';
const MSG_ERROR_FILENAME = 'FILENAME doit être une chaîne de caractères.';
const MSG_ERROR_END = 'L\'objet ne peut pas être créé.';
public function __construct(array $data)
{
$this->setId($data['id']);
$this->setTitle($data['title']);
$this->setDescr($data['descr']);
$this->setFilename($data['filename']);
if (!empty(self::$error)) {
throw new Exception(self::$error . self::MSG_ERROR_END);
}
}
public function setError($msg)
{
self::$error = $msg;
}
public function getError()
{
return self::$error;
}
public function setId($id)
{
if ((is_int($id)) and ($id > 0)) {
$this->id = $id;
} else {
$this->setError(self::MSG_ERROR_ID);
}
}
public function setTitle($title)
{
if (is_string($title)) {
$this->title = $title;
} else {
$this->setError(self::MSG_ERROR_TITLE);
}
}
public function setDescr($descr)
{
if (is_string($descr)) {
$this->descr = $descr;
} else {
$this->setError(self::MSG_ERROR_DESCR);
}
}
public function setFilename($filename)
{
if (is_string($filename)) {
$this->filename = $filename;
} else {
$this->setError(self::MSG_ERROR_FILENAME);
}
}
public function getId()
{
return $this->id;
}
public function getTitle()
{
return $this->title;
}
public function getDescr()
{
return $this->descr;
}
public function getFilename()
{
return $this->filename;
}
}
class/imageManager.phpclass imageManager
{
private $_db;
public function __construct($db)
{
$this->setDb($db);
}
public function setDb(PDO $dbh)
{
$this->_db = $dbh;
}
public function insertImageData(Image $image)
{
try {
$sql = 'INSERT INTO images(title, descr, filename, dt_creation)
VALUES(:title, :descr, :filename, NOW())';
$title = strip_tags($image->getTitle());
$descr = strip_tags($image->getDescr());
$filename = strip_tags($image->getFilename());
$stmnt = $this->_db->prepare($sql);
$stmnt->bindParam(':title', $title);
$stmnt->bindParam(':descr', $descr);
$stmnt->bindParam(':filename', $filename);
$stmnt->execute();
} catch (PDOException $e) {
echo 'Une erreur est survenue lors de la récupération des données dans la base. Message d\'erreur : ' . $e->getMessage();
}
}
public function updateImageData(Image $image)
{
try {
$sql = 'UPDATE images SET title = :title, descr = :descr WHERE filename = :filename';
$title = strip_tags($image->getTitle());
$descr = strip_tags($image->getDescr());
$filename = strip_tags($image->getFilename());
$stmnt = $this->_db->prepare($sql);
$stmnt->bindParam(':title', $title);
$stmnt->bindParam(':descr', $descr);
$stmnt->bindParam(':filename', $filename);
$stmnt->execute();
} catch (PDOException $e) {
echo 'Une erreur est survenue lors de la récupération des données dans la base. Message d\'erreur : ' . $e->getMessage();
}
}
public function getImagesData()
{
try {
$sql = 'SELECT id, title, descr, filename FROM images';
$stmnt = $this->_db->prepare($sql);
$stmnt->execute();
while ($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
$path = IMAGE_DIR_PATH . $row['filename'];
if (file_exists($path)) {
$image_data[$row['id']]['id'] = $row['id'];
$image_data[$row['id']]['title'] = $row['title'];
$image_data[$row['id']]['descr'] = $row['descr'];
$image_data[$row['id']]['filename'] = $row['filename'];
$image_data[$row['id']]['exist'] = 'OK';
}
return $image_data;
}
} catch (PDOException $e) {
echo 'Une erreur est survenue lors de la récupération des données dans la base. Message d\'erreur : ' . $e->getMessage();
}
}
public function getImageData($filename)
{
try {
$sql = 'SELECT id, title, descr, filename FROM images WHERE filename = :filename';
$stmnt = $this->_db->prepare($sql);
$stmnt->execute(array(
":filename" => $filename
));
$count = $stmnt->rowCount();
if ($count > 0) {
return true;
} else {
return false;
}
} catch (PDOException $e) {
echo 'Une erreur est survenue lors de la récupération des données dans la base. Message d\'erreur : ' . $e->getMessage();
}
}
public function upload($files)
{
$upload_dir = IMAGE_DIR_PATH;
foreach ($files['upload']['error'] as $key => $error) {
$type = $files['upload']['type'][$key];
$size = $files['upload']['size'][$key];
if ($type == 'image/jpeg') {
if ($size <= 40913) {
$error = 0;
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $files['upload']['tmp_name'][$key];
$name = $files['upload']['name'][$key];
$name = $this->cleanText($name);
if (move_uploaded_file($tmp_name, $upload_dir . $name) === false) {
$error++;
} else {
$this->createThumbnail($name);
}
} else {
$error++;
}
} else {
$error++;
echo 'Les images doivent être inférieur ou égal à 40913 octets';
}
} else {
$error++;
echo 'Les images doivent êtres au format jpg';
}
}
if ($error == 0) {
return true;
} else {
return false;
}
}
public function createThumbnail($filename)
{
$image = IMAGE_DIR_PATH . $filename;
$vignette = THUMB_DIR_PATH . $filename;
$size = getimagesize($image);
$largeur = $size[0];
$hauteur = $size[1];
$largeur_max = 200;
$hauteur_max = 200;
$image_src = imagecreatefromjpeg($image);
if ($largeur > $largeur_max or $hauteur > $hauteur_max) {
if ($hauteur <= $largeur) {
$ratio = $largeur_max / $largeur;
} else {
$ratio = $hauteur_max / $hauteur;
}
} else {
$ratio = 1;
}
$image_destination = imagecreatetruecolor(round($largeur * $ratio), round($hauteur * $ratio));
imagecopyresampled(
$image_destination,
$image_src,
0,
0,
0,
0,
round($largeur * $ratio),
round($hauteur * $ratio),
$largeur,
$hauteur
);
if (!imagejpeg($image_destination, $vignette)) {
echo 'la création de la vignette a echouée pour l\'image ' . $image;
return false;
exit;
} else {
return true;
}
}
public function cleanText($filename)
{
$special = array(
' ', '\'', 'á', 'à', 'â', 'ä', 'ã', 'å', 'ç', 'é', 'è', 'ê', 'ë', 'í', 'ì', 'î', 'ï',
'ñ', 'ó', 'ò', 'ô', 'ö', 'õ', 'ú', 'ù', 'û', 'ü', 'ý', 'ÿ', 'Á', 'À', 'Â', 'Ä', 'Ã',
'Å', 'Ç', 'É', 'È', 'Ê', 'Ë', 'Í', 'Ï', 'Î', 'Ì', 'Ñ', 'Ó', 'Ò', 'Ô', 'Ö', 'Õ', 'Ú',
'Ù', 'Û', 'Ü', 'Ý'
);
$normal = array(
'-', '', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e',
'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'u',
'u', 'u', 'u', 'y', 'y', 'A', 'A', 'A', 'A', 'A', 'A', 'C',
'E', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'N', 'O', 'O',
'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y'
);
$result = str_replace($special, $normal, $filename);
$results = strtolower($result);
return $results;
}
}
admin/upload.php<?php
require('../includes/inc-connexion.php');
require('../includes/inc-config.php');
require('../class/Image.php');
require('../class/imageManager.php');
require('../process/process-image-upload.php');
?>
<h1>Upload</h1>
<?php if (isset($message)) : ?>
<p class="success"><?php echo $message ?></p>
<?php endif ?>
<form id="upload" action="" method="post" enctype="multipart/form-data">
<p>Ajoutez des images</p>
<input type="file" value="" name="upload[]" multiple="multiple">
<p>Titre : <input type="text" name="title_form"></p>
<p>Description :<br>
<textarea name="descr_form" cols="50" rows="5"></textarea>
</p>
<input type="submit" id="submit" name="submit_form">
</form>
process/process-image-upload.php
if (!isset($_POST['submit_form'])) {
$message = '<p class="error">Aucune donnée n\'est fournie.<a href="' . WEB_DIR_URL . 'admin/upload.php">retour</a></p>';
}
if (isset($_POST['submit_form'])) {
$title_form = trim($_POST['title_form']);
$descr_form = trim($_POST['descr_form']);
$upload = $_FILES['upload']['name'];
if ((empty($title_form)) or empty($descr_form) or empty($upload)) {
$message = '<p class="error">Une des informations est manquante.<a href="' . WEB_DIR_URL . 'admin/upload.php">retour</a></p>';
} else {
$image = new imageManager($db);
$images = $image->upload($_FILES);
if ($images === false) {
$message = '<p class="error">Le chargement a échoué</p>';
} else {
$message = '<p class="success">Le chargement a réussi</p>';
$images_data = array(
'id' => 1,
'title' => $title_form,
'descr' => $descr_form,
'filename' => $upload
);
$image_data = new Image($images_data);
$image = new imageManager($db);
if (!$image->getImageData($upload)) {
$image->insertImageData($image_data);
$message = '<p class="success">Les informations ont bien été enregistrées dans la base de données.</p>';
} else {
$message = '<p class="error">Une erreur est survenue lors de l\'enregistrement des données dans la base.<br>
Aucune information n\'a été enregistrée.</p>';
}
}
}
}
Merci d'avance pour votre aide.