Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1276 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Upload fichier avec choix dossier destination

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Upload fichier avec choix dossier destination

n°2206905
gasolina
Posté le 16-10-2013 à 15:57:01  profilanswer
 

Bonjour :hello:,
 
Je suis actuellement en train de programmer une page permettant l'import de fichier, cependant je bloque sur la partie choix du dossier de destination.
 
dans l'idéal j'aimerais un menu liste déroulante dynamique, d'une part la liste déroulante s'établit à partir de l'arborescence d'un dossier en local.
 
Puis dans la liste déroulante, pouvoir se balader dans les dossiers et sous dossier pour enfin choisir l'emplacement exact pour l'upload.
 
Liste Déroulante
Niveau 1 :         Niveau 2:
 
Dossier 1 ---->Sous-dossier1
                    Sous-dossier2
 
Dossier 2 ---->Sous-dossier1
                    Sous-dossier2
 
Pour l'instant j'ai réussi à lister le contenu d'un dossier, mais pas moyen de trouver de moyen d'avoir cette liste déroulante dynamique
 
Si vous avez des pistes pouvant m'aider je suis tout ouïe  
 
J'espère avoir été clair sinon, n'hésitez pas à me poser des questions
 
Merci d'avance de vos réponses
 
:jap:
 

mood
Publicité
Posté le 16-10-2013 à 15:57:01  profilanswer
 

n°2206946
MaybeEijOr​Not
but someone at least
Posté le 16-10-2013 à 20:57:58  profilanswer
 

Soit tu as peu de dossiers et du coup tu les listes tous puis tu gères l'affichage par javascript soit tu as beaucoup de dossiers et dans ce cas là mieux vaut passer par de l'ajax.

n°2206968
olivthill
Posté le 16-10-2013 à 23:53:58  profilanswer
 

Oui, moi aussi, je conseille Ajax. Ca peut avoir l'air compliqué quand on n'en a jamais fait, mais ça ne l'ait pas tant que ça.
Sinon, il est possible de faire un submit à chaque choix de l'utilisateur, mais ça oblige à renvoyer et donc à réafficher la page entière, ce qui fait un clignotement qui n'est pas très agréable. Et au final, ce n'est pas plus simple à programmer qu'Ajax.

n°2207192
gasolina
Posté le 18-10-2013 à 14:23:35  profilanswer
 

D'accord merci pour vos conseils, je ne connais pas du tout l'ajax sachant que j'aurais beaucoup de dossier et qui peuvent changer donc il faut que je trouve une solution qui me fait pas récrire la page d'import à chaque dossier crée, pour l'ajax vous avez des pistes vers où il faut que j'aille pour trouver mon bonheur?
 
Merci encore

n°2207198
MaybeEijOr​Not
but someone at least
Posté le 18-10-2013 à 14:35:31  profilanswer
 

Tu tapes xmlhttprequest ou ajax sur google et je pense que tu auras de quoi faire.

n°2207203
gasolina
Posté le 18-10-2013 à 15:01:54  profilanswer
 

Merci :)

n°2207222
MaybeEijOr​Not
but someone at least
Posté le 18-10-2013 à 16:14:40  profilanswer
 

Si je te dis ça c'est que ces techniques sont très en vogue et donc il doit y avoir un paquet de tutos, après pourquoi l'un plus qu'un autre, autant te laisser choisir.

n°2207226
gasolina
Posté le 18-10-2013 à 16:26:36  profilanswer
 

Je vais essayé de m'orienter vers ajax dans un premier temps et en fonction des essais j'aviserais

n°2207455
gasolina
Posté le 21-10-2013 à 09:25:35  profilanswer
 

Pour tenir au courant de mon avancé, donc en ajax pour l'instant j'ai réussi à lister le contenu du dossier que je veux avec les différents répertoires à l'intérieur mais faut que je trouve comment pouvoir rentrer dans ces dossiers pour aller chercher le dossier final que je souhaite sélectionner

n°2207475
MaybeEijOr​Not
but someone at least
Posté le 21-10-2013 à 11:20:26  profilanswer
 

Je ne comprends pas la problème.
À chaque sélection de sous-dossier tu fais une requête AJAX qui te retourne le contenu du sous-dossier ($_POST["lister_dossier"] = 1 et $_POST["path"] = "arborescence" ) et qui affiche un nouveau select. Le contenu est listé par PHP. Une fois que l'utilisateur a sélectionné le bon dossier tu envoies une autre requête ($_POST["lister_dossier"] = 0 et $_POST["path"] = "arborescence" ).


Message édité par MaybeEijOrNot le 21-10-2013 à 11:20:50
mood
Publicité
Posté le 21-10-2013 à 11:20:26  profilanswer
 

n°2207526
gasolina
Posté le 21-10-2013 à 15:50:44  profilanswer
 

j'ai du mal en ajax et ainsi faire la requête ajax
 
Pour l'instant j'ai un truc dans ce genre :
 

Code :
  1. <?php function ScanDirectory($Directory){
  2.   $MyDirectory = opendir($Directory) or die('Erreur');
  3. while($Entry = @readdir($MyDirectory)) {
  4.  if(is_dir($Directory.'/'.$Entry)&& $Entry != '.' && $Entry != '..') {
  5.                          echo '<ul>'.$Entry;
  6.   ScanDirectory($Directory.'/'.$Entry);
  7.                         echo '</ul>';
  8.  }
  9.  else {
  10.    if (($Entry!='.')&&($Entry!='..')&&($Entry!='index.php')) {
  11.   echo '<li><a href="'.$Directory.'/'.$Entry.'">'.$Entry.'</a></li>';
  12.   }
  13.                 }
  14. }
  15.   closedir($MyDirectory);
  16.  
  17.  
  18.   echo $dir;
  19. }?>


 
Puis :
 

Code :
  1. <select name="dossier" id="dossier">
  2.    <?php $dir = opendir('./Documentations');
  3.    while ($file = readdir($dir)) {
  4.    if(strpos($file,'.') === false) {?>
  5.     <option value="<?php echo $file; ?>"><?php echo $file; ?></option>
  6. <?php   }
  7.   }
  8. ?>
  9.        </select>

n°2207546
MaybeEijOr​Not
but someone at least
Posté le 21-10-2013 à 16:51:33  profilanswer
 

Oui mais là y'a pas une once d'ajax là.
 
