Vous n'êtes pas identifié(e).
Pages :: 1
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
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
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
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
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
mais ca ne marche pas. une erreur dans l'ecriture probablement ????
merci d'avance
Dernière modification par himron (29-12-2010 14:34:53)
Hors ligne
La concaténation en PHP se symbolise par le point :
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
ok je me doutais avoir fait une erreur d'ecriture.
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
ok ca marche.
ca me rassure de voir que je ne suis pas le seul a me planter dans l'écriture
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
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 :
Hors ligne
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)
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
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
"photo1" est renommé "photo2", "photo3" etc... ce qui fait bien des identifiants uniques
j'ai juste mis un des scripts en exemple.
pour revenir au probleme de "checked", voici le code que j'ai essayé
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
"photo1" est renommé "photo2", "photo3" etc... ce qui fait bien des identifiants uniques
j'ai juste mis un des scripts en exemple.
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
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
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
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
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.
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
Peu etre à la ligne 7 :
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
Hors ligne
update. j'avais juste mal placé le bouton radio et j'ai reformulé le code en focntion de la remarque de ziko :
Dernière modification par himron (10-01-2011 17:48:40)
Hors ligne
Pages :: 1