PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 29-12-2010 11:35:52

himron
Membre
Inscription : 02-12-2010
Messages : 44

php gestion d'images

salut a tous,

j'ai besoin de vos avis

sur mon site, j'ai des pages dynamiques (php, mysql). sur ces pages, je veux pouvoir donner la possibilité aux auteurs de placer 1 a 4 images d'illustration (tailles et volume limités).
ces images devront etre uploadées du PC local  et identifiées dans la base reprenant les pages.

j'ai donc je pense deux possibilités
- soit uploader les images vers le serveur dans un fichier bien défini. mais dans ce cas, comment permettre aux auteurs des pages, de selectionner ensuite leurs images sur le serveur, et de référencer les URL dans le champ adéquat de la base de donnée des pages ? il faudrait un menu déroulant reprenant les images sur le serveur ou une popup permettant de visualiser ces images et de les selectionner en envoyent l'url vers la bdd...

- soit envoyer l'image directement dans la bdd (via un champ BLOB)... mais dans ce cas il faut pouvoir controler strictement l'image au moment de l'upload parce que ensuite difficile de la reprendre pour en réduire les dimensions (par exemple).

j'aimerais vos avis (le plus pratique, le plus facile a mettre en oeuvre etc) et savoir dans quelle voie vous aurez le plus simple a guider mes pas vers sa concretisation.

merci d'avance.

Hors ligne

#2 29-12-2010 12:12:39

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : php gestion d'images

Selon moi le plus facile à mettre en oeuvre serait de passer par un upload de fichier sur le serveur et non en bdd.

Après pour la gestion à toi de voir, pour ma part je créerai un dossier pour chaque utilisateur (selon son id par exemple) et j'y mettrai les images dedans.
Ainsi tu n'as qu'à parcourir ce dossier pour obtenir la liste des images, aucun filtre à mettre en place.

Hors ligne

#3 29-12-2010 12:48:56

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : php gestion d'images

Saluton,
Sauf cas exceptionnels, rares et tordus, ne jamais enregistrer des images dans une base de données.
Ce n'est pas parce que les SGBD le proposent, notamment les colonnes de type BLOB, effectivement, qu'il est pertinent de les utiliser.
Cela surcharge le SGBD, sans véritable contrepartie de fonctionnalité, bien au contraire, et c'est plus lent.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 29-12-2010 13:35:08

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

ok, voici deux avis tres clairs qui éliminent définitivement l'option base de donnée. c'est vrai qu'alourdir une base de donnée et la ralentir n'est pas une bonne option.

