Liste déroulante fichier xml [Résolu]

Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
- - Dernière réponse : lesloup
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
- 1 sept. 2012 à 00:15
Bonjour à tous & toutes !
Je suis débutant, déja , mais j'essaye de faire une lister des fichiers xml à partir d'un FTP !

Voici le code :
<?php

function listing($repertoire){

$fichier = array();

if (is_dir($repertoire)){

$dir = opendir($repertoire);                              //ouvre le repertoire courant désigné par la variable
while(false!==($file = readdir($dir))){                             //on lit tout et on récupere tout les fichiers dans $file

if(!in_array($file, array('.','..'))){            //on eleve le parent et le courant '. et ..'
$siteURL="http://www.lesdeglingosdutarmac.fr/test_result/";
$page = $file;                            //sort l'extension du fichier
$page = explode('.', $page);
$nb = count($page);
$nom_fichier = $page[0];
for ($i = 1; $i < $nb-1; $i++){
$nom_fichier .= '.'.$page[$i];
}
if(isset($page[1])){
$ext_fichier = $page[$nb-1];
if(!is_file($file)) { $file = '/'.$file; }
}
else {
if(!is_file($file)) { $file = '/'.$file; }            //on rajoute un "/" devant les dossier pour qu'ils soient triés au début
$ext_fichier = '';
}

if($ext_fichier != 'php' and $ext_fichier != 'html') {        //utile pour exclure certains types de fichiers à ne pas lister
array_push($fichier, $file);
}
}
}
}

natcasesort($fichier);                                    //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse

foreach($fichier as $value) {
          echo "<form name='standings' action='" . $siteURL . "/resultsFiles_transform.php?file=".$value."' method='POST'>\n";

echo '<select name="standings" onchange="document.standings.submit()"><option selected="selected">Choisir une course</option><option value="'.$value. '">'.$value. '</option></select></form>
';

}

}

//exemple d'utilisation :

listing('.');        //chemin du dossier


?>

$Value vaut le nom du fichier
On doit utiliser une boucle (while je pense ) mais je n'arrive toujours pas à faire
Une boucle, car actuellement, la liste déroulante est répéter plusieurs fois...
le formulaire doit rediriger vers la page http://www.lesdeglingosdutarmac.fr/test_result/resultsFiles_transform.php?file=$Value à la sélection du fichier.xml

Je vous remerci de votre aide :)
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
3
Merci
Salut,

Sort le form de la boucle, car là tu créé un nouveau formulaire à chaque fois, ce qui n'est pas ce que tu veux. Et sinon, tu devrais utiliser urlencode() sur le nom du fichier lorsque tu créé l'url.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de TychoBrahe
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
3
Merci
Ce soucis n'est visible que sous chrome pour une bonne raison : par défaut il considère l'encodage comme étant de l'ISO-8859-1. Bref, la faute est tienne, tu n'as pas bien déclaré l'encodage et , en plus, tu as des caractères assez louches. Soit dit en passant, il manque tout le début du html...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de TychoBrahe
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
0
Merci
<?php

function listing($repertoire){

$fichier = array();

if (is_dir($repertoire)){

$dir = opendir($repertoire);                              //ouvre le repertoire courant désigné par la variable
while(false!==($file = readdir($dir))){                             //on lit tout et on récupere tout les fichiers dans $file

if(!in_array($file, array('.','..'))){            //on eleve le parent et le courant '. et ..'
$siteURL="http://www.lesdeglingosdutarmac.fr/test_result";
$page = $file;                            //sort l'extension du fichier
$page = explode('.', $page);
$nb = count($page);
$nom_fichier = $page[0];
for ($i = 1; $i < $nb-1; $i++){
$nom_fichier .= '.'.$page[$i];
}
if(isset($page[1])){
$ext_fichier = $page[$nb-1];
if(!is_file($file)) { $file = '/'.$file; }
}
else {
if(!is_file($file)) { $file = '/'.$file; }            //on rajoute un "/" devant les dossier pour qu'ils soient triés au début
$ext_fichier = '';
}

if($ext_fichier != 'php' and $ext_fichier != 'html') {        //utile pour exclure certains types de fichiers à ne pas lister
array_push($fichier, $file);
}
}
}
}

natcasesort($fichier);                                    //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
  echo "<form name='standings' action='" . $siteURL . "/resultsFiles_transform.php? method='POST'>\n";
  echo "<select  onchange='document.standings.submit()' name='file'=''>";
foreach($fichier as $value) {

echo '<option selected="selected">Choisir une course</option><option value="'.$value. '">'.$value. '</option></select></form>
';
}

}