Déjà il va te falloir un fichier php séparé pour analyser la requête ajax (enfin du moins ça sera plus simple car apparemment tu balances des echo d'html dans le php que tu utilises), dedans tu lui passes les deux paramètres que je t'ai donné. Si $_POST["lister_dossier"] = 0 alors tu continues de chercher des dossiers depuis le chemin $_POST["path"] = "arborescence".
 
Depuis la page chargée par le client tu mets l'ajax (premier tuto en recherche google : http://www.toutjavascript.com/savo [...] quest.php3 tu peux quasiment faire du copier/coller). À chaque fois que le client sélectionne un dossier tu envoies une requête pour lister les sous-dossiers inclus dans le dossier choisi par le client puis tu les affiches dans un nouveau select.


Message édité par MaybeEijOrNot le 21-10-2013 à 16:51:56
n°2207550
gasolina
Posté le 21-10-2013 à 16:58:40  profilanswer
 

non c'était la première version, je regarde ce que tu as mis et je trouve ma solution ^^ merci à toi

n°2207588
MaybeEijOr​Not
but someone at least
Posté le 21-10-2013 à 21:44:18  profilanswer
 

MP --> ce sera plus utile de mettre le code en public, ça pourra servir, donc voici un exemple non fini :
 
Mon arborescence :
 test.php
 test.html
 - archives
 - Nouveau dossier
 ------ Nouveau dossier
 ------ Nouveau dossier (2)
 ----------- Nouveau dossier
 ----------- Nouveau dossier (2)
 ------ Nouveau dossier (3)
 
 
test.html :

Code :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.  <title>Page d'essai</title>
  5.  <script type="text/javascript">
  6.   function requete() {
  7.    if (typeof(statement) != 'undefined' && statement == 1) {
  8.     xhr.abort();
  9.     alert('Une requête a déjà été envoyée!');
  10.     return false;
  11.    } else if (dirname == ' ') {
  12.     alert('Sélectionnez un dossier');
  13.    } else {
  14.     statement = 1;
  15.     request(readData);
  16.    }
  17.   }
  18.   function getXMLHttpRequest() {
  19.    xhr = null;
  20.    if (window.XMLHttpRequest) {
  21.     return new XMLHttpRequest();
  22.    } else if (window.ActiveXObject) {
  23.     try {
  24.      return new ActiveXObject('Msxml2.XMLHTTP');
  25.     } catch(e) {
  26.      return new ActiveXObject('Microsoft.XMLHTTP');
  27.     }
  28.    } else {
  29.     alert('Erreur: votre navigateur ne supporte pas l\'objet XMLHTTPRequest...');
  30.     return null;
  31.    }
  32.   }
  33.   function request(callback) {
  34.    xhr = getXMLHttpRequest();
  35.    xhr.onreadystatechange = function() {
  36.     if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
  37.      statement = 0;
  38.      callback(xhr.responseText);
  39.     } else if (xhr.readyState < 4) {
  40.      document.getElementById('but').style.display = 'none';
  41.      document.getElementById('loader').style.visibility = 'visible';
  42.     }
  43.    };
  44.    xhr.open('POST', 'test.php', true);
  45.    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  46.    xhr.send('path='+dirname+'&lister_dossier='+conf);
  47.   }
  48.   function readData(sData) {
  49.    if (sData == 'erreur') {
  50.     document.getElementById('loader').style.visibility = 'hidden';
  51.     document.getElementById('but').style.display = 'none';
  52.     alert(xhr.responseText);
  53.    } else {
  54.     window.setTimeout('traitement('+xhr.responseText+')', 500);
  55.    }
  56.   }
  57.   function traitement(list) {
  58.    loader = document.getElementById('loader');
  59.    loader.style.visibility = 'hidden';
  60.    list = eval(list);
  61.    if(typeof(list[0]) != 'undefined') {
  62.     el = document.getElementsByTagName('form')[0];
  63.     parent = document.createElement('select');
  64.     parent.setAttribute('onChange', 'dirname=dirname+\'/\'+this.value;conf=1;requete();');
  65.     el.appendChild(parent);
  66.     for(i=0; i<list.length; i++) {
  67.      enfant = document.createElement('option');
  68.      enfant.setAttribute('value', list[i]);
  69.      enfant.innerHTML = list[i];
  70.      parent.appendChild(enfant);
  71.     }
  72.     but = document.getElementById('but');
  73.     el.appendChild(but);
  74.     el.appendChild(loader);
  75.     document.getElementById('but').style.display = 'inline';
  76.    } else {
  77.     document.getElementById('but').style.display = 'inline';
  78.     lastselect = document.getElementsByTagName('select');
  79.     lastselect = lastselect[lastselect.length-1];
  80.     lastselect.removeAttribute('onChange');
  81.     alert('plus de sous-dossiers');
  82.    }
  83.   }
  84.  </script>
  85. </head>
  86. <body>
  87.  <form name="test">
  88.   <select onChange="dirname=this.value;conf=1;requete();">
  89.    <option value=" ">   </option>
  90.    <option value="archives">archives</option>
  91.    <option value="Nouveau dossier">Nouveau dossier</option>
  92.   </select>
  93.   <button onClick="dirname=this.value;conf=0;requete();" id="but">Envoyer !</button>
  94.   <img style="font-size: 13px; font-weight: bold; visibility: hidden;" alt="loading..." src="loader.gif" id="loader" />
  95.  </form>
  96. </body>
  97. </html>


 
 
test.php :

Code :
  1. <?php
  2. function ScanDirectory($Directory) {
  3. $i = 0;
  4. $list_dir = array();
  5. $MyDirectory = opendir($Directory);
  6. while($Entry = @readdir($MyDirectory)) {
  7.  if(is_dir($Directory.'/'.$Entry) && $Entry != '.' && $Entry != '..') {
  8.   $list_dir[$i] = $Entry;
  9.   $i++;
  10.  }
  11. }
  12. closedir($MyDirectory);
  13. $list = json_encode($list_dir);
  14. echo $list;
  15. }
  16. if(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 1) {
  17. $path = './'.$_POST['path'];
  18. ScanDirectory($path);
  19. } elseif(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 0) {
  20. echo 'action';
  21. } else {
  22. echo 'erreur';
  23. }
  24. ?>


 
Cela fonctionne bien, sauf qu'il faut encore gérer le cas où l'utilisateur après avoir descendu l'arborescence souhaite la remonter en changeant des select déjà modifiés.


Message édité par MaybeEijOrNot le 21-10-2013 à 21:50:21
n°2207591
gasolina
Posté le 21-10-2013 à 22:33:36  profilanswer
 

Merci beaucoup pour cet exemple, il va m'être d'une aide précieuse pour la suite, honnêtement j'aurais eu du mal à trouver tout ça seul :)


Message édité par gasolina le 21-10-2013 à 23:34:35
n°2207594
MaybeEijOr​Not
but someone at least
Posté le 22-10-2013 à 00:10:48  profilanswer
 

Bon en fait remonter l'arborescence c'est plus compliqué que ce que je pensais, voici donc une version qui fonctionne :
 