créer un dossier par utilisateur me semble une bonne idée. je vais creuser la question. mais au pire je peux regrouper toutes les images uploadées sur un meme dossier /image/ sans que cela soit une grosse difficuleté. (mais moins bien classé je l'admet).

quelques questions techniques maintenant :

1.  la navigation sur le serveur
je fais completer les pages (des champs "texte" de la base de donnée) via un formulaire.
si les photos sont dans la base de donnée (option écartée), je peux inclure dans le formulaire un menu deroulant dont le contenu sera la liste des images (liste d'un champ de la base de donnée).
si les photos sont dans un directory sur le serveur, comment l'utilisateur pourrait selectionner la photo qu'il lui faut ? autrement dit, je dois, via un formulaire, faire selectionner une photo sur le seveur... et envoyer son URL relative dans le champ de la base de donnée.

est ce possible ? un menu déroulant qui listerait le contenu d'un directory et pas le contenu d'un champ de bdd ?
(menu deroulant ou liste a cocher ou autre moyen de selectionner la photo voulue).

2. je suppose que je dois utiliser une fonction "define" pour créer et définir le directrory ou placer les images sur le serveur. j'ai testé ca marche dans une certaine mesure

define('TARGET', 'images/');

ceci fonctionne mais pour un seul directory global. si je veux créer un directory par personne, je dois utiliser une variable de session avec le username (plus parlant que un no abstrait venant de la base de donnée), ce qui devrait donner

define('TARGET', 'images/'$_SESSION['MM_Username']'/');

mais ca ne marche pas. une erreur dans l'ecriture probablement ????

merci d'avance wink

Dernière modification par himron (29-12-2010 14:34:53)

Hors ligne

#5 29-12-2010 15:18:00

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : php gestion d'images

La concaténation en PHP se symbolise par le point :

 define('TARGET', 'images/' . $_SESSION['MM_Username']'/');

Pour le listing du répertoire il existe moultes fonctions pour le faire en PHP.
glob() ou bien readdir() et des technologies objets.

Hors ligne

#6 29-12-2010 15:25:08

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

ok je me doutais avoir fait une erreur d'ecriture. wink
par contre avec cette ligne ainsi corrigée, il m'indique une "parse error"

Parse error: parse error in D:\sites\WAMP\www\img-add.php on line 5

glob ou readdir, ok je fais une recherche la dessus, merci.

Hors ligne

#7 29-12-2010 16:30:57

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : php gestion d'images

J'ai oublié de corriger la concaténation entre la variable et la dernière chaîne de caractère. wink

Hors ligne

#8 29-12-2010 16:52:59

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

ok ca marche.
ca me rassure de voir que je ne suis pas le seul a me planter dans l'écriture wink

ok donc :
j'ai mon formulaire pour aller chercher les images sur le PC
je renomme la photo "nom-1-11.jpg" d'apres le titre de la page, un numéro d'ordre sur la page, et j'ai rajouté un no aléatoire de 2 chiffres pour éviter d'ecraser par erreur une autre image qui aurait malencontreusement le meme nom.
cette photo est envoyée dans le répertoire au nom de l'utilisateur, tous ces repertoires etant regroupés dans /images/

ca marche. et ca marche tres bien meme. ca avance. super. (un grand merci deja pour cette partie).

maintenant, il me reste a mettre au point la suite : permettre a l'utilisateur de retrouver l'image dans son repertoire, et envoyer son URL relative via formulaire vers la base de donnée concernée. (pour pouvoir afficher l'illustration a coté du texte de la page selectionnée).

la fonction glob() ne me semble pas correspondre (en fait j'ai pas tout compris sur les exemples trouvés sur les sites)
la fonction readdir() me permet de lister lineairement le contenu d'un directory. ca peut aider si j'arrive a coupler cela avec une liste a cocher ou un menu déroulant de formulaire.
au travail...

Hors ligne

#9 29-12-2010 19:13:10

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : php gestion d'images

La fonction glob() te renvoie un array contenant les noms des fichiers du répertoire passé en paramètre.
Sachant que c'est une fonction permettant d'affiner la recherche.
Exemple :

$tab = glob("/mon_dossier/*"); // renverra tous les fichiers du dossier mon_dossier situé à la racine
$tab2 = glob("/mon_dossier/*.jpg"); // listera uniquement les fichiers jpg

Hors ligne

#10 03-01-2011 21:30:20

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

alors, j'ai avancé ici aussi.
dans le formulaire pour mettre a jour les infos dans la bdd, j'ai ceci concernant les champs pour les photos (4* le meme avec des identifiants différents)

<label for="photo1" class="texte">Choix de la photo 1 :</label><br />
        <p class="scroll">
          <?php
      if ($handle = opendir('images/'))
      {
      while (false !== ($file = readdir($handle)))
        {
        echo "$file  <br>";?>
<input type="radio" name="photo1" id="photo1" value="<?php echo "images/".$file; ?>" />
        <?php }
        closedir($handle);
      }
      ?>
        </p>

j'obtiens donc une zone de texte d'espace limité et avec scrollbar (pour que ma page ne s'étende pas a l'infini au plus il y a d'images listées) et des boutons radio a cocher en focntion de l'image selectionnée. ca marche nickel autant pour créer que pour updater les pages.

question : je n'arrive pas a modifier le code pour qu'il garde l'image cochée sur la page d'update.
si c'etait une liste faite a la main, il suffirait que l'inclue l'information "checked" a coté de la bonne image, mais vu que c'est une liste dynamique... et que l'image checked est focntion de ce qui a été mémorisé dans la bdd, j'ignore comment faire.
des idées ?

Hors ligne

#11 04-01-2011 06:35:53

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : php gestion d'images

Saluton,
Il y a une chose qui me chiffonne dans ton bout de script.
Dans une page HTML aussi un id doit être unique. Or là, toutes les images auront le même id "photo1". Je dirais plutôt id="photo1[]"
Sinon, pour ton problème de pré-selection, sauf à avoir lu dans la table de la BD et mémorisé le nom de l'image pour le comparer avec $file et déclarer l'<input type="radio"> checked, je ne vois pas de solution


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 04-01-2011 11:14:35

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

"photo1" est renommé "photo2", "photo3" etc... ce qui fait bien des identifiants uniques
j'ai juste mis un des scripts en exemple. wink

pour revenir au probleme de "checked", voici le code que j'ai essayé

<label for="photo1" class="texte">Choix de la photo 1 :</label><br />
        <p class="scroll">
          <?php
      $photo1 = $row_rspagedetail['photo1'] ;  // ici je vais rechercher l'info dans la bdd
      if ($handle = opendir('images/'))
      {
      while (false !== ($file = readdir($handle)))
        {
        echo "$file  <br>";?>
    <input type="radio" name="photo1" id="photo1" value="<?php echo "images/".$file; ?>"
    <?php if($photo1 = ("images/".$file)) echo 'checked="checked"';?> />
        <?php }
        closedir($handle);
      }
      ?>
        </p>
        <br /><br />

mais ca ne marche pas : systématiquement il coche la derniere image de la liste. (donc pas la bonne).

Dernière modification par himron (04-01-2011 11:15:35)

Hors ligne

#13 04-01-2011 12:05:04

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : php gestion d'images

himron a écrit :

"photo1" est renommé "photo2", "photo3" etc... ce qui fait bien des identifiants uniques
j'ai juste mis un des scripts en exemple. wink

Si tu regardes bien dans ton code html tu verras que la boucle while génère probablement plusieurs id avec la même valeur, donc plusieurs "phot1", "photo2",, "photo3" etc... qui ne sont donc plus uniques

himron a écrit :

pour revenir au probleme de "checked", voici le code que j'ai essayé

<label for="photo1" class="texte">Choix de la photo 1 :</label><br />
        <p class="scroll">
          <?php
      $photo1 = $row_rspagedetail['photo1'] ;  // ici je vais rechercher l'info dans la bdd
      if ($handle = opendir('images/'))
      {
      while (false !== ($file = readdir($handle)))
        {
        echo "$file  <br>";?>
    <input type="radio" name="photo1" id="photo1" value="<?php echo "images/".$file; ?>"
    <?php if($photo1 = ("images/".$file)) echo 'checked="checked"';?> />
        <?php }
        closedir($handle);
      }
      ?>
        </p>
        <br /><br />

mais ca ne marche pas : systématiquement il coche la derniere image de la liste. (donc pas la bonne).

Le comparateur d'égalité c'est == et non pas = (erreur de débutant)


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#14 04-01-2011 12:52:08

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

Maljuna Kris a écrit :

Le comparateur d'égalité c'est == et non pas = (erreur de débutant)

je ne te le fais pas dire.
le pire c'est que je le savais... mais effectivement, en digne débutant j'y ai plus pensé.

ok ca marche nickel cette fois ci.
un vrai plaisir d'apprendre avec vous les gars
(merci MK pour ton soutient)

Hors ligne

#15 04-01-2011 16:35:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : php gestion d'images

Nedankinde


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#16 07-01-2011 15:51:20

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

retour sur le sujet (désolé).

je reviens vers vous parce que j'ai un autre petit soucis concernant la gestion de certaines images (photos d'identité des membres) et leur affichage.

voila, les photos sont regroupées dans un directory spécifique
racinedemonsite/membres/
(les pages sont directement sur la racine, donc le chemin relatif est "membres/")

dans le formulaire pour créer/mettre a jour un profil, j'ai un code "readdir" qui permet de voir la liste des photos dans ce directory et de cocher celle qu'on veut placer.

 <label for="photo" class="texte">Choix de la photo d'identité :</label><br />
        <p class="scroll">
          <?php
      $photo = $row_rsmembre['photo'] ;
      if ($handle = opendir('membres/'))
      {
      while (false !== ($file = readdir($handle)))
        {
        echo "$file  <br>";?>
    <input type="radio" name="photo" id="photo" value="<?php echo "membres/".$file; ?>"
    <?php if($photo == ("membres/".$file)) echo 'checked="checked"';?> />
        <?php }
        closedir($handle);
      }
      ?>
        </p>
        <br /><br />

ce qui affiche ceci dans le formulaire
[img align=C]http://www.francsarchers.be/temp/test-photo.jpg[/img]
comme vous pouvez le voir, en tete de liste il affiche un "." et un ".." qui ne devraient pas s'y trouver.
premiere question : comment les retirer ?

la question est importante parce que en réalité, quand je coche une photo (alienor par exemple), il retient les coordonnées de la photo précédente (alchimiste, donc). ce qui n'est pas du tout pratique.
deuxieme question : quy'a t il de faux dans le code php, qui induise cette erreur ??? et comment corriger cela ?

merci d'avance.

Dernière modification par himron (07-01-2011 15:54:57)

Hors ligne

#17 07-01-2011 16:09:56

ziko
Membre
Inscription : 22-12-2010
Messages : 43

Re : php gestion d'images

Peu etre à la ligne 7 :

while (false !== ($file = readdir($handle)))

Ici tu affecte la valeur de retour de ta fonction readdir à $file, puis tu "compare" false à la valeur de $file.

Je met "compare" entre guillemets car je ne suis pas sur que !== soit correct.

A faire vérifier par des pros wink

Hors ligne

#18 10-01-2011 17:35:27

himron
Membre
Inscription : 02-12-2010
Messages : 44

Re : php gestion d'images

update. j'avais juste mal placé le bouton radio et j'ai reformulé le code en focntion de la remarque de ziko :

 
<p class="scroll">
          <?php
      $photo = $row_rsmembre['photo'] ;
      $fd = opendir('membres/');
      if($fd)
      {
        while(($file = readdir($fd)))
          {
        if($file == '.' or $file == '..') {continue;}  
        else {?>
               
    <input type="radio" name="photo" id="photo" value="<?php echo "membres/".$file; ?>"
    <?php if($photo == ("membres/".$file)) echo 'checked="checked"'; ?> />  
           
              <?php echo "$file  <br>";   }
        }
          closedir($fd);
      } ?>      
        </p>

Dernière modification par himron (10-01-2011 17:48:40)

Hors ligne

Pied de page des forums