Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 10h38   #1
Membre confirmé
 
Avatar de awalter1
 
Inscription : août 2004
Messages : 665
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 665
Points : 232
Points : 232
Par défaut interaction php html

Bonjour,
J'ai un fichier test.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<body><?php
function make_miniature($nom)
{ 
...
return $nom_min; 
} 
$nom_miniature=make_miniature("monimage.jpg");
echo "nom_miniature=",$nom_miniature;
?>
<p><img border="0" src="mini-monimage.jpg">
</body>
</html>
l'exécution de ma fonction php s'exécute correctement : elle crée bien la miniature. Dans mon navigateur j'ai :
Code :
nom_miniature=mini-monimage.jpg
suivi de ma miniature, ce qui est correct.
A présent, il faut paramètrer tout cela. J'ai fais beaucoup de tests, lu des exemples similaires, mais il reste des différences qui fait que ça ne marche pas.
Deux pb : l'appel de la procedure make_miniature à partir du source html, puis le passage de paramètre.
Je pensais faire
Code :
<img border="0" src="make_miniature.php?image=monimage.jpg">
Le résultat est le logo qui signifie que l'image n'est pas trouvé. J'ai un doute sur le make_miniature.php car ça fait nom de fichier. et dans la fonction php comment récupérer le paramètre "image".
Merci de votre aide
awalter1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 11h15   #2
Membre régulier
 
Guillaume M.
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Guillaume M.

Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 83
Points : 83
Tu peux récupérer le paramètre "image" avec $_GET['image']

Peut on avoir un aperçu du code de ton script make_miniature.php ?
gmarsay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 11h41   #3
Membre confirmé
 
Avatar de awalter1
 
Inscription : août 2004
Messages : 665
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 665
Points : 232
Points : 232
J'avais essayé d'utiliser $_GET['param'], mais cela ne retournait rien. Je crois que le pb vient de l'appel de la fonction make_miniature, pourquoi cette extension .php ? et je passe bien un paramètre (image) à la fonction alors qu'apporte $_GET ? J'avais cru aussi comprendre que $_GET servait de PHP à PHP, moi mon appel se fait à partir d'HTML. Soit c'est un pb de syntaxe d'appel, soit c'est impossible à faire (j'ai lu que certains passait par du javascript pour appeler le php à partir d'html, mais c'était de vieux posts). Je bute la dessus depuis pas mal de jours.
Merci

Code :
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
<html>
<body><?php
function make_miniature($img, $max_width=400, $max_height=400, $repertoire_destination='./Images/ImagePeinture/', $prefixe='mini-', $supprimer_original=false)
{ 
/*Fonction qui créer la mimiature d'une image. 
Retourne nom complet de la miniature 
 
Liste des paramètres : 
- $img : nom complet de l'image originale 
- $max_width : Largeur maximale pour la miniature 
- $max_height : Hauteur maximale pour la miniature 
- $repertoire_destination : Répertoire dans lequel doit être sauvegardée la miniature 
- $prefixe : Préfixe donné à la miniature (Ex : "ma-photo.jpg" devient "mini-ma-photo.jpg" 
- $supprimer_original : Si est égal à true on supprime l'image originale 
 
/*Initialisations*/ 
echo "img=",$img,"\n";
echo "image=",$_GET['image'],"\n";
$message = ''; 
/*on ouvre le fichier*/ 
$file = fopen($img,'r'); 
if ($file !== false) //Le fichier existe 
{ 
/*On recupere le nom de l'image*/ 
$nom = $prefixe.basename($img); 
/*getimagesize() renvoie FALSE si le fichier n'est pas une image*/ 
if (false !== list($largeur_orig,$hauteur_orig,$extension) = getimagesize($img)) 
{ 
/*On récupère l'extension de l'image*/ 
$extension_img = substr(strchr($img,'.'),1); 
/*On vérifie que le fichier soit bien au format jpg, gif ou png*/ 
if(ereg('(jpeg|jpg|gif|png)$',$extension_img)) 
{ 
switch ($extension) 
{ 
case 1: // GIF 
$type_img = imagecreatefromgif($img); break; 
case 2: //JPEG 
$type_img = imagecreatefromjpeg($img); break; 
case 3: // PNG 
$type_img = imagecreatefrompng($img); break; 
} 
/*On verifie la taille*/ 
if(($largeur_orig > $max_width) || ($hauteur_orig >
 $max_height)) 
{ 
// si l'image est trop large ou trop haute 
if ($largeur_orig > $hauteur_orig) 
{ 
// image plus large que haute 
$hauteur = round(($hauteur_orig * $max_width) / $largeur_orig); 
$largeur = $max_width; 
} 
else 
{ 
// image plus haute que large 
$hauteur = $max_height; 
$largeur = round(($largeur_orig * $max_height) / $hauteur_orig); 
} 
} 
else 
{ 
$largeur = $largeur_orig; 
$hauteur = $hauteur_orig; 
} 
/*On crée la miniature*/ 
$src = imagecreatetruecolor($largeur,$hauteur); 
imagecopyresized($src,$type_img,0,0,0,0,$largeur,$hauteur,$largeur_orig,$hauteur_orig); 
 
/*On sauvegarde la miniature*/ 
imagejpeg($src, $repertoire_destination.$nom); 
 
/*On libere la memoire utilisée par cette image.*/ 
imagedestroy($src); 
 
/*On supprime éventuellement l'image originale*/ 
if ($supprimer_original === true) 
unlink($img); 
} 
else 
{ 
$message = 'Erreur : L\'extension de l\'image est '.$extension_img.' ! Elle devrait être JPG, JPEG, GIF ou PNG'; 
} 
} 
else 
{ 
$message = 'Erreur : Le fichier n\'est pas une image !'; 
} 
} 
else 
{ 
$message = 'Erreur : Le fichier n\'existe pas !'; 
} 
return $repertoire_destination.$nom; 
 
} 
/*$imagephp="./Images/ImagePeinture/image1.jpg";
echo "image=",$imagephp,"\n";
$var=make_miniature($imagephp);
echo "var=",$var;*/
 