Code :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.  <title>Page d'essai</title>
  5.  <script type="text/javascript">
  6.   function requete() {
  7.    if (typeof(statement) != 'undefined' && statement == 1) {
  8.     xhr.abort();
  9.     alert('Une requête a déjà été envoyée!');
  10.     return false;
  11.    } else if (dirname == ' ') {
  12.     alert('Sélectionnez un dossier');
  13.    } else if (activeselect.value == ' ') {
  14.     inactiveselect = document.getElementsByTagName('select');
  15.     start = 0;
  16.     dirname = '';
  17.     taille = inactiveselect.length;
  18.     for(i=0; i<taille; i++) {
  19.      if(activeselect == inactiveselect[i]) {
  20.       start = i+1;
  21.      } else if(start == 0 && inactiveselect[i].value != ' ') {
  22.       dirname += inactiveselect[i].value;
  23.      } else if(start > 0) {
  24.       inactiveselect[start].parentNode.removeChild(inactiveselect[start]);
  25.      }
  26.     }
  27.    } else if(activeselect != document.getElementsByTagName('select')[document.getElementsByTagName('select').length-1]) {
  28.     dirname = '';
  29.     inactiveselect = document.getElementsByTagName('select');
  30.     start = 0;
  31.     taille = inactiveselect.length;
  32.     for(i=0; i<taille; i++) {
  33.      if(activeselect == inactiveselect[i]) {
  34.       dirname += inactiveselect[i].value + '/';
  35.       start = i+1;
  36.      } else if(start == 0) {
  37.       dirname += inactiveselect[i].value + '/';
  38.      } else if(start > 0) {
  39.       inactiveselect[start].parentNode.removeChild(inactiveselect[start]);
  40.      }
  41.     }
  42.     statement = 1;
  43.     request(readData);
  44.    } else {
  45.     dirname = '';
  46.     inactiveselect = document.getElementsByTagName('select');
  47.     start = 0;
  48.     taille = inactiveselect.length;
  49.     for(i=0; i<taille; i++) {
  50.      dirname += inactiveselect[i].value + '/';
  51.     }
  52.     statement = 1;
  53.     request(readData);
  54.    }
  55.   }
  56.   function getXMLHttpRequest() {
  57.    xhr = null;
  58.    if(window.XMLHttpRequest) {
  59.     return new XMLHttpRequest();
  60.    } else if(window.ActiveXObject) {
  61.     try {
  62.      return new ActiveXObject('Msxml2.XMLHTTP');
  63.     } catch(e) {
  64.      return new ActiveXObject('Microsoft.XMLHTTP');
  65.     }
  66.    } else {
  67.     alert('Erreur: votre navigateur ne supporte pas l\'objet XMLHTTPRequest...');
  68.     return null;
  69.    }
  70.   }
  71.   function request(callback) {
  72.    xhr = getXMLHttpRequest();
  73.    xhr.onreadystatechange = function() {
  74.     if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
  75.      statement = 0;
  76.      callback(xhr.responseText);
  77.     } else if(xhr.readyState < 4) {
  78.      document.getElementById('but').style.display = 'none';
  79.      document.getElementById('loader').style.visibility = 'visible';
  80.     }
  81.    };
  82.    alert(dirname);
  83.    xhr.open('POST', 'test.php', true);
  84.    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  85.    xhr.send('path='+dirname+'&lister_dossier='+conf);
  86.   }
  87.   function readData(sData) {
  88.    if(sData == 'erreur') {
  89.     document.getElementById('loader').style.visibility = 'hidden';
  90.     document.getElementById('but').style.display = 'none';
  91.     alert(xhr.responseText);
  92.    } else {
  93.     window.setTimeout('traitement('+xhr.responseText+')', 500);
  94.    }
  95.   }
  96.   function traitement(list) {
  97.    loader = document.getElementById('loader');
  98.    loader.style.visibility = 'hidden';
  99.    list = eval(list);
  100.    if(typeof(list[0]) != 'undefined') {
  101.     el = document.getElementsByTagName('form')[0];
  102.     parent = document.createElement('select');
  103.     parent.setAttribute('onChange', 'activeselect=this;dirname=dirname+\'/\'+this.value;conf=1;requete();');
  104.     el.appendChild(parent);
  105.     enfant = document.createElement('option');
  106.     enfant.setAttribute('value', ' ');
  107.     enfant.innerHTML = '   ';
  108.     parent.appendChild(enfant);
  109.     for(i=1; i<=list.length; i++) {
  110.      enfant = document.createElement('option');
  111.      enfant.setAttribute('value', list[i-1]);
  112.      enfant.innerHTML = list[i-1];
  113.      parent.appendChild(enfant);
  114.     }
  115.     but = document.getElementById('but');
  116.     el.appendChild(but);
  117.     el.appendChild(loader);
  118.     document.getElementById('but').style.display = 'inline';
  119.    } else {
  120.     document.getElementById('but').style.display = 'inline';
  121.    }
  122.   }
  123.  </script>
  124. </head>
  125. <body>
  126.  <form name="test">
  127.   <select onChange="activeselect=this;dirname=this.value;conf=1;requete();">
  128.    <option value=" ">   </option>
  129.    <option value="archives">archives</option>
  130.    <option value="Nouveau dossier">Nouveau dossier</option>
  131.   </select>
  132.   <button onClick="dirname=this.value;conf=0;requete();" id="but">Envoyer !</button>
  133.   <img style="font-size: 13px; font-weight: bold; visibility: hidden;" alt="loading..." src="loader.gif" id="loader" />
  134.  </form>
  135. </body>
  136. </html>


 
 
