Champ <input type="file"> sans upload

Eléphant du PHP | 90 Messages

05 janv. 2007, 05:47

Bonjour à toutes et à tous,

J'ai développé une application qui permet de stoquer dans une table des informations (jusque là rien d'original ;o) et une image associée.

Dans la table je stoque uniquement le nom de l'image car toutes mes images sont stoquées sur le serveur, dans un répertoire donné.

Pour la saisie, je propose un formulaire classique avec un champ <input type="file"> pour le choix de l'image. L'idée étant que l'utilisateur puisse faire un aperçu en miniature afin de minimiser les erreurs au moment du choix de l'image. Tout est bien stoqué dans ma table.

Le pb c'est en cas de modification de l'enregistrement...

Je récupère bien toutes les infos de l'enregistrement à modifier et je les replace dans le formulaire dans les champs correspondants SAUF le contenu du champ <input type="file"> ;-(

J'ai lu sur ce forum qu'il n'était pas possible de mettre une info par défaut dans ce type de champ...

1ere question => y aurait pô une ruse pour y arriver quand même sachant que je n'ai pas de upload à faire ?

Sinon, j'ai pensé, puique toutes mes images sont dans un répertoire, de proposer une liste déroulante avec le contenu du répertoire => moins fun pour la saisie, mais bon si ya pas le choix... En revanche, je propose une page "liste des enregistrements saisis" et là, je construits une liste et pour que l'utilisateur puisse vérifier sa saisie, je souhaite proposer pour chaque enregistrement :

- soit une miniature de l'image avec un lien vers l'image complète :

Code : Tout sélectionner

<a href="../fichier/image1.gif" target="_blank"><img src="../fichier/image1.gif" width="20" height="25" border="0"></a>
mais là, ma miniature ne s'affiche pas ;-( elle ne s'affiche que si le lien et l'image pointent sur 2 répertoires différents ;-(

2eme question => Quelqu'un a une idée de ce qui se passe ? je ne comprends pas pourquoi ça ne fonctionne pas...

- soit mettre l'image dans un textearea et n'afficher le textearea que sur 3 lignes par exemple... mais là, chais pas comment faire pour mettre l'image dans le textearea ;-(

3eme question => Peut-on mettre une image dans un textearea ? Et avant tout est-ce une bonne idée ?

J'ai cherché toute la nuit, mais là je calle...

J'espère avoir été claire...

Merci de l'attention que vous m'avez accordée et à bientôt pour d'éventuelles suggestions.
[/b]

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 janv. 2007, 10:45