?>
<img border="0" src="make_miniature.php?image=./Images/ImagePeinture/image1.jpg">
</body>
</html>
awalter1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h33   #4
Membre régulier
 
Guillaume M.
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Guillaume M.

Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 83
Points : 83
Le script que tu viens de copier ne fonctionne pas pour ce que tu veux faire. Il permet simplement de générer une miniature à partir d'une image existante et de l'enregistrer dans un répertoire ("./Images/ImagePeinture/" dans ton cas).

Il faudrait savoir quel est le but recherché, soit générer une miniature à la volée à chaque chargement de la page, soit générer une miniature une bonne fois pour toute et l'enregistrer sur le serveur.

Il est tout à fait possible de mettre une page PHP en source sur la balise image dans ton code HTML, il faut simplement que le PHP ait un retour correct (image/jpeg, image/png...)
gmarsay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h39   #5
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Bonjour,

Est-ce que la page qui te renvoie ton image déclare bien les entêtes en précisant que c'est une image pour que ce soit traité en tant que tel ?
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h01   #6
Membre confirmé
 
Avatar de awalter1
 
Inscription : août 2004
Messages : 665
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 665
Points : 232
Points : 232
je voulais faire une galerie de photos accessible à partir de leurs miniatures : le curseur passe sur la miniature et l'image réelle apparait en popup. Je suis conscient qu'il y a d'autres manières de faire, mais bon ce que je veux faire ne me semble pas inconsidéré :
En html je crée une image :????? est l'appel à ma fonction php avec le nom du fichier jpg en paramètre. La fonction php va créer la miniature coté serveur si elle n'existe pas déjà (c'est à faire) et renvoie le nom de la miniature.
Pour "humitake": la fonction php renvoie le nom de l'image miniature, c'est bien ce qui est attendu par la directive <img src=?????? >.
Merci
awalter1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h15   #7
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Citation:
Envoyé par awalter1
Pour "humitake": la fonction php renvoie le nom de l'image miniature, c'est bien ce qui est attendu par la directive <img src=?????? >.
Cela dépend du cas et j'ai un peu de mal à comprendre dans lequel tu te trouve.

Soit tu créer ta miniature à la volée, dans ce cas tu doit créer une page PHP qui génère ton image en miniature et est retournée en HTML avec les entêtes indiquant au navigateur qu'il s'agit d'une image. Avec cette solution tu place le nom de la page PHP en source.

Soit tu créer la miniature seulement si elle n'existe pas, tu as donc une solution de stockage derrière. C'est la solution que tu utilise il me semble.
Dans ce cas il te suffit de passer dans src le chemin de ton image et dans ce cas ce qui est attendu est effectivement le nom de l'image (avec son chemin si différent du dossier de la page).

Mais dans ce cas tu t'y prend mal ce que tu fait ici :
Code html :
<img border="0" src="make_miniature.php?image=monimage.jpg">
C'est indiqué que la source de l'image est "make_miniature.php?image=monimage.jpg" or ce n'est pas du tout ce que tu souhaite.

Il faut appeler la fonction dirrectement (en php) et utiliser alors le retour de cette dernière.
Code html :
<img border="0" src="<php echo make_miniature('monimage.jpg'); ?>">
humitake est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/02/2012, 19h47   #8
Membre confirmé
 
Avatar de awalter1
 
Inscription : août 2004
Messages : 665
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 665
Points : 232
Points : 232
Grand merci.
C'est en effet la solution
Code :
img border="0" src="<php echo make_miniature('monimage.jpg'); ?>">
qui est la bonne, en plus j'avais trouvé ce type d'invocation mais j'ai du me tromper dans les ' ou ".
awalter1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h07   #9
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 738
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 738
Points : 3 310
Points : 3 310
Salut

Citation:
... le curseur passe sur la miniature et l'image réelle apparait en popup ...
Le survole d'un élément HTML c'est une action venant de l'utilisateur, du navigateur plus exactement (le client).
Du coup, la solution vient forcément d'un langage coté client (html, css, javascript).

A ma connaissance, il existe que 2 manières de déclencher quelque chose au survole, soit en Css, soit en JS.

En faite, ce que tu recherche serait ni plus ni moins ce qu'on appel une fausse popup.
C'est à dire qu'on affiche une image en miniature par défaut, puis on place aussi une 2ème image plus grande dans une DIV cachée/masqué par défaut.
Au survole de la miniature, on rend visible cette DIV masqué.

Pour cela, en général on exploite du JS, évènement onmaouseover/onmouseout (au-dessus/en-dehors de l'élément à survoler) pour changer des propriétés Css (display : none ou block) de l'autre élément à afficher/masquer.


A coté de ça, si tu souhaite créer "à la volée" (en Php) la miniature, effectivement il te faut faire ce qui est évoqué plus haut.

Il me semble que cette technique est de moins en moins utilisée car (très) gourmande en ressource.
Il est préférable à mon sens de créer la miniature au moment où l'image est déposée sur le serveur lors d'un upload par exemple (cela en Php).
Cette opération ce fera qu'une seule fois (alors qu'une miniature créé à la volée se fera autant de fois qu'il y aura d'utilisateurs affichant celle-ci).


Apparemment, la fonction make_miniature() sert à créer la miniature si elle n'existe pas.
C'est un moindre mal il est vrai.
Citation:
Envoyé par humitake
<img border="0" src="<php echo make_miniature('monimage.jpg'); ?>">
A mon sens il n'est pas vraiment utile d'appeler cette fonction pile à cet endroit, c'est à dire dans le ...src="make_miniature()"...
Le déroulement du code Php (coté serveur) n'a rien avoir avec le déroulement du code Html.
On peu très bien appeler cette fonction avant la 1ère balise Html (doctype/html>), et c'est même mieux (meilleure séparation des traitements et de l'interface).
Suffit d’initialiser le nom de l'image.
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?php
$monimage_miniature = make_miniature('monimage.jpg');
?>
 
<html>
... etc ...
 
<img border="0" src="<php echo $monimage_miniature; ?>">
 
</html>
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h15   #10
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 738
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 738
Points : 3 310
Points : 3 310
Je remarque ceci dans la fonction :
Code :
$message = 'Erreur : Le fichier n\'existe pas !';
Ne faudrait il pas créer une image en miniature par défaut, et renvoyer sont nom lors d'une erreur ?
Car un contenu comme "Erreur : Le fichier n\'existe pas !" dans un attribut src="...", ce n'est pas correcte.

Ou alors il faudrait faire une alternative avant de créer la balise <img />.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 23h54   #11
Membre confirmé
 
Avatar de awalter1
 
Inscription : août 2004
Messages : 665
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 665
Points : 232
Points : 232
Je suis d'accord avec vos remarques, en effet les miniatures peuvent être créées avant de s'occuper de l'affichage et le code source que j'ai fourni n'est pas finalisé, c'est un ensemble de copier/coller à retester précisément.
Pour le rendu, voici ce que j'appelle popup : http://cssglobe.com/lab/tooltip/02/
Pour l'instant j'explore la faisabilité avant de me décider quoi faire, avec php, javascript, ajax, jquery ... c'est tout un monde que je ne connais pas (je suis plus à l'aise en C, python, X11/motif, gtk+, oracle, c'est pourquoi je dois me mettre à niveau)
Merci encore
awalter1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h19.


 
 
 
 
Partenaires

Hébergement Web