Appliquer des fonctions à des fichiers php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Appliquer des fonctions à des fichiers php

par béka » 27 juin 2007, 09:48

merci, je vais retenter de me lancer dedans.

par jpaul » 27 juin 2007, 09:24

Hum,

Je n'ai pas vraiment le temps d'analyser tes scripts en détails et je ne peux pas l'installer, il manque les includes...
Tu dis que tu n'arrives pas à lier tes deux scripts. Je ne vois que 2 moyens :
- soit tu fais un formulaire qui appelle le script (avec les paramètres) pour afficher une autre page permettant de créer/supprimer des répertoires
- soit tu fais un include de ce script pour proposer directement les créations/ suppressions sur la même page

par béka » 27 juin 2007, 08:39

J'ai essayé de faire ce que tu as dis jpaul avec le formulaire et un champ caché mais sans succès. Ca ne marche pas. Je repars donc de zéro et j'arrive toujours pas à lier les deux.

par jpaul » 26 juin 2007, 16:14

J'imagine que tu arrives à récupérer le répertoire courant.
Pour le passer, tu peux utiliser un/des champ(s) hidden pour propager des variables que tu ne veux pas voir apparaître sur un formulaire.

Tu initialises le répertoire courant avec celui du script, tu la passes via un champ hidden.
Ensuite, tu le fais évoluer au fur et a mesure ou l'utilisateur se balade dans l'arborescence (toujours en le propogeant de pages en pages via un champ hidden).

Avec ça, je crois que tu as tout ce qui est nécessaire pour faire ce que tu veux...

Une autre solution serait de passer par les sessions pour mémoriser tes variables.

par béka » 26 juin 2007, 14:31

oui je comprends ce qu tu veux dire, ça me semble logique. Seulement, j'ai fais des essais et il n'y a rien qui marche. Je n'arrive pas à passer les noms des répertoires dans lesquels on se trouve pour pouvoir appliquer les différentes fonctions.

par jpaul » 26 juin 2007, 14:28

Bonjour,

Pour pouvoir faire des actions à partir d'une page générée, (a moins de faire de l'Ajax) il faut passer par un formulaire qui va appeler un script. Le script va récupérer les variables du formulaire et devra faire le boulot.