Un peu dans le désordre :
- Non on ne peut pas (même en bidouillant) donner une valeur par défaut aux champs de type file (et dans ton cas, ça obligerait de nouveau l'upload du fichier - en esperant qu'il soit toujours présent et au même endroit sur le disque de l'utilisateur - lorsque le bonhomme valide le formulaire pour modifier un autre champ)
- Non, on ne peut pas mettre d'image dans un textarea (littérallement : "Zone de Texte" ;))

La meilleure solution à mon sens est effectivement de proposer une miniature lorsque le champ est renseigné en base, et laisser l'input de type file vide pour permettre de changer l'image en l'écrasant (s'il n'est pas renseigné, l'image n'est pas modifiée).
Eventuellement tu peux ajouter une case à cocher pour permettre de la supprimer.

Tu dois donc avoir un soucis au niveau de ton code ou de tes chemins, car il n'y a aucune raison pour que ta combinaison lien / image ne fonctionne pas... peut être une guillemet en moins ou en trop ? une valeur que tu lis pour le lien et qui n'est plus présente pour l'image

Montre nous le bout de code qui affiche ton lien et ta miniature :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 90 Messages

05 janv. 2007, 15:19

bonjour,

apparemment je n'ai pas le choix, il FAUT que la miniature s'affiche...

voici le code car même sans mon php, avec du pur html, c'est pareil...

Code : Tout sélectionner

<a href="../image/loupe.gif" target="_blank"><img src="../image/loupe.gif" width="20" height="25" border="0"></a>
rien ne s'affiche, même pas un carré vide...

merci et @ +

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 janv. 2007, 15:46

Ton code html apparait bien dans le source de la page générée ?

Ca ne changera peut être rien, mais tu peux toujours essayer d'ajouter un / à la fin de ta balise image pour indiquer qu'elle est fermée immédiatement :
<img src="../image/loupe.gif" width="20" height="25" border="0" />
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 90 Messages

05 janv. 2007, 20:44

tu sais quoi ? ça a l'air de fonctionner, enfin presque ;o)

en tout cas avec du html classique, je n'ai pas bcp approfondi les tests, mais ça a l'air de bien se comporter => Super ! c'est un bon début...

et puis c'est rassurant quelque part : MERCI !

en revanche, lorsque je passe en php, j'ai un pb... l'image ne s'affiche pas, mais je ne retrouve pas non plus dans le code source de la page les balises <img src="...

voici mon code :

while ( $row = mysqli_fetch_assoc($result) )
{
	echo '<tr> ';
	echo '<td >'.$row["date_fr"].'<br>';
	echo ($row["veille"] == "c") ? "Concurrent" : "Unilever";
	echo '</td> ';
	echo '<td class="bordroite">'.$row["nom"].' '.$row["prenom"].'</td> ';
	echo '<td>'.$row["id_enseigne"].'<br>'.$row["doc"].'</td> ';
	echo '<td >';
	if ( strlen($row["doc"]) > 1) // c'est là que ça merdouillou ;-((
		{
		echo '<a href="../fichier/'.$row["doc"].'" target="_blank" >';
		echo '<img src="../fichier/'.$row["doc"].'" width="21" height="29" border="0" />';
echo '</a>';
		}
	else echo '&nbsp;';
	echo '</td> ';
	echo '<td>'.$row["cp"].'<br>'.$row["ville"].'</td> ';
	echo '<td>';	
// en revanche là ça passe impec...			
	echo '<a href="poster.php?action=supprimer&num_fiche='.$row['id_fiche'].'&doc_existe='.$row['doc'].'; " onClick="return (confirm(\'Etes-vous sûr de vouloir Supprimeer cette entrée?\'));">';
	echo '<img src="../image/b_empty.png" width="16" height="16" hspace="5"></a>';
	echo '<a href="poster.php?action=modifier&num_fiche='.$row['id_fiche'].'; ">';
	echo '<img src="../image/b_edit.png" width="16" height="16" hspace="5"></a></td>';
	echo '</tr>';

voili voilu...

tu vois autre chose ?

MERCI et @+

Eléphant du PHP | 90 Messages

06 janv. 2007, 00:17

Autre test en html :

Celui-ci s'affiche :

Code : Tout sélectionner

<td valign="middle"> <a href="../fichier/59_big01.jpg" target="_blank"><img src="../image/loupe.gif" width="20" height="25" border="0" /></a> </td>
Celui-là non alors que c'est la cellule suivante dans le même tableau :

Code : Tout sélectionner

<td valign="middle"> <a href="../fichier/59_big01.jpg" target="_blank"><img src="../fichier/59_big01.jpg" width="20" height="25" border="1" /></a> </td>
J'en ai profité pour vérifier que mon lien était ok et que mon image existait bien... d'ailleurs, dans dreamweaver en conception, je vois bien les 2 images...

ça vous aide ou pas ?

merci et @bientôt...

Mammouth du PHP | 19672 Messages

06 janv. 2007, 00:20

Dans le premier tu as ceci :
<img src="../image/loupe.gif
Alors que dans le second tu as :
<img src="../fichier/59_big01.jpg

Est-ce que ça serait une piste ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 90 Messages

06 janv. 2007, 03:29

je ne vois pas ce que ça change alors que les 2 images existent...

ce que je vois (avec mes petits yeux un peu fermés ;o) c'est que dans les 2 cas j'ai le même lien :

Code : Tout sélectionner

<a href="../fichier/59_big01.jpg" target="_blank"></a>
je verifie avec ce lien que mon image "../fichier/59_big01.jpg" existe bien même si elle ne s'affiche pas...

ce qui se passe c'est que lorsque je mets ce lien sur une image, lorsque cette image est dans le même répertoire que le lien, mon image ne s'affiche pas, je n'ai donc pas accès au lien. En revanche, lorsque cette image est dans un autre répertoire, par exemple ../image/ mon image s'affiche bien et j'ai donc accès à mon lien...

j'ai essayé avec 2 répertoires qui se trouvent au même niveau d'arborescence, des fois que...

malgrès tout, je ne pense pas que html soit intelligent, ni les programmes d'ailleurs ;o) et je ne pense pas qu'il puisse dire : "comme tu as donné 2 fois le même chemin et bien non, je ne veux pas afficher, na !"...

mais je ne vois pas d'où ça peut venir alors que j'ai la même syntaxe...

si toi tu fais la même chose, tu visualises ton image ?

Eléphant du PHP | 90 Messages

06 janv. 2007, 03:34

et celle qui ne s'affiche pas à l'exécution est tout de même visible sous dream... elle existe donc bien...

y aurait-il 1 pb de parametrage de qq chose ? un pb de cotes / double côtes ?

ça dépasse mon entendement ;-(

merci...

Eléphant du PHP | 90 Messages

06 janv. 2007, 04:33

je ne sais pas si ça peut donner des idée, mais dans ma page html généré par du php, si j'affiche le source j'ai ça :

Code : Tout sélectionner

<a href="../fichier/59_big01.jpg" target="_blank" > </a>
avec un grand espace blanc à la place de ce qui aurait du être :

Code : Tout sélectionner

<img src="../fichier/59_big01.jpg" width="20" height="25" border="0" />
ça inspire quelqu'un ?

merci

Eléphant du PHP | 90 Messages

06 janv. 2007, 05:52

ça avance...

effectivement, ce n'est pas lié à l'emplacement...

si j'écris dans ma page :
$im = "59_big01.jpg";
echo '<a href="../fichier/'.$im.'" target="_blank" > <img src="../fichier/';
echo $im;
echo '" border="0"  width="30" height="22"/></a><br /> ';
ça se passe comme je veux => génial !

Sauf que bien sûr ce n'est pas tout à fait ça que je veux ;-(

ce que je veux c'est ça parce que je suis dans une boucle :
echo '<a href="../fichier/'.$row["doc"].'" target="_blank" > <img src="../fichier/';
echo $row["doc"];
echo '" border="0"  width="30" height="22"/></a><br /> ';
Et là, l'image ne s'affiche plus ;-( !!!

J'ai essayé pour coller au max aux lignes qui sont ok de passer par une variable :

Code : Tout sélectionner

$im = trim($row["doc"]);
Mais ça ne passe pas nom plus...

Peut-être que ça vient du nom récupéré dans $row["doc"] ? est-ce que ça peut poser un pb si le nom commence par un chiffre par exemple ? peut-on forcer le format à string ? c'est ce que j'ai essayé de faire en utilisant trim() mais sans succès ;-((

Je ne sais plus quoi essayer ;-(

Si quelqu'un a une idée, je prends ;o)

Merci et à bientôt

Mammouth du PHP | 19672 Messages

06 janv. 2007, 10:04

ça a tout d'un problème de chemin relatif : vérifie le code généré et vérifie que le chemin relatif l'est bien par rapport à la page en cours. Et éventuellement pour le test, mets un chemin absolu pour voir si ça fonctionnerait mieux.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 janv. 2007, 12:09

Je ne sais plus trop où tu en es... quand tu dis que l'image n'apparait toujours pas, est ce parce que tu as la croix rouge ou bien est ce toujuors parce qu'elle disparait de ton code source ?

Le fait que le fichier ne commence pas par une lettre mais par un chiffre ne pose pas de problème en principe, pour lui ça reste juste une chaine.. En revanche, il faut éviter les accents et caractères spéciaux autres que "-" et "_"

Affiche avant ton if le nom du fichier, si jamais il contient une guillemet ou un truc comme ça (j'y crois pas mais c'est toujours bon de savoir avec quelles valeurs on travail ;))
echo '-'.$row["doc"].'-'; // les tirets c'est pour repérer les espaces éventuel en début ou fin.
if ( strlen($row["doc"]) > 1) 
  { 
  echo '<a href="../fichier/'.$row["doc"].'" target="_blank">'; 
  echo '<img src="../fichier/'.$row["doc"].'" width="21" height="29" border="0" />'; // laisse un espace avant le " />"
  echo '</a>'; 
  } 
else 
  echo '&nbsp;'; 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
fab
ViPHP | 2657 Messages

06 janv. 2007, 14:07

déjà essaye
if(file_exists("../fichier/'.$row["doc"].'")) { echo "oué"; } else { echo "pas bien"; }
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 90 Messages

07 janv. 2007, 16:42

Bonjour à toutes zé à tous,

Inspirée par vos suggestions, voici le résultat de mes tests :

- j'ai testé (inspirée par fab merci) => if(file_exists... avec le chemin relatif.
$im = '../fichier/'.$row["doc"];
echo '<a href="'.$im.'" target="_blank" > <img src="';
echo $im;
echo '" border="0"  width="30" height="22" /></a><br /> ';

if(file_exists($im)) { echo "oué"; } else { echo "pas bien"; } 
Il me dit 'oué' => il devrait donc trouver l'image... pourtant elle ne s'affiche pas. Lorsque je dis qu'elle ne s'affiche pas, c'est qu'il n'y a même pas une croix rouge, elle disparait carrément du code généré => je ne comprends pas pourquoi il ne mets pas la croix... Php a ses raisons que je ne connais pas...

- j'ai aussi testé (mercu ryle) de faire un echo du nom du fichier avec les tirets => le nom semble ok à l'affichage du echo...

- j'ai testé en mettant le nom d'une image à afficher en dur, mais le lien qui pointe sur des images différentes afin de tester le lien et aussi l'existence de l'image, des fois que file_exists me raconte des histoire ;o)
$im = "59_big01.jpg"; 
echo '<a href="../../fichier/'.$row["doc"].'" target="_blank" > <img src="../../fichier/';
echo $im;
echo '" border="0"  width="30" height="22" /></a><br /> ';
=> l'image s'affiche bien et le lien pointe bien sur la bonne image, différente à chaque fois...

Il semblerait que c'est dans la définition de l'image <img src=... que ça merdouillou... Pourtant les tests précédents ne donne pas de pistes dans ce sens d'autant que je mets EXACTEMENT la même chaine dans le <img src=... et dans le <a href=... et il trouve le <a href=... et pas le <img src=... => apparemment il ne travaille pas de la même façon dans les 2 cas ?

- Si je mets le chemin absolu (merci cyrano) => ça fonctionne correctement. Mon image s'affiche et pointe sur le bon lien !!

Ce qui m'étonne c'est qu'en utilisant l'adressage relatif, le même pour le chemin de l'image et pour le chemin du lien, le lien est ok mais pas l'image => quelqu'un peut m'expliquer ?

Je vais vous paraitre peut-être pénible ;o) mais c'est super cool, j'ai une solution mais EN PLUS j'aime bien comprendre ;o)

Merci à tous et longue vie à ce forum !

A bientôt