Peut surement être optimisé!


Message édité par MaybeEijOrNot le 22-10-2013 à 00:16:39
n°2207605
gasolina
Posté le 22-10-2013 à 09:11:36  profilanswer
 

Tu es un chef :jap:

n°2207696
gasolina
Posté le 22-10-2013 à 16:35:31  profilanswer
 

J'ai plus qu'a associé ça à un script d'upload en fonction du choix du dossier et c'est le rêve ^^

n°2207697
MaybeEijOr​Not
but someone at least
Posté le 22-10-2013 à 16:43:10  profilanswer
 

Le rêve des malwares. :/

n°2207698
gasolina
Posté le 22-10-2013 à 16:54:20  profilanswer
 

Oui je sais bien mais mon site restera en interne, le but étant d'avoir d'un coté une arborescence avec différents documents et d'un autre une base de données avec des critères, par exemple un document aura :

 

Numéro client / Nom Client / Type de client/ Nom du  Document / Auteur / Constructeur / Type Document / Périmètre / Domaine technique / Date / Lien du doc

 

Et donc j'ai déjà développé la page qui permet de rechercher un document en choisissant les critères voulus et ainsi avec le lien du doc cela nous télécharge le fichier.

 

Et mon but est maintenant d'envoyer un document, en lui choisissant l'emplacement de destination :) et aussi en choisissant les critères qui correspondent ce qui fera des INSERT dans la base de données.

 

Dans un premier temps je vais upload le fichier dans l'endroit voulu, puis viendra la mise en place des critères

 

Le but étant de pouvoir rechercher rapidement un document, ce site est à usage interne de ma société, à moins que quelqu'un de l'intérieur attaque il n'y a pas de raison d'avoir peur, mais tout est possible.

 

Si quelqu'un veut m'aider pour la suite en plus de l'aide déjà donné par MaybeEijOrNot et me filer d'autres pistes pour le reste ou autre je suis preneur ^^

 

Voilà l'idée


Message édité par gasolina le 22-10-2013 à 17:01:59
n°2207733
MaybeEijOr​Not
but someone at least
Posté le 22-10-2013 à 21:23:04  profilanswer
 
n°2207759
gasolina
Posté le 23-10-2013 à 09:46:33  profilanswer
 

C'est le tuto que j'avais trouvé, juste une question au final le dossier choisi ressort sous quelle variable pour la réutiliser après

n°2207797
olivthill
Posté le 23-10-2013 à 14:45:54  profilanswer
 

Dans dirname.

n°2207798
gasolina
Posté le 23-10-2013 à 14:47:19  profilanswer
 

Merci ;)

n°2207825
MaybeEijOr​Not
but someone at least
Posté le 23-10-2013 à 16:56:44  profilanswer
 

Hum dans le .html tu peux virer la ligne 86 "alert(dirname);" qui me servait de debuggage.
Ligne 138 :

Code :
  1. <button onClick="dirname=this.value;conf=0;requete();" id="but">Envoyer !</button>


Devient :

Code :
  1. <button onClick="conf=0;requete();" id="but">Envoyer !</button>


 
Le répertoire est alors envoyé de même en ajax à la page test.php dans laquelle le traitement de ce cas (validation finale) est à traiter dans l'espace :

Code :
  1. echo 'action';


Tu récupères alors le chemin par :

Code :
  1. $path = './'.$_POST['path'].'/';


Message édité par MaybeEijOrNot le 23-10-2013 à 16:57:17
n°2207873
MaybeEijOr​Not
but someone at least
Posté le 23-10-2013 à 21:51:07  profilanswer
 

Code :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.  <title>Page d'essai</title>
  5.  <script type="text/javascript">
  6.   file = '';
  7.   function requete() {
  8.    if (typeof(statement) != 'undefined' && statement == 1) {
  9.     xhr.abort();
  10.     alert('Une requête a déjà été envoyée!');
  11.     return false;
  12.    } else if (dirname == ' ') {
  13.     alert('Sélectionnez un dossier');
  14.    } else if (activeselect.value == ' ') {
  15.     inactiveselect = document.getElementsByTagName('select');
  16.     start = 0;
  17.     dirname = '';
  18.     taille = inactiveselect.length;
  19.     for(i=0; i<taille; i++) {
  20.      if(activeselect == inactiveselect[i]) {
  21.       start = i+1;
  22.      } else if(start == 0 && inactiveselect[i].value != ' ') {
  23.       dirname += inactiveselect[i].value;
  24.      } else if(start > 0) {
  25.       inactiveselect[start].parentNode.removeChild(inactiveselect[start]);
  26.      }
  27.     }
  28.    } else if(activeselect != document.getElementsByTagName('select')[document.getElementsByTagName('select').length-1]) {
  29.     dirname = '';
  30.     inactiveselect = document.getElementsByTagName('select');
  31.     start = 0;
  32.     taille = inactiveselect.length;
  33.     for(i=0; i<taille; i++) {
  34.      if(activeselect == inactiveselect[i]) {
  35.       dirname += inactiveselect[i].value + '/';
  36.       start = i+1;
  37.      } else if(start == 0) {
  38.       dirname += inactiveselect[i].value + '/';
  39.      } else if(start > 0) {
  40.       inactiveselect[start].parentNode.removeChild(inactiveselect[start]);
  41.      }
  42.     }
  43.     statement = 1;
  44.     request(readData);
  45.    } else {
  46.     dirname = '';
  47.     inactiveselect = document.getElementsByTagName('select');
  48.     start = 0;
  49.     taille = inactiveselect.length;
  50.     for(i=0; i<taille; i++) {
  51.      dirname += inactiveselect[i].value + '/';
  52.     }
  53.     statement = 1;
  54.     request(readData);
  55.    }
  56.   }
  57.   function getXMLHttpRequest() {
  58.    xhr = null;
  59.    if(window.XMLHttpRequest) {
  60.     return new XMLHttpRequest();
  61.    } else if(window.ActiveXObject) {
  62.     try {
  63.      return new ActiveXObject('Msxml2.XMLHTTP');
  64.     } catch(e) {
  65.      return new ActiveXObject('Microsoft.XMLHTTP');
  66.     }
  67.    } else {
  68.     alert('Erreur: votre navigateur ne supporte pas l\'objet XMLHTTPRequest...');
  69.     return null;
  70.    }
  71.   }
  72.   function request(callback) {
  73.    xhr = getXMLHttpRequest();
  74.    xhr.onreadystatechange = function() {
  75.     if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
  76.      statement = 0;
  77.      callback(xhr.responseText);
  78.     } else if(xhr.readyState < 4) {
  79.      document.getElementById('but').style.display = 'none';
  80.      document.getElementById('loader').style.visibility = 'visible';
  81.     }
  82.    };
  83.    xhr.open('POST', 'test.php', true);
  84.    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  85.    xhr.send('path='+dirname+'&file='+file+'&lister_dossier='+conf);
  86.   }
  87.   function readData(sData) {
  88.    if(sData == 'erreur') {
  89.     document.getElementById('loader').style.visibility = 'hidden';
  90.     document.getElementById('but').style.display = 'inline';
  91.     alert(xhr.responseText);
  92.    } else if(sData == 'ok') {
  93.     document.getElementById('loader').style.visibility = 'hidden';
  94.     document.getElementById('but').style.display = 'inline';
  95.     alert('fichier enregistré');
  96.    } else {
  97.     window.setTimeout('traitement('+xhr.responseText+')', 500);
  98.    }
  99.   }
  100.   function traitement(list) {
  101.    loader = document.getElementById('loader');
  102.    loader.style.visibility = 'hidden';
  103.    list = eval(list);
  104.    if(typeof(list[0]) != 'undefined') {
  105.     el = document.getElementsByTagName('form')[0];
  106.     parent = document.createElement('select');
  107.     parent.setAttribute('onChange', 'activeselect=this;dirname=dirname+\'/\'+this.value;conf=1;requete();');
  108.     el.appendChild(parent);
  109.     enfant = document.createElement('option');
  110.     enfant.setAttribute('value', ' ');
  111.     enfant.innerHTML = '   ';
  112.     parent.appendChild(enfant);
  113.     for(i=1; i<=list.length; i++) {
  114.      enfant = document.createElement('option');
  115.      enfant.setAttribute('value', list[i-1]);
  116.      enfant.innerHTML = list[i-1];
  117.      parent.appendChild(enfant);
  118.     }
  119.     but = document.getElementById('but');
  120.     el.appendChild(but);
  121.     el.appendChild(loader);
  122.     but.style.display = 'inline';
  123.    } else {
  124.     document.getElementById('but').style.display = 'inline';
  125.    }
  126.   }
  127.  </script>
  128. </head>
  129. <body>
  130.  <form name="test" onsubmit="statement=0;conf=0;requete();return false;">
  131.   <select onChange="activeselect=this;dirname=this.value;conf=1;requete();">
  132.    <option value=" ">   </option>
  133.    <option value="archives">archives</option>
  134.    <option value="Nouveau dossier">Nouveau dossier</option>
  135.   </select>
  136.   <button type="submit" onClick="statement=0;conf=0;requete();return false;" id="but">Envoyer !</button>
  137.   <img style="font-size: 13px; font-weight: bold; visibility: hidden;" alt="loading..." src="loader.gif" id="loader" />
  138.  </form>
  139. </body>
  140. </html>


 
 

Code :
  1. <?php
  2. function ScanDirectory($Directory) {
  3. $i = 0;
  4. $list_dir = array();
  5. $MyDirectory = opendir($Directory);
  6. while($Entry = @readdir($MyDirectory)) {
  7.  if(is_dir($Directory.'/'.$Entry) && $Entry != '.' && $Entry != '..') {
  8.   $list_dir[$i] = $Entry;
  9.   $i++;
  10.  }
  11. }
  12. closedir($MyDirectory);
  13. $list = json_encode($list_dir);
  14. echo $list;
  15. }
  16. if(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 1) {
  17. $path = './'.$_POST['path'];
  18. ScanDirectory($path);
  19. } elseif(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 0 && isset($_POST['file'])) {
  20. $path = './'.$_POST['path'];
  21. $file = $_POST['file'];
  22. echo 'ok';
  23. } else {
  24. echo 'erreur';
  25. }
  26. ?>


 
Il te reste à définir la variable "file" dans le html qui correspond au nom du fichier à enregistrer (y inclure l'extension).
Puis à traiter l'upload dans la partie du php :
 

Code :
  1. } elseif(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 0 && isset($_POST['file'])) {
  2. $path = './'.$_POST['path'];
  3. $file = $_POST['file'];
  4. //code upload
  5. echo 'ok';
  6. }

n°2207951
gasolina
Posté le 24-10-2013 à 14:14:31  profilanswer
 

D'accord merci je vais le faire

n°2207967
gasolina
Posté le 24-10-2013 à 15:05:15  profilanswer
 

avec  <input type="file" name="file" /> par exemple? pour le html

 

et un truc du genre pour le php

 

Code :
  1. // On définit notre répertoire cible
  2.   // On vérifie qu'il est accessible en écriture
  3.   if(!is_writable($path))
  4.     die('Impossible d\'écrire dans le répertoire cible.');
  5.   // On vérifie d'abord que des données ont bien été envoyées
  6.   if(!isset($_FILES['file']))
  7.     die('Aucune données');
  8.   // On finit par déplacer le fichier dans le répertoire cible
  9.   move_uploaded_file($_FILES['file']['tmp_name'],$path.$_FILES['file']['name']);


Message édité par gasolina le 24-10-2013 à 15:12:19
n°2207978
MaybeEijOr​Not
but someone at least
Posté le 24-10-2013 à 15:51:35  profilanswer
 

Oui pour le html :
 

Code :
  1. <input type="file" name="file" onChange="file=this.value;" />


 
 
Pour le php, je ne connais pas les méthodes d'upload, mais par contre n'oublie pas que là tu es sur de l'ajax donc le client envoie une requête vers le php, le php affiche un message, l'ajax récupère le message affiché et agit en fonction. Comme côté client l'ajax ne se contente pas d'afficher un message d'erreur (cf. récupération du chemin) alors tu dois côté client "détecter" le message renvoyé pour faire une action en fonction de ce dernier.
Du coup les messages que tu sors là dans ton php ne seront pas visibles par le client tant que tu ne les prends pas en charge côté client.
 