En général, j'utilise un script qui s'auto appelle (le formulaire pointe sur le script qui permet d'afficher le formulaire) et je commence par récupérer un variable action.
Si cette variable n'est pas présente, le script exécute le code qui génère la page de départ (qui affiche le formulaire de départ).
Si la variable est présente, elle conditionne un switch qui va brancher sur la portion de code qui permet de faire le traitement correspondant à la variable action.
Le switch peut :
- soit te brancher sur des fonctions qui sont codées dans le mêm fichier
- soit faire un include d'un fichier chargeant le code à exécuter

En espérant que ça t'aidera, bonne continuation.

Appliquer des fonctions à des fichiers php

par béka » 26 juin 2007, 13:40

Bonjour, voilà j'explique mon problème et là où je suis bloqué.
En fait, j'ai un script qui me permet d'afficher une arborescence dans le répertoire dans lequel nous nous trouvons. Ce script permet également de naviguer dans cette arborescence un peu de la même manière que windows.
voici le code pour ceci :
<?
//fichier qui permet la connexion au serveur et l'accès aux fonctions
include('../includes/config.php');

//fichier de langue
require ('../includes/language/french/explorer.php');

//début langage html
include ('../includes/header.php');

//on vérifie que l'utilisateur s'est bien identifié
//s'il s'agit d'un administrateur admin ou sadmin ou reader
if ((isset($_SESSION['admin'])) or (isset($_SESSION['sadmin'])) or (isset($_SESSION['reader'])))
{
?>

<!--script explorer.php-->
<head>
<script LANGUAGE="JavaScript">
parametres="toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,width=700,height=600,left=150,top=50";
function OuvrirFenetre(lien) {
   f=window.open(lien,"fenetre",parametres);
   f.focus();
}
</script>
</head>

<?
// url du script exécuté
$self=$_SERVER['PHP_SELF'];
// dirname() extrait le chemin de l'url
$chemin=dirname($self);
// getcwd() donne le chemin réel sur le système de fichier hôte
$rep=getcwd();
// pour récupérer les valeurs des paramètres éventuellement transmis par formulaire
if (isset($_POST['rep'])) {
 $rep=$_POST['rep'];
 $chemin=$_POST['ch'];
}
echo EXPLORER_ADRESS."<b>$chemin</b>";
$compt=0;
// $rep doit être un chemin de rép. réel sur le système : ne pas l'afficher
if( $dir = opendir($rep) ) {
  while( FALSE !== ($fich = readdir($dir)) ) {
  /* $fich est toujours un nom sans chemin d'accès !
   * il désigne un fichier ou un s-rép ou les pseudo-rép '.' ou '..'
   */
   // pour bloquer la remontée au dessus de la racine du site web
   if (($fich == "..") && ($chemin !="/$self/") ){
	 // $rep contient le chemin réel vers le rép. courant
	 chdir($rep);
	 // pour se déplacer au rép. parent
	 chdir("..");
	 // pour récupérer ainsi le nouveau chemin
	 $newrep=getcwd();
	 // calculer le nouveau chemin WEB en éliminant le dernier rép.
	 if (preg_match("#(\S+)/\S+$#",$chemin))
   {
	   $newchemin=preg_replace("#(\S+)/\S+$#", '$1', $chemin); 
     }
	 else
	   $newchemin = "/";
     // transmission de $rep et $chemin par champs cachés de formulaire
     echo "<form action='$self' method='post' >
	   <input type='hidden' name='rep' value='$newrep'>
	   <input type='hidden' name='ch' value='$newchemin'>
	   </form>";
     // activer le lien provoque le rechargement du script
     //echo dirname($_SERVER['PHP_SELF']);
     if ( dirname($_SERVER['PHP_SELF']) != $chemin)
     {
        echo "<a href='#' onclick='document.forms[0].submit();'>
  	   <img src='../images/style_dotdot.jpg' width='20' height='20' border='0' ><b>..</b></a>
  	   <br>";
     }
   }
   elseif ($fich != ".") {
     if (is_dir($rep."/".$fich)) {
     // pour compter les formulaires associés
     $compt++;
	 chdir($rep."/".$fich);
	 $newrep=getcwd();
	 $newchemin= $chemin."/".$fich;
     echo "<form action='$self' method='post' >
	   <input type='hidden' name='rep' value='".$newrep."'>
	   <input type='hidden' name='ch' value='".$newchemin."'>
	   </form>";
     
     echo "<a href='#' onclick='document.forms[$compt].submit();'>
	   <img src='../images/style_directory.jpg' width=20 height=20 border=0>$compt-$fich</a>
	   <br>";
	 }
   else {
     $url = $chemin."/".$fich;
 	 echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"javascript: OuvrirFenetre('$url');\">
     <img src='../images/style_file.jpg' width=20 height=20 border=0>$fich</a><br>";
   }
  }
 }
}
//footer
//include ('../includes/footer.php');

?>
<br /><br />
<!-- formulaire pour retourner à l'accueil de l'admin-->
  <form method="post" action="../home.php">
  <fieldset>
  <legend><? echo EXPLORER_RETURN_FORM; ?></legend>
  <p><input type="submit" name="retour" value="Retourner au menu d'administration" /></p>
  </fieldset>
  </form> 
  <!-- fin du formulaire de retour-->
<?
}
else
{
  header("Location: ../index.php"); //on l'a renvoi sur la page d'accueil
  exit();
}

?>
Maintenant, je voudrais que pour chaque répertoire ou sous-répertoire dans lequel l'utilisateur navigue, il puisse avoir la possibilité de créer un répertoire, en supprimer...
Pour ça, j'ai créé un script qui permet de le faire, voici le code :
<?
//fichier qui permet la connexion au serveur et l'accès aux fonctions
include('../includes/config.php');

//fichier de langue
require ('../includes/language/french/directory.php');

//début langage html
include ('../includes/header.php');

//on vérifie que l'utilisateur s'est bien identifié
//s'il s'agit d'un administrateur admin ou sadmin
if ((isset($_SESSION['admin'])) or (isset($_SESSION['sadmin'])))
{

  //on récupère tous les fichiers, qui sont dans le répertoire directory, 
  //on les stocke dans un tableau et on les affiche à l'écran
  if( (!isset($_POST['dirname_add'])) && (!isset($_POST['dirname_delete'])) )
  {
    //on définit la variable path
    $path = getcwd();
    //on appelle la fonction
    //list_dir($path);
  }


  //création d'un répertoire
  if(isset($_POST['dirname_add']))
  {
    $path = getcwd();
    $dirname = $_POST['dirname_add'];
    //on supprime les accents
    $dirname = strtr($dirname, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
    mkdir_recursive($path.'/'.$dirname);
    //list_dir($path);
  }
  
  //suppression d'un répertoire
  elseif(isset($_POST['dirname_delete']))
  {
    $path = getcwd();
    $dirname = $_POST['dirname_delete'];
    //on supprime les accents
    $dirname = strtr($dirname, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");    
    full_rmdir($path.'/'.$dirname);
    //list_dir($path);
  }  
?>
  
  
  <!-- formulaire de création d'un répertoire-->
  <form method="post" action="directory.php">
  <fieldset>
    <legend><? echo DIRECTORY_FORM_CREATE; ?></legend>
    <p><label for="dirname_add"><? echo DIRECTORY_NAME_CREATE; ?></label><input type="text" name="dirname_add" /></p>
    <p><input type="submit" name="valider" value="Créer le répertoire" /></p>
  </fieldset>
  </form>
  <!-- fin de formulaire de création de répertoire-->
  
<br />

  <!-- formulaire de suppression d'un répertoire-->
  <form name="suppr" method="post" action="directory.php" onSubmit="return confirmation();">
  <fieldset>
    <legend><? echo DIRECTORY_FORM_DELETE ?></legend>
    <p><label for="dirname_delete"><? echo DIRECTORY_NAME_DELETE; ?></label><input type="text" name="dirname_delete" /></p>
    <p><input type="submit" name="valider" value="Supprimer le répertoire" /></p>
  </fieldset>
  </form>
  <!-- fin de formulaire de suppression de répertoire-->
  
<br /><br />
  
<!-- formulaire pour retourner à l'accueil de l'admin-->
  <form method="post" action="../home.php">
  <fieldset>
  <legend><? echo DIRECTORY_RETURN_FORM; ?></legend>
  <p><input type="submit" name="retour" value="Retourner au menu d'administration" /></p>
  </fieldset>
  </form> 
  <!-- fin du formulaire de retour-->
<?	
}

//si la personne n'a pas le droit d'accéder à cette page
/*}
else
{
  header("Location: ../index.php"); //on l'a renvoi sur la page d'accueil
  exit();
}*/

//footer
include ("../includes/footer.php");
?>
Seulement, voilà mon problème est que je n'arrive pas à mettre en relation ces deux scripts et ainsi les lier pour obtenir ce que j'ai expliqué plus haut.

Pouvez-vous m'aider ?