//exemple d'utilisation :

listing('.');        //chemin du dossier


?>


Merci TychoBrahe !

Manque plus qu'une seule chose, enfin deux !
Pourquoi je n'ai qu'un seul fichier lister dans la liste déroulante ?
http://www.lesdeglingosdutarmac.fr/test_result/resultsFiles/ftp.php

Optionnel :
Comment faire pour que la page s'actualise et que le XML s'affiche en dessous
et quand je selectionne un autre fichier xml. Le dernier sélectionné s'enlève et que le nouveau sélectionné apparaisse

Merci !
Commenter la réponse de lesloup
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
0
Merci
<?php

function listing($repertoire){

$fichier = array();

if (is_dir($repertoire)){

$dir = opendir($repertoire); //ouvre le repertoire courant désigné par la variable
while(false!==($file = readdir($dir))){ //on lit tout et on récupere tout les fichiers dans $file

if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
$siteURL="http://www.lesdeglingosdutarmac.fr/test_result";
$page = $file; //sort l'extension du fichier
$page = explode('.', $page);
$nb = count($page);
$nom_fichier = $page[0];
for ($i = 1; $i < $nb-1; $i++){
$nom_fichier .= '.'.$page[$i];
}
if(isset($page[1])){
$ext_fichier = $page[$nb-1];
if(!is_file($file)) { $file = '/'.$file; }
}
else {
if(!is_file($file)) { $file = '/'.$file; } //on rajoute un "/" devant les dossier pour qu'ils soient triés au début
$ext_fichier = '';
}

if($ext_fichier != 'php' and $ext_fichier != 'html') { //utile pour exclure certains types de fichiers à ne pas lister
array_push($fichier, $file);
}
}
}
}

natcasesort($fichier); //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
echo "<form name='standings' action='" . $siteURL . "/resultsFiles_transform.php? method='POST'>\n";
echo "<select onchange='document.standings.submit()' name='file'=''>";
echo '<option selected="selected">Choisir une course</option>';

foreach($fichier as $value) {

echo '<option value="'.$value. '">'.$value. '
';
}
echo '</option></select></form>';

}

//exemple d'utilisation :

listing('.'); //chemin du dossier


?>

Hop pardon double post !
Correction du code !
Correction du problème pour la liste des fichiers !


Peut on voir le point optionnel ?
Peut on afficher le fichier xml sous la liste déroulante ?
Commenter la réponse de lesloup
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
Salut,

Correction du code !

Fais gaffe, tu as sortit le </option> alros que tu n'aurais pas du.

Comment faire pour que la page s'actualise et que le XML s'affiche en dessous
et quand je selectionne un autre fichier xml. Le dernier sélectionné s'enlève et que le nouveau sélectionné apparaisse

Déjà, fais pointer le formulaire vers la même page. Ensuite, si on t'a passé un nom de fichier xml via ce formulaire, alors tu l'affiche. La manière de l'afficher va dépendre de ce que tu veux faire.
Commenter la réponse de TychoBrahe
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
0
Merci
http://www.lesdeglingosdutarmac.fr/test_result/resultsFiles_transform.php?file=2006_02_18_18_05_58-36SR.xml
Exactement ça mais un problème est apparu, l'apparition de AAAAA (mes fichiers sont bien encodage UTF8)
Mais je pense que ça vient de la transformation !

Merci pour la balise option c'est corrigé
Voici la page php ou est affiché la liste déroulante avec un simple include.
Cela fonctionne mais je voudrais enlever ces fichier AAAAA
Merci
<? include("./config.php"); ?>

<!--HEADER-->
<center>
<hr color="Red"  width="90%" size="1" align="center">
,
<? echo $serverName ?>,
<? echo $copyright_zeXav ?>

<hr color="Red"  width="90%" size="1" align="center">
</center>
<!--END HEADER-->




<?php

$file=$_GET['file'];
$chemin=$dir_ResultsFiles.$file;
 include('http://www.lesdeglingosdutarmac.fr/test_result/resultsFiles/ftp.php');
if(file_exists($chemin) and eregi(".xml",$chemin)){
if ((PHP_VERSION>='5')&&extension_loaded('xsl'))
 require_once('xslt-php4-to-php5.php');
$ficXsl="rFactorParser_zeXav.xsl";

$xh = xslt_create();
//xslt_set_encoding($xh,"ISO-8859-1");

$file=fopen($chemin,"r");
$xml=fread($file,filesize($chemin));
fclose($file);

$file=fopen($ficXsl,"r");
$xsl=fread($file,filesize($ficXsl));
fclose($file);

$xml=str_replace('encoding="utf-8"','encoding="ISO-8859-1"',$xml);

//Caractères à la fin du fichier
$xml=ereg_replace("/rFactorXML>.*","/rFactorXML>",$xml);
$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);

$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

if (!$result) {
die(printf("<center>! Error present XML file : $chemin --- [%d]: %s !</center>",xslt_errno($xh), xslt_error($xh)));
}

xslt_free($xh);

print "$result";

}else{
die("<center>! Error find XML file : $chemin !</center>");
}


?>
Commenter la réponse de lesloup
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
Salut,

Exactement ça mais un problème est apparu, l'apparition de AAAAA (mes fichiers sont bien encodage UTF8)

Où donc ? Pour ma part je n'en vois pas. Poste donc un screenshot si le problème est toujours d'actualité.
Commenter la réponse de TychoBrahe
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
0
Merci
Ici :http://www.lesdeglingosdutarmac.fr/test_result/resultsFiles_transform.php?file=2006_02_18_18_05_58-36SR.xml

Je remet pas le contenu du fichier transform.php
c'est exactement ce que je veux (bon c'est pas très propre comme code mais ça fonctionne )
Sauf l'apparition de caractère de je ne sais où..peut être dans le fichier transform qui parle d'iso 8859-1 & d'UTF8

merci
Commenter la réponse de lesloup
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
Je recommence : chez moi je ne vois pas de problème. Si c'est bien un problème d'encodage que tu as, est-ce que tu peux prendre un screenshot afin de me le montrer stp ? Parce que n'ayant pas le problème, je ne peux rien dire dessus.
Commenter la réponse de TychoBrahe
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
0
Merci
J'ai compris, il y a un soucis avec le navigateur Google chrome

Voilou
Ce bug n'apparait pas dans Internet explorer ni Mozilla firefox
Bizarre, bizarre

Merci :)
Commenter la réponse de lesloup
Messages postés
20
Date d'inscription
dimanche 28 octobre 2007
Dernière intervention
1 septembre 2012
0
Merci
<? include("./config.php"); ?>

<!--HEADER-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />
<center>
<hr color="Red"  width="90%" size="1" align="center">
,
<? echo $serverName ?>,
<? echo $copyright_zeXav ?>

<hr color="Red"  width="90%" size="1" align="center">
</center>
</head>
<!--END HEADER-->




<?php

$file=$_GET['file'];
$chemin=$dir_ResultsFiles.$file;

if(file_exists($chemin) and eregi(".xml",$chemin)){
if ((PHP_VERSION>='5')&&extension_loaded('xsl'))
 require_once('xslt-php4-to-php5.php');
$ficXsl="rFactorParser_zeXav.xsl";

$xh = xslt_create();
//xslt_set_encoding($xh,"ISO-8859-1");

$file=fopen($chemin,"r");
$xml=fread($file,filesize($chemin));
fclose($file);

$file=fopen($ficXsl,"r");
$xsl=fread($file,filesize($ficXsl));
fclose($file);

$xml=str_replace('encoding="utf-8"','encoding="ISO-8859-1"',$xml);
 include('http://www.lesdeglingosdutarmac.fr/test_result/resultsFiles/ftp.php');
//Caractères à la fin du fichier
$xml=ereg_replace("/rFactorXML>.*","/rFactorXML>",$xml);
$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);

$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

if (!$result) {
die(printf("<center>! Error present XML file : $chemin --- [%d]: %s !</center>",xslt_errno($xh), xslt_error($xh)));
}

xslt_free($xh);

print "$result";

}else{
die("<center>! Error find XML file : $chemin !</center>");
}


?>

</html>



Que je suis bête n'est ce pas ?


Merci beaucoup
Commenter la réponse de lesloup

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.