Bonsoir,
Je me suis dis, tiens, je vais essayer d'aider quelqu'un en attendant qu'on m'aide sur ma question, mais franchement :
1- c'est inbouffable la présentation de ton code : la partie javascript n'a même pas de coloration syntaxique vu qu'elle est incluse dans du php
2- tu ne dis même pas où ça bloque : oriente un peu ta question sur le point précis du blocage ![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
Bon je suis, sympa, j'ai mis la partie hmtl/js en exergue, refait l'indentation, et séparé les fonctions par des lignes vides...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <body>
<div>
<label>Dossier:</label>
<select name="form[dir]" onChange="activeselect=this;dirname=this.value;conf=1;requete();">
<option value=" "> </option>
<option value="Clients">Clients</option>
<option value="Technologies">Technologies</option>
<option value="Outils">Outils</option>
</select>
<button onClick="dirname=this.value;conf=0;requete();" id="but">Envoyer !</button>
<img style="font-size: 13px; font-weight: bold; visibility: hidden;" alt="loading..." src="loader.gif" id="loader" />
</div>
<form action="test.php" method="post">
<div>
<label>File:</label>
<input name="form[file]" type="file" />
</div>
</form>
</body> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| function requete() {
if (typeof(statement) != 'undefined' && statement == 1) {
xhr.abort();
alert('Une requête a déjà été envoyée!');
return false;
} else if (dirname == ' ') {
alert('Sélectionnez un dossier');
} else if (activeselect.value == ' ') {
inactiveselect = document.getElementsByTagName('select');
start = 0;
dirname = '';
taille = inactiveselect.length;
for(i=0; i<taille; i++) {
if(activeselect == inactiveselect[i]) {
start = i+1;
} else if(start == 0 && inactiveselect[i].value != ' ') {
dirname += inactiveselect[i].value;
} else if(start > 0) {
inactiveselect[start].parentNode.removeChild(inactiveselect[start]);
}
}
} else if(activeselect != document.getElementsByTagName('select')[document.getElementsByTagName('select').length-1]) {
dirname = '';
inactiveselect = document.getElementsByTagName('select');
start = 0;
taille = inactiveselect.length;
for(i=0; i<taille; i++) {
if(activeselect == inactiveselect[i]) {
dirname += inactiveselect[i].value + '/';
start = i+1;
} else if(start == 0) {
dirname += inactiveselect[i].value + '/';
} else if(start > 0) {
inactiveselect[start].parentNode.removeChild(inactiveselect[start]);
}
}
statement = 1;
request(readData);
} else {
dirname = '';
inactiveselect = document.getElementsByTagName('select');
start = 0;
taille = inactiveselect.length;
for(i=0; i<taille; i++) {
dirname += inactiveselect[i].value + '/';
}
statement = 1;
request(readData);
}
}
function getXMLHttpRequest() {
xhr = null;
if(window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if(window.ActiveXObject) {
try {
return new ActiveXObject('Msxml2.XMLHTTP');
} catch(e) {
return new ActiveXObject('Microsoft.XMLHTTP');
}
} else {
alert('Erreur: votre navigateur ne supporte pas l\'objet XMLHTTPRequest...');
return null;
}
}
function request(callback) {
xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
statement = 0;
callback(xhr.responseText);
} else if(xhr.readyState < 4) {
document.getElementById('but').style.display = 'none';
document.getElementById('loader').style.visibility = 'visible';
}
};
alert(dirname);
xhr.open('POST', 'test.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('path='+dirname+'&lister_dossier='+conf);
}
function readData(sData) {
if(sData == 'erreur') {
document.getElementById('loader').style.visibility = 'hidden';
document.getElementById('but').style.display = 'none';
alert(xhr.responseText);
} else {
window.setTimeout('traitement('+xhr.responseText+')', 500);
}
}
function traitement(list) {
loader = document.getElementById('loader');
loader.style.visibility = 'hidden';
list = eval(list);
if(typeof(list[0]) != 'undefined') {
el = document.getElementsByTagName('form')[0];
parent = document.createElement('select');
parent.setAttribute('onChange', 'activeselect=this;dirname=dirname+\'/\'+this.value;conf=1;requete();');
el.appendChild(parent);
enfant = document.createElement('option');
enfant.setAttribute('value', ' ');
enfant.innerHTML = ' ';
parent.appendChild(enfant);
for(i=1; i<=list.length; i++) {
enfant = document.createElement('option');
enfant.setAttribute('value', list[i-1]);
enfant.innerHTML = list[i-1];
parent.appendChild(enfant);
}
but = document.getElementById('but');
el.appendChild(but);
el.appendChild(loader);
document.getElementById('but').style.display = 'inline';
} else {
document.getElementById('but').style.display = 'inline';
}
} |
Plus qu'à regarder de plus près maintenant...
Déjà, de base, dans 'test.html' :
1- il manque une fermeture d'accolade ligne 5 de test.html
Si tu faisais des indentations correctes, tu l'aurais vu...
2- cette instruction IF n'est pas logique : tu demandes que si $_POST['but'] n'est PAS défini, tu l'assignes à $but
3- tu ne fais rien avec $but....
4- et d'ailleurs, que fout du code php dans un fichier html ???
Ensuite :
- ta requête gagnerait en clarté (et en sécurité d'exécution cf variables locales) comme ceci :
function requete( dirname, conf, activeselect ) {...}
Pour le reste, je ne pense pas être assez pointu pour t'aider plus.
EDIT : j'ai déterré un topic de plus de 6 semaines moi...
Partager