Upload fichier avec choix dossier destination

Upload fichier avec choix dossier destination - PHP - Programmation

Marsh Posté le 16-10-2013 à 15:57:01    

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:
 

Reply

Marsh Posté le 16-10-2013 à 15:57:01   

Reply

Marsh Posté le 16-10-2013 à 20:57:58    

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.

Reply

Marsh Posté le 16-10-2013 à 23:53:58    

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.

Reply

Marsh Posté le 18-10-2013 à 14:23:35    

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

Reply

Marsh Posté le 18-10-2013 à 14:35:31    

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

Reply

Marsh Posté le 18-10-2013 à 15:01:54    

Merci :)

Reply

Marsh Posté le 18-10-2013 à 16:14:40    

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.

Reply

Marsh Posté le 18-10-2013 à 16:26:36    

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

Reply

Marsh Posté le 21-10-2013 à 09:25:35    

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

Reply

Marsh Posté le 21-10-2013 à 11:20:26    

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
Reply

Marsh Posté le 21-10-2013 à 11:20:26   

Reply

Marsh Posté le 21-10-2013 à 15:50:44    

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>

Reply

Marsh Posté le 21-10-2013 à 16:51:33    

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
Reply

Marsh Posté le 21-10-2013 à 16:58:40    

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

Reply

Marsh Posté le 21-10-2013 à 21:44:18    

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
Reply

Marsh Posté le 21-10-2013 à 22:33:36    

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
Reply

Marsh Posté le 22-10-2013 à 00:10:48    

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
Reply

Marsh Posté le 22-10-2013 à 09:11:36    

Tu es un chef :jap:

Reply

Marsh Posté le 22-10-2013 à 16:35:31    

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

Reply

Marsh Posté le 22-10-2013 à 16:43:10    

Le rêve des malwares. :/

Reply

Marsh Posté le 22-10-2013 à 16:54:20    

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
Reply

Marsh Posté le 22-10-2013 à 21:23:04    

Reply

Marsh Posté le 23-10-2013 à 09:46:33    

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

Reply

Marsh Posté le 23-10-2013 à 14:45:54    

Dans dirname.

Reply

Marsh Posté le 23-10-2013 à 14:47:19    

Merci ;)

Reply

Marsh Posté le 23-10-2013 à 16:56:44    

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
Reply

Marsh Posté le 23-10-2013 à 21:51:07    

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. }

Reply

Marsh Posté le 24-10-2013 à 14:14:31    

D'accord merci je vais le faire

Reply

Marsh Posté le 24-10-2013 à 15:05:15    

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
Reply

Marsh Posté le 24-10-2013 à 15:51:35    

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

Reply

Marsh Posté le 24-10-2013 à 16:25:33    

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

Reply

Marsh Posté le 25-10-2013 à 14:21:54    

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

Reply

Marsh Posté le 25-10-2013 à 15:05:21    

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
Reply

Marsh Posté le 25-10-2013 à 15:19:16    

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

Reply

Marsh Posté le 25-10-2013 à 15:55:24    

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

Reply

Marsh Posté le 25-10-2013 à 16:00:10    

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

Reply

Marsh Posté le 25-10-2013 à 16:35:50    

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

Reply

Marsh Posté le 25-10-2013 à 17:09:46    

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


Message édité par gasolina le 25-10-2013 à 17:15:09
Reply

Marsh Posté le 29-10-2013 à 16:06:39    

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


Message édité par gasolina le 29-10-2013 à 16:06:49
Reply

Marsh Posté le 29-10-2013 à 19:31:25    

Comme tu veux...

Reply

Marsh Posté le 29-10-2013 à 19:43:25    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed