Action JS pour une prévisualisation d'image dans un formulaire
Résolu/Fermé
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
-
21 juil. 2015 à 18:23
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 - 6 août 2015 à 15:13
janmar Messages postés 148 Date d'inscription vendredi 17 mai 2013 Statut Membre Dernière intervention 29 août 2015 - 6 août 2015 à 15:13
A voir également:
- Action JS pour une prévisualisation d'image dans un formulaire
- Action - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Tubidy film d'action telecharger - Télécharger - TV & Vidéo
- Action fans - Accueil - Guide arnaque
- Image iso - Guide
3 réponses
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
21 juil. 2015 à 19:09
21 juil. 2015 à 19:09
Une solution serait d'utiliser une image temporaire et de l'Ajax.
Lorsqu'un utilisateur sélectionne une image :
=>utilisation d'une image temporaire
(Si l'utilisateur test 3 images avant de valider, la sauvegarde du dernier test écrase l'image temp du test précédent !)
Lorsqu'un utilisateur valide une image :
=> dupliquer l'image temporaire + la renommer et la ranger dans un dossier particulier par exemple...
Tout cela est faisable avec des fonctions PHP mais pour que cela soit instantané il faut se lancer dans l'Ajax ^^
Lorsqu'un utilisateur sélectionne une image :
=>utilisation d'une image temporaire
(Si l'utilisateur test 3 images avant de valider, la sauvegarde du dernier test écrase l'image temp du test précédent !)
Lorsqu'un utilisateur valide une image :
=> dupliquer l'image temporaire + la renommer et la ranger dans un dossier particulier par exemple...
Tout cela est faisable avec des fonctions PHP mais pour que cela soit instantané il faut se lancer dans l'Ajax ^^
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Modifié par Yuh12 le 23/07/2015 à 21:07
Modifié par Yuh12 le 23/07/2015 à 21:07
Oui je suis désolé c'est ma faute !
J'ai copié mes codes et en fait j'utilise jQuery pour faciliter la tâche ce que j'ai omis de préciser, j'espère que ça ne t'a pas valu moultes galères ^^' !
correspond en javascript à un
Soit je sélectionne l'élément par son Id pour m'y adresser et si l'utilisateur clique dessus alors je lui donne une instruction.
Avec jQuery le $ sert à remplacer cette lourde instruction, et donc cela sert à s'adresser à ton HTML à la div suivante :
Pour s'y adresser par l'ID :
Pour s'y adresse par la classe :
Donc # pour l'ID et . pour la classe.
J'ai copié mes codes et en fait j'utilise jQuery pour faciliter la tâche ce que j'ai omis de préciser, j'espère que ça ne t'a pas valu moultes galères ^^' !
$('#machin').click();
correspond en javascript à un
document.getElementById('machin').onclick();
Soit je sélectionne l'élément par son Id pour m'y adresser et si l'utilisateur clique dessus alors je lui donne une instruction.
Avec jQuery le $ sert à remplacer cette lourde instruction, et donc cela sert à s'adresser à ton HTML à la div suivante :
<div id='bidule' class='machin' ></div>
Pour s'y adresser par l'ID :
$('#bidule').click(){ // click ou autre il y a pleins de fonctions ! // mon instruction }
Pour s'y adresse par la classe :
$('.machin').click(){ // mon instruction }
Donc # pour l'ID et . pour la classe.
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
23 juil. 2015 à 21:06
23 juil. 2015 à 21:06
Pour ce qui est du fichier PHP ajax.php Il peut être ou tu veux !
Si tu le met à la racine dans ta fonction ajax ce sera :
Sinon :
Si tu le met à la racine dans ta fonction ajax ce sera :
$.ajax({ type: "POST", url: "./ajax.php", // A cet endroit ! dataType: "json", data: "donnee="+clic, success: function(data) { ...
Sinon :
url: "./mon_chemin/dossier_ici/puis_la_bas/ajax.php",
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
24 juil. 2015 à 16:43
24 juil. 2015 à 16:43
J'y suis presque :
le script se déclenche bien sur un click sur le input file.
Maintenant je ne sais pas afficher la photo sélectionnée.
Qu'est ce que je dois mettre comme div dans mon formulaire ?
<div class='block_image'></div> -----> je ne reçois rien.
<div class='affiche_image'></div> ----> idem.
$(".affiche_image").html(content); // on affiche la nouvelle image dans la section qui nous interesse
Je comprends : on affiche dans une div de class "affiche_image" le contenu de html(content) ?????
le script se déclenche bien sur un click sur le input file.
Maintenant je ne sais pas afficher la photo sélectionnée.
Qu'est ce que je dois mettre comme div dans mon formulaire ?
<div class='block_image'></div> -----> je ne reçois rien.
<div class='affiche_image'></div> ----> idem.
$(".affiche_image").html(content); // on affiche la nouvelle image dans la section qui nous interesse
Je comprends : on affiche dans une div de class "affiche_image" le contenu de html(content) ?????
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Modifié par Yuh12 le 24/07/2015 à 17:16
Modifié par Yuh12 le 24/07/2015 à 17:16
Exactement :D !
Dans ta :
Tu va essayer d'afficher le contenu suivant (c'est à dire le contenu récupéré depuis le fichier ajax.php par ta fonction $ajax présente dans ton javascript ! )
Grâce au
Un truc assez pénible en ajax, tu ne peux pas voir les erreurs de ajax.php donc pour tester ce que tu as fait dans ce fichier (soit une récupération des informations de l'image que tu veux afficher) il faut que tu affiches ce qu'il renvoie.
Dans ta fonction $ajax tu va donc faire (quand tu veux faire des tests) :
Dans ta :
<div class='affiche_image'></div>
Tu va essayer d'afficher le contenu suivant (c'est à dire le contenu récupéré depuis le fichier ajax.php par ta fonction $ajax présente dans ton javascript ! )
content+="<div class='block_image'>"; content+="<h6>"+title+"</h6>"; content+="<img alt='image numero "+id+"' src='"+link+"'>"; content+= "</div>";
Grâce au
$(".affiche_image").html(content);
Un truc assez pénible en ajax, tu ne peux pas voir les erreurs de ajax.php donc pour tester ce que tu as fait dans ce fichier (soit une récupération des informations de l'image que tu veux afficher) il faut que tu affiches ce qu'il renvoie.
Dans ta fonction $ajax tu va donc faire (quand tu veux faire des tests) :
$.ajax ( { type: "POST", url: "./ajax.php", dataType: "json", data: "donnee="+clic, success: function(data){ console.log(data); // On regarde ce qu'il y a dans data dans la console et de temps en temps il y a des erreurs PHP affichées ici si le code de ajax.php est faux. }, error: function(data{ console.log(data); // On regarde aussi si cela ne crée pas une réponse négative pour le js grâce à la méthode error. } });
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
24 juil. 2015 à 17:52
24 juil. 2015 à 17:52
La magie n'opère toujours pas !... Je me résouds à te donner mon code pour correction, car là je patine sérieux .... Pas d'affichage de div, pas d'affichage console ??..
<form method = "post" action = "modifs.php" enctype="multipart/form-data"><!-- action neutralisée pour l'essai-->
<input type="image" src ="<?php echo $chemin1."?".filectime($chemin1);?>" id ="Mr" name ="Mr" alt ="Mr." style="vertical-align: middle;border:solid 1px silver;border-radius:10px; width:60px;height:60px;background-color:#CCC;" onclick="$('#InputFileM').click();return false;"/>
<input type="image" src ="<?php echo $chemin2."?".filectime($chemin2);?>" id ="Mme" name ="Mme" alt ="Mme." style="vertical-align: middle;border:solid 1px silver;border-radius:10px; width:60px;height:60px;background-color:#CCC;" onclick="$('#InputFileF').click();return false;"/>
<input type="file" id="InputFileM" name = "M" style="visibility:hidden"/>
<input type="file" id="InputFileF" name = "F" style="visibility:hidden"/><br><br>
<INPUT type="submit" value="Valider vos modifications"/>
</form>
<div affiche_image></div>
<script>
$('#InputFileM').click(function()
{
var clic=true; // cette variable ne sert à rien je la transmet juste a ajax.php pour montrer que c'est possible
$.ajax({
type: "POST",
url: "./ajax.php",
dataType: "json",
data: "donnee="+clic,
success: function(data){
console.log(data); // On regarde ce qu'il y a dans data dans la console et de temps en temps il y a des erreurs PHP affichées ici si le code de ajax.php est faux.
},
error: function(data{
console.log(data); // On regarde aussi si cela ne crée pas une réponse négative pour le js grâce à la méthode error.
if (data=="tab_empty")
console.log("pas de retour");
else
{
// Instructions avec data qui contient les informations de ajax.php donc affichage de la nouvelle
// On utilise les données récupérées par ajax.php (voir en dessous)
data.forEach(function(entry)
{
id = entry[0];
link = entry[1];
title = entry[2];
content+="<div class='block_image'>";
content+="<h6>"+title+"</h6>";
content+="<img alt='image numero "+id+"' src='"+link+"'>";
content+= "</div>";
});
$(".affiche_image").html(content); // on affiche la nouvelle image dans la section qui nous interesse
}
});
});
});
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
>
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
Modifié par Yuh12 le 24/07/2015 à 18:06
Modifié par Yuh12 le 24/07/2015 à 18:06
Ce que je voulais dire dans mon message sur le javascript c'est que :
- soit tu fais du javascript pur et dur (document.getElementById etc..)
- soit tu utilises jQuery ou une autre librairie javascript, mais si tu utilises des librairies il faut les télécharger :/ ...
Tu avais l'air de comprendre et d'appliquer rapidement donc j'ai pensé que tu connaissais.
En gros il faut inclure un ce fichier :
http://code.jquery.com/jquery-1.11.3.min.js
( Ne pas avoir peur ce n'est qu'une librairie !! => clic droit enregistrer-sous).
Ainsi qu'un
A partir de là cela te permettras d'utiliser ces fameux $ à la place des document.getElement machin truc...
De plus AJAX ressemble beaucoup plus à pas mal de boulot et de debug qu'à de la magie ^^ .. mais tu va y arriver :p !
Utilise beaucoup la console de Chrome ou de Firefox, indispensable en javascript, en faisant un clic droit => inspecter élément de ta page et l'onglet console.
C'est ici que tout les messages te seront repertoriés.
A chaque fois que je parle de la console dans mes explications c'est de cela qu'il s'agit.
- soit tu fais du javascript pur et dur (document.getElementById etc..)
- soit tu utilises jQuery ou une autre librairie javascript, mais si tu utilises des librairies il faut les télécharger :/ ...
Tu avais l'air de comprendre et d'appliquer rapidement donc j'ai pensé que tu connaissais.
En gros il faut inclure un ce fichier :
http://code.jquery.com/jquery-1.11.3.min.js
( Ne pas avoir peur ce n'est qu'une librairie !! => clic droit enregistrer-sous).
Ainsi qu'un
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
A partir de là cela te permettras d'utiliser ces fameux $ à la place des document.getElement machin truc...
De plus AJAX ressemble beaucoup plus à pas mal de boulot et de debug qu'à de la magie ^^ .. mais tu va y arriver :p !
Utilise beaucoup la console de Chrome ou de Firefox, indispensable en javascript, en faisant un clic droit => inspecter élément de ta page et l'onglet console.
C'est ici que tout les messages te seront repertoriés.
A chaque fois que je parle de la console dans mes explications c'est de cela qu'il s'agit.
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
26 juil. 2015 à 14:31
26 juil. 2015 à 14:31
Mais ça ne déclenche pas l'ajax en fait si?
Parce que ton onclick() me parait étrange...
Pour que l'ajax JS se déclenche il faut que tu clique sur la div #InputFileM
car tu commences ton ajax par :
Pour cela pas besoin de onclick vu que tu lui dis déjà, avec la fonction click(), que si tu clique dessus alors => fonction Ajax.
Tu as seulement besoin de pouvoir cliquer sur cet élément :
Or tu ne peux pas puisqu'il est en visibility:hidden.
Donc je pense que ton ajax ne se déclenche juste pas.
Si tu veux que cela se déclenche au clic sur l'image Mr il faut faire :
Et pas de onclick() ( parce que le :
consiste un peu à lui dire si tu cliques dans mon clic je te clic..
Je vais également te faire rajouter ceci au TOUT DEBUT de ton javascript :
Parce que ton onclick() me parait étrange...
Pour que l'ajax JS se déclenche il faut que tu clique sur la div #InputFileM
car tu commences ton ajax par :
$('#InputFileM').click(function() ...
Pour cela pas besoin de onclick vu que tu lui dis déjà, avec la fonction click(), que si tu clique dessus alors => fonction Ajax.
Tu as seulement besoin de pouvoir cliquer sur cet élément :
<input type="file" id="InputFileM" name = "M" style="visibility:hidden"/>
Or tu ne peux pas puisqu'il est en visibility:hidden.
Donc je pense que ton ajax ne se déclenche juste pas.
Si tu veux que cela se déclenche au clic sur l'image Mr il faut faire :
$('#Mr').click(function() ...
Et pas de onclick() ( parce que le :
onclick="$('#InputFileM').click();return false;"
consiste un peu à lui dire si tu cliques dans mon clic je te clic..
Je vais également te faire rajouter ceci au TOUT DEBUT de ton javascript :
$(document).ready(function() { // tout ton AJAX doit être compris dedans. cela sert à préparer le document à utiliser AJAX. });
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
26 juil. 2015 à 16:59
26 juil. 2015 à 16:59
Le cheminement de mon raisonnement :
J'ai une image src ="<?php echo $chemin1."
Je désire éventuellement la changer.
Si je clique dessus, je souhaite avoir le choix d'une autre image ----> donc je souhaite que me soit présenté le "parcourir".
Pour cela je fais un onclick sur l'image pour que cela me présente le "parcourir", parce que le onclick m'emmène au InputFileM
Pour l'instant, il n'y a pas d'image proposée, donc pas de déclenchement de l'ajax.
Lorsque "parcourir" m'a été proposé, je choisis un fichier, et c'est là que j'attribue à
<input type="file" id="InputFileM" name = "M" style="visibility:hidden"/>
la valeur du fichier choisi.
d'où le déclenchement de l'Ajax : $('#InputFileM').click(function()
Je considérais jusqu'à présent que le clic se faisait sur le 'choisir' du parcourir !.....
puisque c'est lui qui attribuait à l'inputFileM sa valeur.
Là, je ne distingue pas bien les futilités des clics.
C'est peut-être là que réside l'incompréhension.....
Par contre, je viens de tester la non présence du click() dans
onclick="$('#InputFileM').click();return false;"/>
ça ne marche pas, car ça ne me propose pas la fenêtre "parcourir" de recherche .
J'ai une image src ="<?php echo $chemin1."
Je désire éventuellement la changer.
Si je clique dessus, je souhaite avoir le choix d'une autre image ----> donc je souhaite que me soit présenté le "parcourir".
Pour cela je fais un onclick sur l'image pour que cela me présente le "parcourir", parce que le onclick m'emmène au InputFileM
Pour l'instant, il n'y a pas d'image proposée, donc pas de déclenchement de l'ajax.
Lorsque "parcourir" m'a été proposé, je choisis un fichier, et c'est là que j'attribue à
<input type="file" id="InputFileM" name = "M" style="visibility:hidden"/>
la valeur du fichier choisi.
d'où le déclenchement de l'Ajax : $('#InputFileM').click(function()
Je considérais jusqu'à présent que le clic se faisait sur le 'choisir' du parcourir !.....
puisque c'est lui qui attribuait à l'inputFileM sa valeur.
Là, je ne distingue pas bien les futilités des clics.
C'est peut-être là que réside l'incompréhension.....
Par contre, je viens de tester la non présence du click() dans
onclick="$('#InputFileM').click();return false;"/>
ça ne marche pas, car ça ne me propose pas la fenêtre "parcourir" de recherche .
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
27 juil. 2015 à 16:41
27 juil. 2015 à 16:41
Pris d'un doute avec les versions de jQuery, j'ai mis dans mon head les chargements de bibliothèque jQuery, tels que tu me les as indiqués .
Dans la console, j'obtiens :
reflow : 0.37ms fonction m.event.fix, jquery-1.11.3.min.js ligne 4
Il semble que ce soit une erreur qui fait 1 km de long !....
J'ai lu quelque part qu'il existe des conflits avec diverses versions de jQuery.
Est-ce là le problème ?
<script type="text/javascript" src ="http://code.jquery.com/jquery-1.11.3.min.js"/></script>
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
Dans la console, j'obtiens :
reflow : 0.37ms fonction m.event.fix, jquery-1.11.3.min.js ligne 4
Il semble que ce soit une erreur qui fait 1 km de long !....
J'ai lu quelque part qu'il existe des conflits avec diverses versions de jQuery.
Est-ce là le problème ?
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
Modifié par Yuh12 le 28/07/2015 à 10:55
Modifié par Yuh12 le 28/07/2015 à 10:55
Non je ne voulais pas dire d'en ajouter deux... Il vont se mettre en conflit.
Mon message c'était de télécharger le fichier à cette adresse :
http://code.jquery.com/jquery-1.11.3.min.js
Et l'inclure de cette marnière :
Après oui j'ai écrit jquery-1.11.0.min.js et je comprend que le 1.11.0 ait porté à confusion..
J'ai copié coller ma ligne de code et je suis aller chercher le dernier lien jquery donc comme je suis pas à jour à 3 versions près voilà.. mais il faut vraiment n'en inclure qu'un seul.
Mon message c'était de télécharger le fichier à cette adresse :
http://code.jquery.com/jquery-1.11.3.min.js
Et l'inclure de cette marnière :
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
Après oui j'ai écrit jquery-1.11.0.min.js et je comprend que le 1.11.0 ait porté à confusion..
J'ai copié coller ma ligne de code et je suis aller chercher le dernier lien jquery donc comme je suis pas à jour à 3 versions près voilà.. mais il faut vraiment n'en inclure qu'un seul.
janmar
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
Modifié par janmar le 28/07/2015 à 11:54
Modifié par janmar le 28/07/2015 à 11:54
OK, j'avais rectifié tout seul. Merci quand même.
Je continue.
Je continue.
Yuh12
Messages postés
184
Date d'inscription
mercredi 7 mai 2014
Statut
Membre
Dernière intervention
28 septembre 2017
24
28 juil. 2015 à 11:49
28 juil. 2015 à 11:49
Peut-être que ce lien pourra t'aider.
http://chez-syl.fr/2015/02/jquery-uploader-une-image-en-ajax-avec-un-apercu-avant-envoi/
C'est un tuto qui se rapproche de ce que tu veux faire je pense.
http://chez-syl.fr/2015/02/jquery-uploader-une-image-en-ajax-avec-un-apercu-avant-envoi/
C'est un tuto qui se rapproche de ce que tu veux faire je pense.
21 juil. 2015 à 19:17
Saurais-tu où je pourrais trouver une référence à ce sujet en AJAX ?
tutoriel, exemple etc.....
J'ai un peu cherché, mais je ne sais pas bien comment formuler la recherche.
22 juil. 2015 à 11:40
22 juil. 2015 à 16:22
Donc tu as ta page html (ou php) avec le traitement de l'image la page de base donc.
On va dire image.php
Tu as un fichier javascript avec une fonction ajax (on y vient) qui intervient dès lors d'un clic sur le bouton envoyer par exemple :
Et enfin tu as ta page PHP spécial ajax dans laquelle tu veux modifier des éléments "en live" !
Admettons ajax.php
Ce site peut certainement t'aider !
http://jquery.developpeur-web2.com/documentation/ajax/$.ajax.php
22 juil. 2015 à 20:48
J'aurai probablement des explications à te demander ultérieurement.
J'ai un bouquin de Javascript, qui traite un peu d'AJAX pour m'aider, mais comme je ne suis pas un expert en JS, c'est un peu dur ......
23 juil. 2015 à 00:16
ça vaut le coup, courage, et n'hésite pas pour les questions.