IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestionnaires d'images en POO


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Points : 45
    Points
    45
    Par défaut Gestionnaires d'images en POO
    Image.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     
     
    <?php
     
    class Image {
     
    	public function __construct() {
     
    		// le constructeur est vide pour ce projet
    	}
     
    	public function getImages($image_dir) {
     
    		// iterator
     
    		$i = 0;
     
    		// opendir — Ouvre un dossier, et récupère un pointeur dessus
     
    		// $handle - (gérer, manipuler, traiter)
     
    		if($handle = opendir($image_dir)) {
     
    			// readdir — Lit une entrée du dossier
     
    			while(false !== ($entry = readdir($handle))) {
     
    				if($entry != "." && $entry != "..") {
     
    					$i++;
     
                        $images[$i]['filename'] = $entry;
     
    					$image_data = $this->getImageData($entry);
     
                        $images[$i]['title'] = $image_data['title'] ;
                        $images[$i]['description'] = $image_data['description'] ;
     
                        echo '<pre>';
                        print_r($images);
                        echo '</pre>';
    				}
    			}
    		}
     
    		closedir($handle);
     
    		return $images;
    	}
     
    	public function insertImage($title, $descr, $filename) { 
     
    		$mysqli = new mysqli('localhost', 'root', '', 'projet_images'); 
            $mysqli->set_charset("utf8");
     
            // connect_errno => Retourne le code d'erreur de la connexion MySQL style orienté objet
     
            if ($mysqli->connect_errno) {
     
                // connect_error => Retourne le message d'erreur de connexion MySQL style orienté objet
     
            	printf("Echec de la connexion: %s\n", $mysqli->connect_error);
     
                exit(); 
            } 
     
            if (!$mysqli->query('INSERT INTO images (title, description, filename)
            	                 VALUES ("' . $title . '", "' . $descr . '", "' . $filename . '")')) {
     
            	$msg_error = '<p class="error">Une erreur est survenue lors de l\'insertion des données dans la base.
                                  Message d\'erreur : ' . $mysqli->error . '</p>';
     
                $msg_error .= '<br><p class="error">Aucune information n\'a été enregistrée.</p>';
     
                return $msg_error; 
            } 
            else {
     
                $mysqli->close();
     
                return true;
            }
     
        }
     
        public function getImageData($filename) {
     
        	$mysqli = new mysqli('localhost', 'root', '', 'projet_images');
            $mysqli->set_charset("utf8");
     
            if ($mysqli->connect_errno) {
     
            	printf("Echec de la connexion: %s\n", $mysqli->connect_error);
     
                exit();
            }
     
            $result = $mysqli->query('SELECT id, title, description, filename FROM images WHERE filename = "' . $filename . '"');
     
            if (!$result) {
     
            	echo 'Une erreur est survenue lors de la récupération des données dans la base. Message d\'erreur : ' . $mysqli->error;
     
                return false;
            }
            else {
     
            	$row = $result->fetch_array();
     
                $image_data['id'] = $row['id'];
                $image_data['title'] = $row['title'];
                $image_data['description'] = $row['description'];
                $image_data['filename']  = $row['filename'];
     
                return $image_data;
            }
     
            $mysqli->close();
        }
     
        public function updateImageData($title, $descr, $filename) { 
     
            $mysqli = new mysqli('localhost', 'root', '', 'projet_images'); 
            $mysqli->set_charset("utf8");
     
            if ($mysqli->connect_errno) {
     
                echo 'Echec de la connexion : ' . $mysqli->connect_error;
     
                exit(); 
            }
     
            $query = 'UPDATE images SET title = "' . $title . '", description = "' . $descr . '" WHERE filename = "' . $filename . '"';
     
            if(!$mysqli->query($query)) {
     
                $msg_error = '<p class="error">Une erreur est survenue lors de la mise à jour des données dans la base.
                                  Message d\'erreur : ' . $mysqli->error . '</p>';
     
                $msg_error .= '<br><p class="error">Aucune information n\'a été enregistrée.</p>';
     
                return $msg_error;
            }
            else {
     
                $mysqli->close();
     
                return true;
            }
        }
    }
     
    ?>
    Admin.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     
    <?php require('config.php'); ?>
    <?php require('class/Image.php'); ?>
    <?php require('process-image.php'); ?>
     
    <?php
     
    $image = new Image();
    $images = $image->getImages(IMAGE_DIR_PATH);
     
    ?>
     
    <h1><?php echo WEB_TITLE ?></h1>
     
    <ul>
     
    <?php foreach ($images as $image): ?>
     
    <li>
       <img src="<?php echo IMAGE_DIR_URL . $image['filename'] ?>">
     
    <form method="post" action="process-image.php">
         <p>Titre :
           <input type="text" name="title" value="<?php echo $image['title'] ?>">
         </p>
     
         <?php if(!empty($image['title'])): ?>
     
         <input type="hidden" name="update" value="1">
     
         <?php endif ?>
     
         <input type="hidden" name="filename" value="<?php echo $image['filename'] ?>">
     
         <p>Description<br>
           <textarea name="descr" cols="50" rows="5"><?php echo $image['description'] ?></textarea>
         </p>
     
         <p>
           <input type="submit" name="formImageSubmit" value="validez">
         </p>
    </form>
     
    <?php //if(isset($error_msg)) echo $error_msg ?>
    <?php if(isset($msg_error)) echo $msg_error ?>
    <?php if(isset($msg_success)) echo $msg_success ?>
     
    </li>
     
    <?php endforeach ?>
     
    </ul>
    process-image.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    <?php
     
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
     
    ?>
     
    <?php
     
    if(!isset($_POST['formImageSubmit'])) {
     
    	$error_msg = '<p class="error">Aucune donnée n\'est fournie.<a href="admin.php">retour</a></p>';
    }
     
    if(isset($_POST['formImageSubmit'])) {
     
        if((empty($_POST['title'])) OR (empty($_POST['descr'])) OR (empty($_POST['filename']))) {
     
        	$error_msg = '<p class="error">une des informations est manquante.<a href="admin.php">retour</a></p>';
        }
        else {
     
            // trim => permet d'enlever les espaces blancs au début et à la fin des chaînes de caractère.
     
            $title = trim($_POST['title']);
            $descr = trim($_POST['descr']);
            $filename = trim($_POST['filename']);
     
        	$image = new Image();
        	$insertImage = $image->insertImage($title, $descr, $filename);
     
        	if(true === $insertImage) {
     
                $msg_success = '<p class="message">Les informations ont bien été enregistrées dans la base de données.</p>';
     
        		header('location:admin.php?insertImage=ok');
        	}
            else {
     
                $msg_error = $insertImage;
     
            	$error_msg = '<br><p class="error"><a href="admin.php">retour</a>';
            }
        }
     
        if(isset($_POST['update'])) {
     
            $insertImage = $image->updateImageData($title, $descr, $filename);
        }
        else {
     
            $insertImage = $image->insertImage($title, $descr, $filename);
        }
    }
     
    ?>
    contenu.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    <?php
     
    $image = new Image();
    $images = $image->getImages(IMAGE_DIR_PATH);
     
    ?>
     
    <h1><?php echo WEB_TITLE ?></h1>
     
    <ul>
     
    <?php foreach($images as $image) : ?>
     
    <li>
       <p><img src="<?php echo IMAGE_DIR_URL . $image['filename'] ?>"></p>
       <p><?php echo $image['title'] ?></p>
       <p><?php echo $image['description'] ?></p>
    </li>
     
    <?php endforeach ?>
     
    </ul>
    index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <?php 
     
    require('config.php');
     
    require('class/Image.php');
     
    require('contenu.php'); 
     
    ?>
    Bonjour, l'instance de la class dans le fichier process-image.php ne fonctionne pas. class non trouvée.

    Merci pour votre aide.

    Recevez mes vœux et bon week end à tous

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Il faut inclure la classe que tu souhaites utiliser sur chacune de tes pages PHP...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php require('config.php'); ?>
    <?php require('class/Image.php'); ?>
    <?php require('process-image.php'); ?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Points : 45
    Points
    45
    Par défaut
    Bonjour, j'ai fait exactement ce que tu m'as dit de faire, j'ai toujours le même message
    Fatal error: Uncaught Error: Class 'Image' not found in C:\wamp64\www\exercice-projet-images\process-image.php on line 31

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    le fichier contenant ta classe class Image se trouve dans un répertoire class ?
    Ton fichier process-image.php est bien à la racine du site ?
    D'ailleurs, évite le tiret dans le nommage des éléments. Je te le déconseille fortement.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 388
    Points : 5 736
    Points
    5 736
    Billets dans le blog
    1
    Par défaut
    A mon avis, bien que je débute en POO, il manque use class/Image dans index.php.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    non laurent,

    déjà cela devrait être use class\Image et non pas use class/Image comme tu l'as noté.
    Ensuite pour que cela soit le cas, il aurait fallu que dans le fichier contenant la définition de la classe Image, on y trouve ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
     
    namespace class;
     
    class Image
    Comme class est un mot réservé, tu ne peux pas avoir namespace class;, (du moins si cela est possible, je n'ai pas testé, c'est très très fortement déconseillé)

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 388
    Points : 5 736
    Points
    5 736
    Billets dans le blog
    1
    Par défaut
    Oui, pendant le repas, j'ai pensé qu'il manquait aussi un namespace dans Image.php. Mais vu que, comme tu le rappelles, class est un mot réservé, peut-être le renommer...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CakePHP] Gestionnaire d'images avec base de données
    Par Shinja dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 14/08/2014, 01h03
  2. Gestionnaire d'images (Upload/Delete)
    Par dav2k dans le forum jQuery
    Réponses: 4
    Dernier message: 29/07/2010, 18h11
  3. [Images] Redimensionner des images sans POO
    Par gcvoiron dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 31/10/2007, 07h37
  4. Gestionnaire d'images simple
    Par TryExceptEnd dans le forum Delphi
    Réponses: 2
    Dernier message: 23/05/2007, 17h12
  5. Gestionnaire d'image en réseau
    Par Myogtha dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 21/02/2006, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo