Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tableau a decouper

0 views
Skip to first unread message

Pascale

unread,
Sep 9, 2008, 5:18:37 PM9/9/08
to
Bonjour,

Je bute le problème suivant :

Je génère un zouli tableau comme suit :

$ordre=$_GET['ordre'];
// L'utilisateur a le choix de l'ordre d'affichage des fiches
if ($ordre=='')
{$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
datevalid DESC";}
elseif ($ordre=='nom')
{$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
nomplante ASC";}
elseif ($ordre=='numfiche')
{$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
numfiche ASC";}
$req = mysql_query($sel) or die('Erreur SQL !'.$sel.'<br>'.mysql_error());
echo '<table><tr><td><a href="affichage.php?ordre=numfiche">Photo</a></td>
<td><a href="affichage.php?ordre=nom">Intitul&eacute;</a></td>
<td><a href="affichage.php?ordre=">Date d\'identification</a></td>
</tr>';
while ($data=mysql_fetch_assoc($req))
{
$numfiche=$data['numfiche'];
$nom=$data['nom'];
$datevalid=$data['datevalid'];
$dateident=dateendroit($datevalid);
$photo='photos/'.$numfiche.'_1.jpg';
$image = exif_thumbnail($photo, $larg, $haut, $type);
echo'<tr><td><a href="voirfiche.php?numfiche='.$numfiche.'"
target="_blank">';
// Si la vignette existe on l'affiche, sinon on met le numéro de la fiche
if ($image)
{echo '<img
src="data:image/png;base64,'.base64_encode($image).'"
width="'.$larg.'" height="'.$haut.'" alt="mini" />';}
else
{
echo $numfiche;
}
echo '</a></td>
<td>'.stripslashes($nom).'</td>
<td>'.$dateident.'</td></tr>';
}
echo'</table>

Jusqu'à présent, ce tableau ne comportait aucune image, il était donc vite
chargé bien que le nombre d'enregistrements soit important (il y avait
juste l'inconvénient d'un ascenseur à rallonge, pas très élégant et peu
pratique).
Avec les vignettes, je ne peux plus continuer comme ça, il faut que je
fasse des pages moins longues, par exemple d'une vingtaine ou d'une
trentaine de fiches) et que les utilisateurs puissent « naviguer » d'une
page à l'autre (sans perdre l'ordre de tri qu'ils ont choisi.
Je pense qu'il faut utiliser l'option LIMIT dans Mysql pour récupérer les
enregistrements par « paquets » mais ça ne m'amène pas bien loin...

J'imagine que c'est un problème simple et classique, mais je m'y paume
quand même. Votre aide sera la bienvenue...

--
Pascale

Bruno Desthuilliers

unread,
Sep 10, 2008, 10:28:24 AM9/10/08
to
Pascale a écrit :
(snip)

> Je génère un zouli tableau comme suit :
>
> $ordre=$_GET['ordre'];
> // L'utilisateur a le choix de l'ordre d'affichage des fiches
> if ($ordre=='')
> {$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
> datevalid DESC";}
> elseif ($ordre=='nom')
> {$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
> nomplante ASC";}
> elseif ($ordre=='numfiche')
> {$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
> numfiche ASC";}

Apprends à utiliser un switch case, et à ne pas te répéter:

$ordre=$_GET['ordre'];
switch ($ordre) {
case 'nom':
$order_by = "nomplante ASC";
break;
case 'numfiche':
$order_by = "numfiche ASC";
break;
default:
$order_by = "datevalid DESC";
break;
}

$sel =
"SELECT numfiche, nom, datevalid " .
"FROM matable " .
"WHERE etat='3' " .
"ORDER BY $order_by"
;

Comme ça, si tu dois modifier quelque chose, c'est plus simple...

(snip)

> Jusqu'à présent, ce tableau ne comportait aucune image, il était donc vite
> chargé bien que le nombre d'enregistrements soit important

(snip code)

> Avec les vignettes, je ne peux plus continuer comme ça, il faut que je
> fasse des pages moins longues, par exemple d'une vingtaine ou d'une
> trentaine de fiches) et que les utilisateurs puissent « naviguer » d'une
> page à l'autre (sans perdre l'ordre de tri qu'ils ont choisi.
> Je pense qu'il faut utiliser l'option LIMIT

conjointement à OFFSET...

> dans Mysql pour récupérer les
> enregistrements par « paquets » mais ça ne m'amène pas bien loin...
>
> J'imagine que c'est un problème simple et classique,

Oui, ça s'appelle une pagination.

> mais je m'y paume
> quand même. Votre aide sera la bienvenue...

Il faut utiliser limit et offset, et passer les valeurs concernées dans
les urls pour les récupérer à la requête (http) suivante. Bref, tes urls
doivent ressembler à:

affichage.php?ordre=numfiche&debut=XXX&combien=YYY

Après quoi tu utilises les valeurs $_GET['debut'] et $_GET['combien']
(après nettoyage of course pour éviter des injections SQL etc) pour les
valeurs LIMIT et OFFSET de ta requête SQL. Ou si tu choisis un
pagination 'fixe', tu codes le 'combien' (l'OFFSET) en dur (de
préférence comme constante symbolique) et tu ne passe que le 'debut' (le
LIMIT) dans les urls que tu mets avant et/ou après ton tableau et qui
permettent de naviguer dans la pagination...

HTH

Pascale

unread,
Sep 10, 2008, 10:34:19 AM9/10/08
to
Je me réponds à moi-même que j'ai trouvé, il me reste quand même à mettre
en bas de page un accès aux pages autres que celle qui est affichée, ça n'a
pas l'air si simple : j'ai plus de 60 pages, je ne peux pas aligner autant
de chiffres, il faut que j'en affiche par exemple 10 avec « pages
précédentes » et « pages suivantes » pour accéder aux autres.

--
Pascale

Emmanuel

unread,
Sep 10, 2008, 10:34:19 AM9/10/08
to
Pascale a écrit :

> Avec les vignettes, je ne peux plus continuer comme ça, il faut que je
> fasse des pages moins longues, par exemple d'une vingtaine ou d'une
> trentaine de fiches) et que les utilisateurs puissent « naviguer » d'une
> page à l'autre (sans perdre l'ordre de tri qu'ils ont choisi.
> Je pense qu'il faut utiliser l'option LIMIT dans Mysql pour récupérer les
> enregistrements par « paquets » mais ça ne m'amène pas bien loin...
>

Il est effectivement possible d'utiliser l'option limit pour restreindre
l'affichage des parties de ton tableau. Note, néanmoins que limit peut
être très gourmand et peu optimal dans le cas d'un grand nombre
d'enregistrements.

Voir par exemple les tests fait par Damien Seguy:
http://www.nexen.net/articles/dossier/17611-mon_join_est_plus_rapide_que_ton_limit.php

Dans le cas que tu proposes, il pourrait être intéressant d'ajouter à
tes requêtes le limit a,b qui prend 2 valeurs. La première indique à
partir de quel enregistrement va commencer la récupération des données,
et la seconde le nombre d'enregistrements retournés.

Soit dans ton cas:

SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY

datevalid DESC limit $deb, $nb_fiches_par_page

Le $nb_fiches_par_page ne pose pas de problème il suffit de
l'initialiser à la valeur de son choix en début de code.

Le $deb peut quand à lui etre associé à la page sur laquelle on est (en
admettant que le tableau se découpe en pages $page). Pour simplifier, on
peut aussi considérer que la première page vue est la page 0 (affichant
les $nb_fiches_par_page fiches), le suivante la 1 etc.

On aura: $deb=$page*$nb_fiches_par_page

Et bien il ne reste qu'à faire passer les numéros de page dans les liens
des boutons suivant et/ou précédent.

Par exemple:


<a href="affichage.php?ordre=$ordre&page=$prec">Précédent</a>
<a href="affichage.php?ordre=$ordre&page=$suiv">Suivant</a>


La valeur de l'ordre est conservé et transmise. Reste à déterminer
$prec, et $suiv

Si la page courante est appelée sans que $_GET['page'] existe (ou vaut
0), alors on est sur la première page (la 0) et donc il ne faut pas
afficher le lien précédent. $suiv vaut alors 1.

Si $_GET['page'] a été transmis alors $prec correspondra à
$_GET['page']-1 et $suiv à $_GET['page']+1

Il faudra tester aussi dans quel cas on n'affichage pas de bouton
Suivant (quand il n'y a plus de page après celle sur laquelle on est).

La formule (il y a peut être plus simple):

$page_max=ceil($nb_fiche/$nb_par_page)-1; devrait indiquer le nombre
maximales de pages dès lors qu'on connait le nombre de fiches (en
faisant un mysql_num_rows() par exemple.

En rassemblant ça, je pense que tu pourras faire un code qui te permette
d'afficher le tableau page par page.

--
Emmanuel

CrazyCat

unread,
Sep 10, 2008, 10:34:19 AM9/10/08
to
Pascale wrote:
> {$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY
> nomplante ASC";}

Il te suffit de choisir un nombre d'items par page et de pouvoir
récupérer la page en cours:
<?
$items = 10;
(intval($_GET['page'])<1) ? $page = 1 : $page = intval($_GET['page']);


$sel="SELECT numfiche,nom,datevalid from matable WHERE etat='3' ORDER BY

nomplante ASC LIMIT ".($page - 1).", ".$items;
?>

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr

Pascale

unread,
Sep 11, 2008, 11:44:14 AM9/11/08
to
Merci à tous les trois, et, désolée, j'ai réellement cru que j'avais besoin
d'aide, mais finalement, j'étais arrivée à quelque chosede très similaire à
ce vous me conseillez.
Bruno a raison, je ne pense pas toujours à utiliser switch case, en fait,
je connais, mais je pense rarement à l'utiliser et c'est un tort. Par contre,
OFFSET m'est inconnu, faut que je me documente là-dessus.

Le résultat :
http://www.la-grille-verte.net/kekcestruc/kekvoirid.php

Ça casse pas 3 pattes à un canard, mais a priori ça convient.

... ce qui m'amène à une autre question : j'utilise les vignettes incluses
dans les exifs des photos ce qui est extrêmement pratique, mais elles sont
quelquefois manquantes (vieux appareils photo, plantes scannées
directement, logiciel de retouche d'image destructeurs...).
Si je veux générer et stocker une vignette à partir d'une photo uploadée
par un utilisateur, quelle est la manière la plus simple et efficace,
sachant que je veux que la solution retenue ne se casse pas la figure si je
change d'hébergeur ?

--
Pascale

Olivier Miakinen

unread,
Sep 11, 2008, 12:52:52 PM9/11/08
to
Le 11/09/2008 17:44, Pascale a écrit :
>
> ... ce qui m'amène à une autre question : j'utilise les vignettes incluses
> dans les exifs des photos ce qui est extrêmement pratique, mais elles sont
> quelquefois manquantes (vieux appareils photo, plantes scannées
> directement, logiciel de retouche d'image destructeurs...).
> Si je veux générer et stocker une vignette à partir d'une photo uploadée
> par un utilisateur, quelle est la manière la plus simple et efficace,
> sachant que je veux que la solution retenue ne se casse pas la figure si je
> change d'hébergeur ?

Je pense que GD doit se trouver dans PHP chez à peu près tous les
hébergeurs :

http://fr.php.net/gd
http://fr.php.net/manual/fr/function.imagecopyresampled.php

Mais j'ai entendu dire que ImageMagick donnait de meilleurs résultats.
Vérifier son support chez les différents hébergeurs :

http://fr.php.net/manual/fr/book.imagick.php

Pascale

unread,
Sep 11, 2008, 6:21:47 PM9/11/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48c93f1c$1...@neottia.net:

> http://fr.php.net/gd
> http://fr.php.net/manual/fr/function.imagecopyresampled.php
>
> Mais j'ai entendu dire que ImageMagick donnait de meilleurs résultats.
> Vérifier son support chez les différents hébergeurs :
>
> http://fr.php.net/manual/fr/book.imagick.php

Question bête : est-ce que ces fonctions créent une vignette de manière
dynamique au moment de l'exécution du code, ou bien est-ce que la vignette
est créée et stockée dans le même répertoire que la photo?

Dans le cas qui m'intéresse, la qualité n'est pas primordiale, même si je
ne tiens évidemment pas à générer des vignettes toutes pourries (:

--
Pascale

Olivier Miakinen

unread,
Sep 11, 2008, 7:02:48 PM9/11/08
to
Le 12/09/2008 00:21, Pascale a écrit :
>
> Question bête : est-ce que ces fonctions créent une vignette de manière
> dynamique au moment de l'exécution du code, ou bien est-ce que la vignette
> est créée et stockée dans le même répertoire que la photo?

Comme tu veux tu choises !

Si la vignette est censée être vue un certain nombre de fois, et étant
donné qu'elle ne prendra pas beaucoup de place sur le disque, je te
conseillerais bien de la créer et la stocker (par exemple dans le même
répertoire, mais pas forcément).

Par exemple, si c'est une image JPEG qui se trouve en "$chemin/$nom", tu
peux la sauver par : imagejpeg($image, "$chemin/vignettes/$nom").

Mais tu peux aussi faire un script qui te convertit l'image à la volée,
ce script commençant par header("image/jpeg") et se terminant par
imagejpeg($image).

> Dans le cas qui m'intéresse, la qualité n'est pas primordiale, même si je
> ne tiens évidemment pas à générer des vignettes toutes pourries (:

Oui, bien sûr. Je n'ai pas fait l'essai alors je ne peux pas te dire ce
que ça donnera, mais si j'en crois la doc ça devrait être de meilleure
qualité avec imagecopyresampled qu'avec imagecopyresized. Attention à
bien travailler tes images en « truecolor » plutôt qu'en « palette ».

Olivier Miakinen

unread,
Sep 11, 2008, 7:10:21 PM9/11/08
to
Le 12/09/2008 01:02, je répondais à Pascale :
>
> [...] ce script commençant par header("image/jpeg") [...]

Ça ne risque pas de fonctionner. Nul doute que remplacer "image/jpeg"
par "Content-Type: image/jpeg" serait préférable.

Pascale

unread,
Sep 12, 2008, 5:02:25 PM9/12/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48c99d52$1...@neottia.net:

> Oui, bien sûr. Je n'ai pas fait l'essai alors je ne peux pas te dire ce
> que ça donnera, mais si j'en crois la doc ça devrait être de meilleure
> qualité avec imagecopyresampled qu'avec imagecopyresized.

Il va falloir que je teste, mais un truc m'inquiète un peu, c'est que
« mes » utilisateurs envoient des photos de taille souvent très
différentes, il va falloir que je calcule les proportions des vignettes qui
en découlent en fonction des photos d'origine (il est hors de question de
réduire par exemple toutes les photos à 10% de leur taille originale), je
sens que ça va nécessiter pas mal d'essais...

--
Pascale

Pascale

unread,
Sep 12, 2008, 5:02:25 PM9/12/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48c9a4c8$1...@neottia.net:

>> [...] ce script commençant par header("image/jpeg") [...]
>
> Ça ne risque pas de fonctionner. Nul doute que remplacer "image/jpeg"
> par "Content-Type: image/jpeg" serait préférable.

Merci.

Pour répondre à ton message précédent, je pense qu'il serait plus simple
pour moi de sauvegarder les vignettes une fois pour toutes. J'imagine aussi
que le temps de chargement de la page serait plus court que si les
vignettes sont générées « à la volée » ?

--
Pascale

Olivier Miakinen

unread,
Sep 12, 2008, 5:44:11 PM9/12/08
to
Le 12/09/2008 23:02, Pascale a écrit :
>
> Il va falloir que je teste, mais un truc m'inquiète un peu, c'est que
> « mes » utilisateurs envoient des photos de taille souvent très
> différentes, il va falloir que je calcule les proportions des vignettes qui
> en découlent en fonction des photos d'origine (il est hors de question de
> réduire par exemple toutes les photos à 10% de leur taille originale), je
> sens que ça va nécessiter pas mal d'essais...

Facile !

Voici un bout de code avec les explications mathématiques en prime.

<?php
$l_ori = largeur de l'image d'origine
$h_ori = hauteur de l'image d'origine

/*
* $l_max et $h_max sont la largeur max et la hauteur max admissibles.
* Tu peux prendre la même valeur pour les deux, ou pas.
*/
$l_max = 60;
$h_max = 60;

/*
* $div est la valeur minimum par quoi tu dois diviser les dimensions
* d'origine pour que les nouvelles dimensions soient inférieures aux
* max que tu as définis.
*/
$div = max($l_ori/$l_max, $h_ori/$h_max);

if ($div <= 1) {
/*
* L'image d'origine est déjà suffisamment petite pour être sa
* propre vignette :
* $l_ori/$l_max <= $div <= 1 donc $l_ori <= $l_max
* $h_ori/$h_max <= $div <= 1 donc $h_ori <= $h_max
*/
... copier l'image d'origine en une vignette identique ...
} else {
$l_vign = floor($l_ori/$div);
$h_vign = floor($h_ori/$div);
/*
* $div >= $l_ori/$l_max
* donc 1/$div <= $l_max/$l_ori
* donc $l_ori/$div <= $l_max
* donc $l_vign <= $l_max
*
* Idem pour $h_vign <= $h_max
*/
... réduire l'image de ($l_ori,$h_ori) en ($l_vign,$h_vign) ...
}
?>

Et en ce qui concerne le fait de créer les vignettes une fois pour
toute, oui ça me semble mieux que de les générer à la volée.

Olivier Miakinen

unread,
Sep 12, 2008, 5:51:16 PM9/12/08
to
Le 12/09/2008 23:44, je répondais à Pascale :
>
> Voici un bout de code [...]

Au fait, l'exemple #2 de http://fr.php.net/imagecopyresampled fait
grosso modo la même chose, la différence essentielle étant que leur
code génère une vignette plus grande que l'image d'origine dans le
cas où celle-ci serait plus petite que les dimensions que tu auras
choisies.

Pascale

unread,
Sep 13, 2008, 5:11:35 AM9/13/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48cae1c0$1...@neottia.net:

> Facile !
>
> Voici un bout de code avec les explications mathématiques en prime.[...]

Merci ! (-:

En attendant de gérer des vraies vignettes, j'avais trouvé une solution
imparfaite (quand les exifs sont absentes ou incomplètes) mais qui
convenait très bien :

$image = exif_thumbnail($photo, $larg, $haut, $type);
echo'<tr><td><a href="voirfiche.php?numfiche='.$numfiche.'"
target="_blank">';

if ($image)
{echo '<img src="data:image/png;base64,'.base64_encode($image).'"
width="'.$larg.'" height="'.$haut.'" alt="mini" />';}
else
{
echo $numfiche;
}

Mais je viens de découvrir que cette saloperie d'IE7, non seulement tronque
les URL qu'il trouve trop longues, mais ne supporte pas data: URL alors que
même le vieil Icab sait le faire !
C'est PÉNIBLE !

--
Pascale

Pascale

unread,
Sep 14, 2008, 3:47:24 PM9/14/08
to
Ton code pour dimensionner les vignettes, avec les explications, était
limpide, et, pour la suite, je pensais m'en tirer convenablement.

$vign = imagecreatetruecolor($l_vign, $h_vign);
$image = imagecreatefromjpeg($photo);
imagecopyresampled($vign, $image, 0, 0, 0, 0, $l_vign, $h_vign, $l_ori,
$h_ori);
// Affichage
imagejpeg($vign, null, 100);

Cela me donne une infāme bouillie de code.

C'est moi, ou bien ?

--
Pascale

Olivier Miakinen

unread,
Sep 14, 2008, 4:16:12 PM9/14/08
to
Le 14/09/2008 21:47, Pascale a écrit :
> Ton code pour dimensionner les vignettes, avec les explications, était
> limpide, et, pour la suite, je pensais m'en tirer convenablement.
>
> $vign = imagecreatetruecolor($l_vign, $h_vign);
> $image = imagecreatefromjpeg($photo);
> imagecopyresampled($vign, $image, 0, 0, 0, 0, $l_vign, $h_vign, $l_ori,
> $h_ori);
> // Affichage
> imagejpeg($vign, null, 100);
^^^^
>
> Cela me donne une infâme bouillie de code.

>
> C'est moi, ou bien ?

Il semblerait que tu envoies le fichier binaire codant l'image dans une
réponse censée être en text/html... non ?

1re solution (la meilleure, vraisemblablement) :
imagejpeg($vign, "vignettes/$photo", 100);

2e solution :
header("Content-Type: image/jpeg");
...
...
imagejpeg($vign, null, 100);

Pascale

unread,
Sep 14, 2008, 6:26:42 PM9/14/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48cd6bab$1...@neottia.net:

> Il semblerait que tu envoies le fichier binaire codant l'image dans une
> réponse censée être en text/html... non ?
>
> 1re solution (la meilleure, vraisemblablement) :
> imagejpeg($vign, "vignettes/$photo", 100);

T'en poses, de ces questions, toi (-:

Donc, je pensais être capable au moins de recopier, mais visiblement, c'est
moi qui suis un peu binaire (la photo existe, je l'affiche ainsi que ses
dimensions originales et réduites, et le répertoire vignettes a été créé) :

$vign = imagecreatetruecolor($l_vign, $h_vign);
$image = imagecreatefromjpeg($photo);
imagecopyresampled($vign, $image, 0, 0, 0, 0, $l_vign, $h_vign, $l_ori,
$h_ori);

imagejpeg($vign, 'vignettes/$photo', 100);

Et ben c'est un peu comme dans Space Quest 6 : « il ne se passe rien ».
Ça devait pas créer et stocker une vignette ? Parce que c'est ça que je
voudrais depuis le début (: (tout ça à cause de ce fichu IE...)

--
Pascale

Olivier Miakinen

unread,
Sep 14, 2008, 6:46:27 PM9/14/08
to
Le 15/09/2008 00:26, Pascale a écrit :
>
> T'en poses, de ces questions, toi (-:

Non seulement ça, mais je vais continuer (-;

> Donc, je pensais être capable au moins de recopier, mais visiblement, c'est
> moi qui suis un peu binaire (la photo existe, je l'affiche ainsi que ses
> dimensions originales et réduites, et le répertoire vignettes a été créé) :
>
> $vign = imagecreatetruecolor($l_vign, $h_vign);

Ok.

> $image = imagecreatefromjpeg($photo);

Que vaut $photo ? Où se trouve physiquement cette photo sur ton disque
(surtout par rapport à l'emplacement du script) ?

> imagecopyresampled($vign, $image, 0, 0, 0, 0, $l_vign, $h_vign, $l_ori,
> $h_ori);

Ok.

> imagejpeg($vign, 'vignettes/$photo', 100);

Attention, avec les guillemets simples tu crées un fichier de nom
'$photo' sous le répertoire 'vignettes', et pas un fichier dont le
nom est contenu dans la variable $photo.

Où se trouve physiquement le répertoire 'vignettes' sur ton disque ?
Est-ce que l'utilisateur propriétaire du script y a accès en lecture,
écriture et exécution ?

Pascale

unread,
Sep 14, 2008, 7:08:29 PM9/14/08
to
Pascale <chaton.t...@alussinan.org> écrivait
news:XnF9B19F41E2...@alussinan.org:

> imagejpeg($vign, 'vignettes/$photo', 100);

Je voulais dire :

imagejpeg($vign,"vignettes/$photo", 100);

mais pas mieux. Vais me coucher...

--
Pascale

Pascale

unread,
Sep 15, 2008, 2:23:56 AM9/15/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48cd93af$1...@neottia.net:

> Non seulement ça, mais je vais continuer (-;

Merci d'être là, tu es la bouée de sauvetage pour les nul(le)s de mon
espèce ! (-:

> Que vaut $photo ? Où se trouve physiquement cette photo sur ton disque
> (surtout par rapport à l'emplacement du script) ?

$photo est une image distante, située dans un sous-répertoire (par rapport
à celui où est le programme que j'exécute), nommé... photos.
Je l'affiche, elle est là, pas de problème.



> Attention, avec les guillemets simples tu crées un fichier de nom
> '$photo' sous le répertoire 'vignettes', et pas un fichier dont le
> nom est contenu dans la variable $photo.

Oui, oui, l'heure tardive, sans doute, mais c'est corrigé.

> Où se trouve physiquement le répertoire 'vignettes' sur ton disque ?
> Est-ce que l'utilisateur propriétaire du script y a accès en lecture,
> écriture et exécution ?

vignettes est un sous-répertoire au même niveau hiérarchique que photos.
J'ai vérifié qu'il n'y a pas d'erreur orthographique (un s, pas de majuscule...).
Les permissions sont à 777.

Donc j'ai ça :

<?
include "fonc.php";
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
// j'abrège (-:
</head>
<body>';
// Je choisis un exemple de fiche
$numfiche='1964';
$photo='photos/'.$numfiche.'_1.jpg';
// La photo d'origine est affichée
echo '<img src="'.$photo.'"><br>';
$dimvign=dimvignette($photo);
$l_vign=$dimvign[0] ;
$h_vign=$dimvign[1] ;
$l_ori=$dimvign[2];
$h_ori=$dimvign[3];
// J'affiche les dimensions d'origine et de la vignette : ça roule
echo 'largeur d\'origine '.$l_ori. ' <br>';
echo 'hauteur d\'origine '. $h_ori. ' <br>';
echo 'largeur de la vignette '. $l_vign. ' <br>';
echo 'hauteur de la vignette '. $h_vign. ' <br>';
$vign = imagecreatetruecolor($l_vign, $h_vign);
// Affiche Resource id #5
echo $vign.'<br>';
$image = imagecreatefromjpeg($photo);
// Affiche Resource id #7
echo $image.'<br>';
imagecopyresampled($vign,$image, 0, 0, 0, 0, $l_vign, $h_vign, $l_ori,
$h_ori);
// Jusque là, il semble qu'on n'ait rien perdu en route
imagejpeg($vign,"vignettes/$photo", 100);
echo '<img src="vignettes/'.$photo.'">
// Là, ça se gâte : pas d'affichage et rien dans le répertoire vignettes...
</body>
</html>';
?>
--
Pascale

Olivier Miakinen

unread,
Sep 15, 2008, 2:41:24 AM9/15/08
to
Le 15/09/2008 08:23, Pascale a écrit :
>
>> Où se trouve physiquement le répertoire 'vignettes' sur ton disque ?
>> Est-ce que l'utilisateur propriétaire du script y a accès en lecture,
>> écriture et exécution ?
>
> vignettes est un sous-répertoire au même niveau hiérarchique que photos.
> [...]

> $numfiche='1964';
> $photo='photos/'.$numfiche.'_1.jpg';

Ok. $photo vaut donc 'photos/1964_1.jpg'.

> [...]


> // Jusque là, il semble qu'on n'ait rien perdu en route
> imagejpeg($vign,"vignettes/$photo", 100);

Et là tu cherches à créer 'vignettes/photos/1964_1.jpg'. Ce n'est donc
pas seulement le répertoire 'vignettes' que tu dois créer, mais aussi le
sous-répertoire 'vignettes/photos'.

Ou bien tu fais :
$nomvignette = substr_replace($photo, 'vignettes', 0, 6);
imagejpeg($vign, $nomvignette, 100);

> echo '<img src="vignettes/'.$photo.'">

Je rappelle à tout hasard que les guillemets simples sont autorisés
autour des valeurs en HTML comme en XHTML. Tu pouvais donc écrire plus
simplement :
echo "<img src='vignettes/$photo'>";
(je trouve ça plus lisible).

Olivier Miakinen

unread,
Sep 15, 2008, 2:50:58 AM9/15/08
to
Le 15/09/2008 08:41, je répondais à Pascale :

>>
>> [...]
>> $numfiche='1964';
>> $photo='photos/'.$numfiche.'_1.jpg';
>
> [...]

>
> Ou bien tu fais :
> $nomvignette = substr_replace($photo, 'vignettes', 0, 6);

Ou plus simplement :
$nomvignette = "vignettes/${numfiche}_1.jpg";

> imagejpeg($vign, $nomvignette, 100);

Pascale

unread,
Sep 15, 2008, 12:15:01 PM9/15/08
to
Olivier Miakinen <om+...@miakinen.net> écrivait
news:48ce02e9$1...@neottia.net:

> Ok. $photo vaut donc 'photos/1964_1.jpg'.

Oui.

>> // Jusque là, il semble qu'on n'ait rien perdu en route
>> imagejpeg($vign,"vignettes/$photo", 100);
>
> Et là tu cherches à créer 'vignettes/photos/1964_1.jpg'. Ce n'est donc
> pas seulement le répertoire 'vignettes' que tu dois créer, mais aussi le
> sous-répertoire 'vignettes/photos'.

Rhââââ... c'est pas la peine de faire l'élection de la reine des buses sur
ce forum, j'ai gagné d'avance !

> Ou bien tu fais :
> $nomvignette = substr_replace($photo, 'vignettes', 0, 6);
> imagejpeg($vign, $nomvignette, 100);

> Ou plus simplement :
> $nomvignette = "vignettes/${numfiche}_1.jpg";

Tiens, je ne connais pas cette façon d'écrire une variable avec des
accolades. J'en ai, des trucs à apprendre (:



> Je rappelle à tout hasard que les guillemets simples sont autorisés
> autour des valeurs en HTML comme en XHTML. Tu pouvais donc écrire plus
> simplement :
> echo "<img src='vignettes/$photo'>";
> (je trouve ça plus lisible).

Ouaip, mais j'ai pris l'habitude (bonne ou mauvaise) de mettre un '
derrière chaque echo... déjà qu'il m'arrive de me planter même quand je
respecte mes habitudes...

Je me répète, mais merci pour ton aide et ta patience ! Maintenant, ÇA
MARCHE !

--
Pascale

Olivier Miakinen

unread,
Sep 15, 2008, 12:28:33 PM9/15/08
to
Le 15/09/2008 18:15, Pascale a écrit :
>
> Rhââââ... c'est pas la peine de faire l'élection de la reine des buses sur
> ce forum, j'ai gagné d'avance !

(-;

> ÇA MARCHE !

C'est l'essentiel.

0 new messages