Tu as 2 manières de travailler, soit dans ton php tu echo des status que tu récupères côté client et tu affiches le message côté client en fonction du status, soit tu travailles dans ton php avec un status et un message d'erreur mais dans ce cas là tu es obligé d'encoder ces deux données en json, côté client tu récupères alors le status et le message qui va avec.
 
Bon je ne suis pas très clair. xD

n°2207986
gasolina
Posté le 24-10-2013 à 16:25:33  profilanswer
 

Si si je vois ce que tu veux dire mais le plus dur c'est de comment le faire ^^

n°2208140
gasolina
Posté le 25-10-2013 à 14:21:54  profilanswer
 

je vois pas trop comment faire, je continu de chercher des pistes

n°2208159
MaybeEijOr​Not
but someone at least
Posté le 25-10-2013 à 15:05:21  profilanswer
 

MaybeEijOrNot a écrit :

Code :
  1. function readData(sData) {
  2.    if(sData == 'erreur') {
  3.     document.getElementById('loader').style.visibility = 'hidden';
  4.     document.getElementById('but').style.display = 'inline';
  5.     alert(xhr.responseText);
  6.    } else if(sData == 'ok') {
  7.     document.getElementById('loader').style.visibility = 'hidden';
  8.     document.getElementById('but').style.display = 'inline';
  9.     alert('fichier enregistré');
  10.    } else {
  11.     window.setTimeout('traitement('+xhr.responseText+')', 500);
  12.    }
  13.   }


 

Code :
  1. if(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 1) {
  2. $path = './'.$_POST['path'];
  3. ScanDirectory($path);
  4. } elseif(isset($_POST['lister_dossier']) && $_POST["lister_dossier"] == 0 && isset($_POST['file'])) {
  5. $path = './'.$_POST['path'];
  6. $file = $_POST['file'];
  7. echo 'ok';
  8. } else {
  9. echo 'erreur';
  10. }



Message édité par MaybeEijOrNot le 25-10-2013 à 15:07:54
n°2208161
gasolina
Posté le 25-10-2013 à 15:19:16  profilanswer
 

Avoir les deux fonctions ensemble dans le php te fait pas bug la partie scandirectory?

n°2208166
MaybeEijOr​Not
but someone at least
Posté le 25-10-2013 à 15:55:24  profilanswer
 

What? Je n'ai qu'une fonction dans mon fichier.php, moi pas comprendre ta question.

n°2208168
gasolina
Posté le 25-10-2013 à 16:00:10  profilanswer
 

Au final dans ton php tu as les fonctions directory read et la fonction readdata?

n°2208190
MaybeEijOr​Not
but someone at least
Posté le 25-10-2013 à 16:35:50  profilanswer
 

Non, le readdata fait partie de l'ajax dans le html.

n°2208202
gasolina
Posté le 25-10-2013 à 17:09:46  profilanswer
 

d'accord excuse il reste donc à gérer le move upload


Message édité par gasolina le 25-10-2013 à 17:15:09
n°2208585
gasolina
Posté le 29-10-2013 à 16:06:39  profilanswer
 

tu penses qu'il faut gérer le move upload en ajax?


Message édité par gasolina le 29-10-2013 à 16:06:49
n°2208643
MaybeEijOr​Not
but someone at least
Posté le 29-10-2013 à 19:31:25  profilanswer
 

Comme tu veux...

n°2208645
gasolina
Posté le 29-10-2013 à 19:43:25  profilanswer
 

C'est que j'essaye dans le php mais rien ne veux marcher ^^ alors je me demande vers où aller pour finir ça :/

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Upload fichier avec choix dossier destination

 

Sujets relatifs
Extraire les donnees d'un fichier mdf[C] Comment sauvegarder lors d'un remplissage de fichier?
vérifier si un fichier a été modifiéfichier audio grâce à formulaire Access et Media Player
Patrons pour détecter les titres et les sous tires d'un fichier texte[PHP] Upload multiples : variables ne passent pas si trop de volume
Suppression d'un fichier sur le réseau par commande dosOuvrir un fichier Excel (vba)
Créer un fichier et l'envoyer en vbaInclure en php un texte contenu dans un fichier dropbox
Plus de sujets relatifs à : Upload fichier avec choix dossier destination


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR