cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
Modifié le 11 nov. 2017 à 19:37
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
15 nov. 2017 à 17:36
Bonjour le forum,
Pour bien commencer, j'espère ne pas mettre trompé de forum (Javascript ou php).
Merci d'avance à un bienveillant modérateur de déplacer ce post dans le forum adéquat si c'est le cas !!!
Préambule:
Pour m'initier au Javascript et au PHP (cause job), j'essaie de transformer une de mes applis VB.Net (Connexion Internet sur host et download de fichiers sur mon localhost).
Mon nouveau script actuel en test (Application.php):
<!DOCTYPE html>
<html>
<head>
<title> Test jean-marc </title>
<meta charset="utf-8" />
<script language="javascript" type="text/javascript">
//--- variables globales ---
var myselect=null; // objet global
var url = "http://console-monhostdistant/export/clientValidation.php?cli=";
var pathoutfile = "http://localhost/test/ID-Mon/Fichiers%20Client/";
//--- fonction appelée au chargement de la page
window.onload = function () {
myselect=document.getElementById("ListeClient")
// for (var i=0; i<myselect.options.length; i++){
// print("Option index "+i + ":" + myselect.options[i].text + " (" + myselect.options[i].value + ")")
// }
// fonction de gestion d'un changement select
myselect.onchange=function () {
var index=this.selectedIndex;
var str=this.options[index].text;
if (this.selectedIndex > 1) {
document.body.appendChild(document.createElement("br"));
var res = str.split(" : ");
print ("Votre sélection -> Contrat " + res[0]);
print ("Téléchargement du fichier en cours");
//downloadURI(url + res[0], pathoutfile);
//download (url, pathoutfile);
//window.location.href = url + res[0];
} else if (str = "Tous les contrats") {
if (this.selectedIndex == 1) {
document.body.appendChild(document.createElement("br"));
print ("Votre sélection -> " + str);
var len = document.getElementById("ListeClient").length;
print ("Téléchargement des " + (len-2) + " fichiers en cours");
}
}
}
}
//---- fonctions ----
function print(textIn) {
var txt=textIn;
var newtext = document.createTextNode(txt);
document.body.appendChild(newtext);
document.body.appendChild(document.createElement("br"));
document.body.appendChild(newtext);
} // fin print
function downloadURI(uri, name) {
var link = document.createElement("a");
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
} // fin downloadURI
function download(url, outfile) {
var txturl="check url -> " + url;
var newtexturl = document.createTextNode(txturl);
document.body.appendChild(newtexturl);
document.body.appendChild(document.createElement("br"));
document.body.appendChild(newtexturl);
var txtoutfile="check outfile -> " + outfile;
var newtextoutfile = document.createTextNode(txtoutfile);
document.body.appendChild(newtextoutfile);
document.body.appendChild(document.createElement("br"));
document.body.appendChild(newtextoutfile);
} // fin download
</script>
</head>
<!-- Debut Corps de page -->
<body >
<H4>Download fichier ID-Mon regroupant les fiches d'un contrat</H4></title>
<?php
session_start ();
$login = $_POST['login'];
$pwd = $_POST['pwd'];
$url = "http://$login:$pwd@console-monhostdistant/id/EquipementListe.do";
// Récupération de la page Web dans un tableau
if (! $lines = file($url)){
$_SESSION['error'] = "Login ou mot de passe incorrect";
header('Location: ' . $_SERVER['HTTP_REFERER']);
}
$results = array();
$search = "document.location='/id/EquipementListe.do?cli=";
// parcours des données
foreach($lines as $key => $val) {
// stockage des résultats positifs
if (strpos($val,$search)!==false){
$newstring = substr($val, -8,3);
// print_r($val . '</br>');
// print_r($newstring . '</br>');
// print_r($lines[$key+1] . '</br>');
// print_r('</br>');
switch ($newstring) {
// Omission de certains contrats
case 'XXX': break; case 'AS0': break; case 'AS2': break; case 'AS3': break;
case 'AS4': break; case 'ASS': break; case 'CPS': break; case 'CRZ': break;
default:
// On récupère le contenu de la ligne +1 du tableau
$results[] = $lines[$key+1] . '</br>';
}
}
}
// Suppression des doublons et tri alphabétique
$array_client = array_unique ($results);
sort($array_client);
// print_r($array_client);
?>
<!-- Création de la liste déroulante -->
<select id="ListeClient">
<?php
// Initialisation du header
echo "\t",'<option value="', "Choix",'"', "label=","Choix", '>', "Choix" ,'</option>',"\n";
echo "\t",'<option value="', "Tous les contrats", '"', "label=", "Tous les contrats", '>', "Tous les contrats" ,'</option>',"\n";
// Parcours du tableau des clients
for ($numero = 0; $numero < count($array_client); $numero++){
echo "\t",'<option value="', $array_client[$numero] ,'"', "label=",$array_client[$numero], $array_client[$numero] ,'</option>',"\n";
}
?>
</select>
</body>
</html>
Prévisualisation du post, l'indentation n'est pas terrible !!!
OK:
Connexion à mon url, création de la liste déroulante (ex ListBox) et click sur celle-ci.
NOK:
Avec la fonction "downloadURI", le download m'ouvre la fenêtre de téléchargement du fichier avec enregistrement dans mon path local "Download". Ce que je ne souhaite pas car si selection de "Tous les contrats", cela devra enchainer sur une centaine de download.
Est-il possible de faire ce(s) download(s) en mode hidden en précisant mon répertoire de destination (var pathoutfile) ???
Merci d'avance de vos réponses et de votre indulgence pour ce premier script en Javascript/Php.
jean-marc
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Si ton but est plutôt que les fichiers se téléchargent sur le pc de l'utilisateur ... dans ce cas il serait pas mal de les récupérer sur le serveur, de générer un zip avec le (ou les )fichier(s) à récupérer puis à lancer l'upload. (là encore ça se fait en PHP .. aussi bien pour la création du zip que pour l'ouverture de la fenêtre de download.
Pour créer un zip, par exemple:
<?php
<?php
$zipFileName = "monfichier.zip";
$zip = new ZipArchive();
if($zip->open($zipFileName, ZipArchive::CREATE)){
// Ajout d’un fichier dans le zip
$zip->addFile('Fichier.txt');
//Fermeture de l'archive.
$zip->close();
}else{
echo 'Impossible d'ouvrir "Zip.zip<br/>';
}
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 Modifié le 11 nov. 2017 à 19:59
Bonsoir Jordane,
Merci de tes conseils.
Je n'ai pas les droits pour créer un zip sur le serveur distant.
Via url je peux télécharger x fichiers.
En VB.Net, je faisais:
Async Function DownloadFile(trigramme As String) As Task
Dim file As String = pathroot & "Client-" & trigramme & ".xlsx"
If System.IO.File.Exists(file) = True Then
System.IO.File.Delete(file)
End If
Await WC.DownloadFileTaskAsync(New Uri(URL_FileName & trigramme), file)
End Function
transfert, sans ouvrir de fenêtre de confirmation, le fichier YYY-Production.xlsx du server distant vers mon localhost mais dès l'ouverture du formulaire.
Je ne sais pas comment envoyer cette commande quand je suis à l'étape du select de la liste déroulante et indiquer en paramètre le trigramme du contrat à la place YYY.
jean-marc
jordane45
Messages postés37733Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 1 octobre 2023342 12 nov. 2017 à 17:21
$YYY étant une variable contenant la valeur à utiliser
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827
>
jordane45
Messages postés37733Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 1 octobre 2023 12 nov. 2017 à 17:52
Bonjour Jordane,
Merci du temps consacré à me lire et à me répondre.
Je me suis mal exprimé. Je ne sais pas comment déclencher ce transfert.
A l'ouverture de mon formulaire:
- je télécharge un fichier qui me permet de créer une liste déroulante dynamique;
- c'est au click sur l'un des items de cette listbox que je souhaite déclencher mon (ou mes) transfert(s).
// fonction de gestion d'un changement select
myselect.onchange=function () {
var index=this.selectedIndex;
var str=this.options[index].text;
if (this.selectedIndex > 1) {
document.body.appendChild(document.createElement("br"));
var res = str.split(" : ");
print ("Votre sélection -> Contrat " + res[0]);
print ("Téléchargement du fichier " + res[0] + "-Production.xlsx en cours");
// ICI download du fichier du contrat sélectionné
// download (url + res[0], pathoutfile + res[0] + "-Production.xlsx");
} else if (str = "Tous les contrats") {
if (this.selectedIndex == 1) {
var contrats = document.getElementById("ListeClient");
var len = document.getElementById("ListeClient").length;
document.body.appendChild(document.createElement("br"));
print ("Votre sélection -> " + str);
print ("Téléchargement des " + (len-2) + " fichiers en cours");
var counter = 0;
for (let item of contrats) {
if (counter > 1) {
var res = item.value.split(" : ");
print (res[0]);
// ICI download du fichier du contrat "item"
// download (url + res[0], pathoutfile + res[0] + "-Production.xlsx");
}
counter++;
} // fin for
} // fin if
} // fin if ... else
} // fin myselect.onchange=function ()
} // fin window.onload = function ()
Je ne sais pas comment déclarer ce transfert dans le body.
jordane45
Messages postés37733Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 1 octobre 2023342
>
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018 12 nov. 2017 à 18:07
Là tu as deux choix.
Soit tu veux bien que ta page se rafraichisse... et dans ce cas là tu peux simplement mettre ton select dans une balise FORM et déclencher le submit lors du choix (tu peux le faire en javascript).
Soit tu ne veux pas de refresh... et dans ce cas là il te faudra utiliser de l'ajax (le plus simple étant via jquery). (déclenché aussi via le onchange de ton select)