Par SuperGood à 19h05 :
Bonjour Patrice.
Je suis interresé par cet article pour l'envoie de fichier par JQuerry et Ajax que je trouve super clair dans vos exlications. Par contre comment peut on sélectionner plusieurs fichiers pour les envoyer? Je sais qu'il existe un champ "multiple" dans les formes qui d'apres ce que j'ai lu permet de sélectionner plusieurs fichier dans la boite de dialoque de sélection de fichier, mais je vois pas trés bien (cela n'est pas encore assez clair pour moi) de savoir comment récupérer ces différents fichier pour les envoyer). Avez vous déja fait cela? Pour la fonction foreach je vois mais c'est pour récupérer le nom des fichiers et les traiter que je bloque.
Par Patrice à 11h10 :
Bonjour SuperGood,
Vous pouvez utiliser plusieurs champs <input type="file" />.
Voir le manuel : http://php.net/manual/fr/features.file-upload.multiple.php.
Ceci dit à votre place j'essayerais une autre approche. Regardez mon article sur la façon de créer une zone de glissé déposé et d'envoi direct du fichier via AJAX.
Il suffirait de désactiver la zone de réception le temps du chargement et de la réactiver une fois le fichier chargé.
Par genesia à 15h28 :
Bonjour patrice superbe article, par contre je bloque sur la version responseXML car j'aimerais qu'après l'upload ma page se redirige vers une autre avec bien entendu mes variables d'upload.
j'espère que ma question n'est pas trop idiote car je commence avec le JavaScript et l'Ajax.
j'avance a mon rythme...
Merci
Par Patrice à 16h31 :
Bonjour genesia,
Il n'y a jamais de question idiote :-)
Pourquoi ne pas rediriger la page en php en enregistrant les variables d'upload dans des variables de sessions ?
Par exemple en faisant quelque chose comme :
$_SESSION['imgName'] = $fName'.'.$fType;
$_SESSION['imgMime'] = $fPost['type'];
$_SESSION['imgPath'] = $fPath;
Bon courage.
Par genesia à 17h53 :
A vrai dire mon problème est un peu complexe, j'aurais du mieux m'expliquer. j'ai une page en php avec un system d'uploade qui permet d'enregistrer,renommer après de resizer les photos.
le tout est sur la meme page ($_SERVER["PHP_SELF"]), j'ai voulus adapter votre système de progressbar qui est superbe mais je perd a ce moment les variables et ma page s'ouvre vide.
c'est assez complexe a expliquer je pourrais éventuellement si vous le permettez vous faire parvenir la page php.
Par Patrice à 20h33 :
Bonsoir genesia,
Je vois le principe. Que ça reste sur le même fichier n'est pas un problème.
Mais si vous rechargez la page dans le navigateur, il faut passer les variables d'une manière ou d'un autre. Soit avec $_GET, soit avec $_POST, soit dans une $_SESSION, soit dans un fichier temporaire.
Si vous ne voulez pas recharger la page dans ce cas tout se passe avec Javascript.
Vous ouvez m'envoyer une url vers le fichier en question, je pourrais y jeter un oeil.
Par genesia à 20h53 :
bonsoir Patrice,
très bien ci-joint l'url, SVP effacer cela du commentaire.
http://www.******
Par Patrice à 20h57 :
Bonsoir,
Le lien ne fonctionne pas je suis redirigé systématiquement vers le dossier admin.
Par genesia à 21h13 :
désolé, c'est la sécurité du site j'ai retire le script interdiction click droit.
cela marche avec Firefox je peux vous envoyer le fichier sur un mail si vous voulez?
Par genesia à 21h25 :
excusez moi ca marche c'était un contrôleur de session, je l'ai désactivé
Par Patrice à 21h40 :
Tant mieux si ça fonctionne. Bonne soirée genesia.
Par genesia à 21h50 :
bonsoir Patrice,
non le script ne marche toujours pas, c'est l'accès au fichier pour vous qui marche.
a vrai dire c'est la partie..
complete: function(xhr){
$("#uploadResult > p").html(xhr.responseText);
$("#uploadProgress").fadeOut(200, function(){
$("#uploadResult").fadeIn();
qui doit me poser un problème, pouvez vous me dire
comment mettre la fonction avec xhr.responseXML et la redirection?
excusez moi d'être un peu lourd sur le coup.
merci
Par Patrice à 22h22 :
Si vous envoyez les données en XML il faut les parser.
jQuery propose une fonction pour ça :
http://api.jquery.com/jquery.parsexml/
var data = '<?xml version="1.0" encoding="UTF-8"?><data><image>img/test.png</image><mime>JPG</mime></data>';
xmlDoc = $.parseXML(data);
$xml = $(xmlDoc);
alert($xml.find("image").text());
Charge à vous de manipuler les données selon votre besoin
La redirecion en javascript c'est :
window.location.href = "http://www.monsite.fr
Mais à votre place j'utiliserais des variables de sessions ou des données $_POST c'est plus sécurisé que d'envoyer des données XML au navigateur.
Par genesia à 22h40 :
bonsoir Patrice,
bon je ne vais pas vous ennuyer plus longtemps, car je ne comprend pas tout.
je crois que je vais essayer autre chose, merci en tout cas de votre patience.
bonne soirée
Par Lina à 23h31 :
Bonjour et merci pour votre script
Puis-je abuser et vous prier bien fort de me sortir de mon ignorance d'autodidacte encore très nulle , mais acharnée!
je n'arrive pas à savoir comment compléter certaines lignes avec mes propres données. Pourriez vous me dire ce qu'il y a de faux dans ce que (bcp de choses sans doute):
$fUpload = 'upload/message/www/astrogonale.com/'; // dossier de destination
$fName = 'photo'; // nom du fichier de destination
$fPost = $_FILES['photo.jpg']; // fichier envoyé
// liste des format de fichier accepté
$lst = array('image/jpeg'=>'jpg','image/jpeg'=>'jpg');
$fType = $lst[$fPost['photo.jpg']]; // type du fichier qui nous intéresse
$fPath = $fUpload.$fName.'.'.$fType; // chemin complet après déplacement
if(empty($fType)){
// fichier inconnu
echo 'Fichier de type inconnu';
Quant à la ligne suivante, impossible de trouver ce qu il convient d'ajouter pour ne plus avoir de message d'erreur:
}else if(move_uploaded_file($fPost['photo'], $fPath)){
et si le chargement réussit faut il passer par le FTP pour récupérer son image?
jE CROISE LES DOIGTS EN ESPERANT QUE VOUS VOUDREZ BIEN ME REPONDRE...sinon j'abandonne
merci d'avance
Lina
Par Patrice à 21h01 :
Bonsoir Lina,
C'est bien d'être autodidacte, je le suis aussi ;-)
Quelle est l'erreur exacte ?
Dans votre cas il faut que le dossier upload/message/www/astrogonale.com/ existe.
Ce sont des chemins d'accès relatifs, n'oubliez pas.
Une fois le fichier en ligne pas besoin de passer par du FTP, on peut y accéder en PHP :
echo '<img src="'.$fPath.'" />;
Par Lina à 09h41 :
Merci Patrice d'avoir pris la peine de me répondre
Hélas mes essais restent infructueux...
oui j'ai bien créé le dossier upload à la place que j'indique mais voilà le message d'erreur que j'obtiens à chaque fois:
Warning: move_uploaded_file(upload/message/www/astrogonale.com/test.png) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/astrogon/www/message/upload.php on line 24
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpz5Qyns' to 'upload/message/www/astrogonale.com/test.png' in /home/astrogon/www/message/upload.php on line 24
erreur
la ligne 24 est celle ci:
}else if(move_uploaded_file($fPost['tmp_name'], $fPath)){
Avez vous la solution???
Pour vous remercier, je vous envoie un peu de la beauté du lagon calédonien...
Lina
Par Patrice à 09h27 :
Bonjour Lina,
Ces deux erreurs indiquent qu'il n'arrive ni à ouvrir le fichier, ni à le déplacer. C'est probablement une erreur dans vos chemins d'accès.
1- vérifiez que le champ du formulaire s'appelle bien 'photo.jpg' :
<input id="uploadImg" name="photo.jpg" type="file" accept=".jpg,.png,.gif,image/png,image/jpg,image/gif">
Sinon vérifiez la liste des fichiers envoyé avec print_r($_FILES);
2- Vous pouvez tester l'existence du dossier de destination
if (!file_exists($fUpload)){
echo '<p>Le dossier n\'existe pas !</p>';
}
Par Lina à 10h16 :
Merci encore, Patrice pour votre aide, mais je n arrive décidément à rien malgré des heures d effort...
Pourriez vous seulement me dire encore une chose: le script en question appartient à quel type de php?
En effet, pour compléter le tout , mon hébergeur, OVH, vient de signaler à ses clients que le php 5.3 est désormais obsolete... Et qu il allait falloir mettre ses fichiers à jour.
Je vais donc m enquérir d une aide sur place, à Noumea, car la je me sens perdue
Merci encore
Cordialement
Lina
Par Patrice à 15h28 :
Bonjour Lina,
Les quelques lignes resteront compatibles PHP 5.4 ou 5.5, pas de soucis.
Vous avez testé le chemin d'accès de la variable $fUpload ?
Vous pouvez faire un test simple en chargant le fichier dans le même dossier que le script PHP.
Par Lina à 20h42 :
Bonjour Patrice,
Pas encore la réussite mais des progrès tout de même!
Cependant:"fichier de type inconnu" s'affiche dès l'ouverture de la page avant même que j'aie choisi un fichier-image
puis le fichier choisi se telecharge, je vois la progression à 100%...
Un progrès: plus de warnings!
Mais: fichier inconnu affiché une seconde fois
mais pas de notification de reussite du déplacement et pas d'image dans le dossier
Merci pour votre aide...je vais bien finir par y arriver!
Par Patrice à 14h13 :
Bonjour Lina,
L'erreur doit être affiché par le fichier PHP.
if(empty($fType)){
// fichier inconnu
echo 'Fichier de type inconnu';
}else{
[...]
}
Le fichier accepte des fichier JPG, PNG ou GIF.
Vous avez envoyé quel type d'image ?
Vous pouvez rajouter d'autres type si vous voulez, en modifiant la variables $lst :
$lst = array('image/gif'=>'gif', 'image/jpeg'=>'jpg', 'image/pjpeg'=>'jpg', 'image/png'=>'png');
Vous trouverez la liste des type d'image sur le site php.net :
- http://php.net/manual/fr/function.image-type-to-mime-type.php
Bon courage, vous allez y arriver ;-)