formulaire multicritere de fichier pdf (par le nom de ces derniers)

formulaire multicritere de fichier pdf (par le nom de ces derniers) - PHP - Programmation

Marsh Posté le 26-01-2009 à 12:52:04    

bjr
 
j'ai écrit ce code qui grace a 5 critères permet de chercher un fichier pdf, on n'est pas obligé de rentrer les 5 criteres ...mais bon j'ai un souci c'est pas vraiment ce que je voulais, je m'explique les noms des fichier pdf sont de cette forme SECXX_TYP_REF_OBJET_DATE
 
au depart j'aivais ca:
grace a UN critere je pouvais avoir les fichiers correspondant au critere donné...
 
 
Code : PHP
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
 
 
    <head>
 </head>
  <body>
 
 <?php
 
 if (isset($_POST['section'])) // Si la variable existe
      { $posi = $_POST['position'] - 1;
     $dossier = 'Courrier/' ;
     $list = scandir($dossier);   //scan le dossier Courrier
     foreach ($list as $file) //identique a for mais specifié au tableau
       { $divfichier = explode('_',$file);
        if(preg_match('`'.$_POST['section'].'`', $divfichier[$posi])){
             echo '<a href="'.$file.'">'.$file.'</a><br/>';
      }
 }
}
 
else // La variable n'existe pas encore
{
    $section = ""; // On crée une variable $section vide
}
 ?>
 
   
 
Recherche du fichier:
  <form action= "fichier.php" method="post">
    <p>
    <select name = "position"/><option value="1">Corps administratif du courrier</option><option value="2">Type de courrier</option><option value="3">Numero du courrier</option><option value="4">Objet du courrier</option><option value="5">Date du courrirer</option></select><br/>
    <input type ="text" name= "section" />
              <input type ="submit" value ="Validez" />
     
    </p>
    </form>
    </body>
    </html>
 
 
 
 
 
 
mais j'aimerais que grace AUX criteres donnés avoir le fichier voulu c'est a dire que je veux renseigner plusieurs criteres a la fois, soit un, 2, 3 ou 4 criteres choisi...J'ai ecrit ce code mais je suis pas satisfaite parce que j'ai du passer par les options (qui ne serve dans ce cas a rien) pour avoir ce que je veux...j'aimerais donc les enlever...comme vous l'aurez remarqué je suis noviste en php
 
merci a vous!!!
 
 
 
 
 
 
Code : PHP
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
 
 
    <head>
 </head>
  <body>
 
 <?php
 
 if ((isset($_POST['section'])) and (isset($_POST['type']))) // Si la variable existe
      { $posi1 = $_POST['position1'] - 1;
        $posi2 = $_POST['position2'] - 1;
  $posi3 = $_POST['position3'] - 1;
  $posi4 = $_POST['position4'] - 1;
  $posi5 = $_POST['position5'] - 1;
   
     $dossier = 'Courrier/' ;
     $list = scandir($dossier);   //scan le dossier Courrier
     foreach ($list as $file) //identique a for mais specifié au tableau
       { $divfichier = explode('_',$file);
        if((preg_match('`'.$_POST['section'].'`', $divfichier[$posi1])) AND  
           (preg_match('`'.$_POST['type'].'`', $divfichier[$posi2])) AND  
    (preg_match('`'.$_POST['reference'].'`', $divfichier[$posi3])) AND  
    (preg_match('`'.$_POST['objet'].'`', $divfichier[$posi4])) AND  
    (preg_match('`'.$_POST['date'].'`', $divfichier[$posi5])))
  {
                  echo '<a href="'.$file.'">'.$file.'</a><br/>';
      }
 }
}
 
else // La variable n'existe pas encore
{
    $section = ""; // On crée une variable $section vide
}
 ?>
 
   
<p>
 
<form action= "new 2.php" method="post">
 
<p>
<select name = "position1"/><option value="1">Corps administratif du    courrier</option> </select
<select name = "position2"/><option value="2">Type de courrier</option</select>
<select name = "position3"/><option value="3">Reference du courrier</option></select>
<select name = "position4"/><option value="4">Objet du courrier</option</select>
<select name = "position5"/><option value="5">Date du Courrier</option></select>
</p>
 
 
Recherche du fichier :  
 
<p>
 
<p> Corps administratif: <input type ="text" name= "section"/> </P>            
<p> Type de courrier: <input type ="text" name= "type"/> </p>  
<p> Reference du courrier: <input type ="text" name= "reference"/> </p>  
<p> Objet du courier: <input type ="text" name= "objet"/> </p>            
<p> Date du courier: <input type ="text" name= "date"/> </p>            
 
<input type ="submit" value ="Validez" />
</p>    
</p>
</form>
</body>
</html>

Reply

Marsh Posté le 26-01-2009 à 12:52:04   

Reply

Marsh Posté le 26-01-2009 à 12:56:22    

Ah oui j'ai oublié excusez moi le 2eme code a ete bafouillé j'arrive avec avoir ma recherche par multicritere mais le code ne me plait en effet en ne mettant qu'un seul critere dans le formulaire j'ai la liste des fichiers correspondant a la demande mais d'apres le code c'est impossible puisque dans  
 
if((preg_match('`'.$_POST['section'].'`', $divfichier[$posi1])) AND  
           (preg_match('`'.$_POST['type'].'`', $divfichier[$posi2])) AND  
    (preg_match('`'.$_POST['reference'].'`', $divfichier[$posi3])) AND  
    (preg_match('`'.$_POST['objet'].'`', $divfichier[$posi4])) AND  
    (preg_match('`'.$_POST['date'].'`', $divfichier[$posi5])))  
 
je n'ai que des AND...
 
vous comprennez que ca ne devrais pas marcher

Reply

Marsh Posté le 26-01-2009 à 15:08:35    

eclairssissement excusez moi je ne suis surement pas tres clair
 
ok sorry je repette
 
1/ j'ai fait le 1er code qui via un formulaire me trouve des fichiers pdf qui sont presents sur ma machine
 
2/le nom des dits fichiers est de cette forme pour tous:
SECXX_TYP_REF_OBJET_DATE  
ces fichiers differents donc par les 5 criteres suivants:
 
XX de SECXX
TYP  
REF
OBJET
DATE
 
exemples de nom de fichier pdf
 
1/SEC32_COU_8000413_Demande de stage_220109
2/SEC12_REP_10313_verification_300476
 
nous voulons par exemple avoir acces au fichier suivant
SEC32_COU_8000413_Demande de stage_220109
 
dans mon formulaire j'aurais ces 5 criteres a remplir  
 
section: 32
type: COU
reference: 8000413
objet: Demande de stage
date: 220109
 
mais je ne suis pas oblige de remplir tous ces criteres en effet en tappant 32 a la section et en validant j'aurais affiché tous les fichiers qui ont comme section 32, de la je n'aurais qu'a cliquer sur le dit fichier..., en tapant type tout simplement j'aurais tous les fichiers possedant comme type cou, en tapant section: 32 et type: COU j'aurais tous les fichiers ayant ces 2 crieteres
 voila
 
mais le granc ic est que le 1er code que je vous ai presenté ne permetait qu'une recherche par un seul critere c 'est a dire soit section soit cou soit reference soit objet ou encore date
 
j'ai pour regler le pb(2eme code)
mis (au pif apres plusieurs essaie)des AND aux "preg_match"  et ca fonctionne c'est a dire recherche multicritere mais (bien sur il ya un mais) logiquement ce code ne doit pas fonctionner car en mettant des AND j'oblige a ce que la recherche ce fasse avec les 5 criteres remplis (c'est ca n'est ce pas le AND?) alors que lorsque je lance mon code je peux faire la recherche avec 1,2,3,4 ou 5 criteres
 
donc question: quest ce qui cloche SVP?
 

Reply

Marsh Posté le 26-01-2009 à 18:21:34    

Colorise d'abord ton code avec les balises [ code=php] et [ /code=php] (sans les espaces que j'ai volontairement ajouter pour éviter que les balises de code soient transformées ;)
Mon message
[ code=php]//mon code[ /code]
 
Autre chose :

Code :
  1. if((preg_match('`'.$_POST['section'].'`', $divfichier[$posi1])) AND  
  2.           (preg_match('`'.$_POST['type'].'`', $divfichier[$posi2])) AND  
  3.    (preg_match('`'.$_POST['reference'].'`', $divfichier[$posi3])) AND  
  4.    (preg_match('`'.$_POST['objet'].'`', $divfichier[$posi4])) AND  
  5.    (preg_match('`'.$_POST['date'].'`', $divfichier[$posi5])))


Les regex c'est bien pratique mais il ne faut pas en abuser : quand elles sont remplaçables facilement, il ne faut pas hésiter à les substituer.
Même si les PCRE sont plus rapide que les POSIX elles sont bien souvent moins rapides que les fonctions natives de traitement de chaînes de PHP.
Dans ton cas, si tu souhaites simplement tester la présence d'une chaine dans une autre chaine, tu peux utiliser la fonction strpos
Cette fonction comme tu peux le voir dans le manuel, retourne la position (entier) de la chaine fournie en second argument dans la chaine passée en premier arguement.
Si la sous-chaine n'est pas trouvée, la fonction retourne false.

Code :
  1. $str = 'pomme banane fraise';
  2. $substr = 'banane';
  3. if(strpos($str, $substr)) {
  4.    echo "$substr se trouve dans $str";
  5. }
  6.  
  7. /* Attention ! si la sous chaine se trouve au tout début de la chaine,
  8. alors la position renvoyée sera 0 et le IF échouera car sans comparaison
  9. de type, PHP ne différencie pas 0 et false, qui est retourné en cas de
  10. sous chaine introuvable. Il faut donc faire une comparaison de type
  11. avec l'opérateur '===' (contraire : '!==' qui inclue cette vérification en plus de la
  12. comparaison de valeur. */
  13.  
  14.  
  15. $substr = 'pomme';
  16. if(strpos($str, $substr)) {
  17.    echo "$substr se trouve dans $str";
  18. } else {
  19.    echo "$substr NE SE TROUVE PAS dans $str";
  20. }
  21.  
  22. //affiche "pomme NE SE TROUVE PAS dans pomme banane fraise"
  23.  
  24. $substr = 'pomme';
  25. if(strpos($str, $substr) !== false) {
  26.    echo "$substr se trouve dans $str";
  27. } else {
  28.    echo "$substr NE SE TROUVE PAS dans $str";
  29. }
  30.  
  31. //affiche "pomme se trouve dans pomme banane fraise"

Reply

Marsh Posté le 27-01-2009 à 14:41:38    

BJR
luc@s merci pour ton code mais dans le cas ou tu aimerais faire une recherche multucritere comment tu fais?
si je reprends ton exemple je veux savoir si pomme et fraise son dans ta phrase?

Reply

Marsh Posté le 27-01-2009 à 18:27:58    

Euh, c'est niveau débutant, çà...
Il suffit de faire plusieurs appels à strpos dans ton IF.
Ensuite je t'ai demandé de coloriser ton code, là tu as envoyé plein de lignes et elles sont illisibles comme çà.

Reply

Marsh Posté le 29-01-2009 à 09:32:22    

bjr  
 
je viens de voir ton message sorry pour pour le code, j'ai pu regler mon souci en fait il suffisait de mettre des if et j'ai enleve toute le reste je t'envoie l'ancien code et le new (stp dis moi si le 2eme est propore)
 
ancien code

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  3. <link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
  4.  
  5.  
  6.    <head>
  7. </head>
  8.  <body>
  9.  
  10. <?php
  11.  
  12. if ((isset($_POST['section'])) and (isset($_POST['type']))) // Si la variable existe
  13.      { $posi1 = $_POST['position1'] - 1;
  14.        $posi2 = $_POST['position2'] - 1;
  15.  $posi3 = $_POST['position3'] - 1;
  16.  $posi4 = $_POST['position4'] - 1;
  17.  $posi5 = $_POST['position5'] - 1;
  18.  
  19.     $dossier = 'Courrier/' ;
  20.     $list = scandir($dossier);   //scan le dossier Courrier
  21.     foreach ($list as $file) //identique a for mais specifié au tableau
  22.       { $divfichier = explode('_',$file);
  23.        if((preg_match('`'.$_POST['section'].'`', $divfichier[$posi1])) AND  
  24.           (preg_match('`'.$_POST['type'].'`', $divfichier[$posi2])) AND  
  25.    (preg_match('`'.$_POST['reference'].'`', $divfichier[$posi3])) AND  
  26.    (preg_match('`'.$_POST['objet'].'`', $divfichier[$posi4])) AND  
  27.    (preg_match('`'.$_POST['date'].'`', $divfichier[$posi5])))
  28.  {
  29.                  echo '<a href="'.$file.'">'.$file.'</a><br/>';
  30.      }
  31. }
  32. }
  33.  
  34. else // La variable n'existe pas encore
  35. {
  36.    $section = ""; // On crée une variable $section vide
  37. }
  38. ?>
  39.  
  40.  
  41. <p>
  42.  
  43. <form action= "new 2.php" method="post">
  44.  
  45. <p>
  46. <select name = "position1"/><option value="1">Corps administratif du    courrier</option> </select
  47. <select name = "position2"/><option value="2">Type de courrier</option</select>
  48. <select name = "position3"/><option value="3">Reference du courrier</option></select>
  49. <select name = "position4"/><option value="4">Objet du courrier</option</select>
  50. <select name = "position5"/><option value="5">Date du Courrier</option></select>
  51. </p>
  52.  
  53.  
  54. Recherche du fichier :  
  55.  
  56. <p>
  57.  
  58. <p> Corps administratif: <input type ="text" name= "section"/> </P>            
  59. <p> Type de courrier: <input type ="text" name= "type"/> </p>  
  60. <p> Reference du courrier: <input type ="text" name= "reference"/> </p>  
  61. <p> Objet du courier: <input type ="text" name= "objet"/> </p>            
  62. <p> Date du courier: <input type ="text" name= "date"/> </p>            
  63.  
  64. <input type ="submit" value ="Validez" />
  65. </p>    
  66. </p>
  67. </form>
  68. </body>
  69. </html>


 
 
new code
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  3. <link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
  4. <head>
  5. </head>
  6. <body>
  7.     
  8. <div id="formulaire">
  9.             
  10.     Recherche des fichiers:
  11.     
  12.      <form action= "new2.php" method="post">
  13.             
  14.              <p>Corps administratif     : <input type ="text" name= "section" /> </P>            
  15.              <p>Type de courrier        : <input type ="text" name= "type"  /> </p>
  16.              <p>Reference du courrier: <input type ="text" name= "reference" /></p>
  17.              <p>Objet du courier   : <input type ="text" name= "objet" />   </p>  
  18.             <p>Date du courier (jjmmaa)   : <input type ="text" name= "date" />   </p>          
  19.             <p>Date approximative du courier (jjmmaa)   : <input type ="text" name= "date" />   </p>      
  20.  
  21.              <input type ="submit" name ="validez" value ="validez" />
  22.              <input type="reset" value="effacez"/>
  23.             
  24.         </form>                         
  25. </div>
  26.  
  27. <div id="resultat">
  28.     
  29.     <?php
  30.     
  31.     if ((isset($_POST['section']))){
  32.         if (isset($_POST['type'])) {
  33.             if(isset($_POST['reference'])) {
  34.                 if (isset($_POST['objet'])) {
  35.                     if (isset($_POST['date'])) {
  36.                         if (isset($_POST['dateAproxi'])) {
  37.  
  38.                 
  39.             // si les variables existent
  40.  
  41.               $_post['section'] = $section ;
  42.              $_post['type']= $type ;
  43.              $_post['reference'] = $reference ;
  44.              $_post['objet']= $objet ;
  45.              $_post['date'] = $date ;
  46.               $_post['dateAproxi'] = $dateAproxi ;
  47.  
  48.     
  49.                $dossier = 'Courrier/' ;
  50.                $list = scandir($dossier); //scan le dossier Courrier
  51.                foreach ($list as $file) //identique a for mais specifié au tableau
  52.                  {
  53.                     $divfichier = explode('_',$file);
  54.                 
  55.                $section = strtoupper ($_POST['$section']);
  56.                $type = strtoupper ($_POST['$type']);
  57.               $reference = strtoupper ($_POST['$reference']);
  58.               $objet = strtoupper ($_POST['$objet']);
  59.                $date = strtoupper ($_POST['$date']);
  60.                $dateAproxi = strtoupper ($_POST['$dateAproxi']);
  61.     
  62.                $file = strtoupper ($file);                    
  63.               
  64.                     if(preg_match('`'.$_POST['section'].'`', $divfichier[0])) {
  65.                         if(preg_match('`'.$_POST['type'].'`', $divfichier[1]))  {
  66.                             if(preg_match('`'.$_POST['reference'].'`', $divfichier[2])) {
  67.                                 if(preg_match('`'.$_POST['objet'].'`', $divfichier[3]))  {
  68.                                     if(preg_match('`'.$_POST['date'].'`', $divfichier[4])){
  69.                     
  70.                     echo '<a href="'.$file.'">'.$file.'</a><br/>';
  71.                                   }
  72.                                 }
  73.                             }
  74.                         }
  75.                     }
  76.                  }                    
  77.               }
  78.            }
  79.         }
  80.       }
  81.     }
  82.      else   // Les variables section et autres n'existent pas encore mais validez existe alors
  83.          { echo $section = "";
  84.            echo $type = "";
  85.            echo $reference = "";
  86.             echo $objet = "";
  87.            echo $date = "";    
  88.           }    ?>                   
  89. </div>
  90. </body>
  91. </html>


 
merci et bonne journee


Message édité par essse le 29-01-2009 à 09:35:53
Reply

Marsh Posté le 29-01-2009 à 09:33:40    

je revoie egalement ton code et te donne l'info de savoir si ca passe ou pas j'ai du louper quelque chose

Reply

Marsh Posté le 29-01-2009 à 09:35:14    

Avant tout :
1 - utilise strpos et pas des regex
2 - Pourquoi utiliser un suite de IF imbriqués ? Utilise les opérateurs logiques AND ou && !

Reply

Marsh Posté le 29-01-2009 à 11:45:15    

voici mais je ne comprends pas comment fonctionne les AND stp?
[code=php]
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<link rel="stylesheet" type="text/css" title="site2" href="site2.css" />
<head>
</head>
<body>
   
<div id="formulaire">
   
     Recherche des fichiers:
   
  <form action= "new2.php" method="post">
   
       <p>Corps administratif     : <input type ="text" name= "section" /> </P>            
    <p>Type de courrier        : <input type ="text" name= "type"  /> </p>  
    <p>Reference du courrier: <input type ="text" name= "reference" /></p>  
    <p>Objet du courier   : <input type ="text" name= "objet" />   </p>  
             <p>Date du courier (jjmmaa)   : <input type ="text" name= "date" />   </p>            
             <p>Date approximative du courier (jjmmaa)   : <input type ="text" name= "date" />   </p>        
 
    <input type ="submit" name ="validez" value ="validez" />
    <input type="reset" value="effacez"/>
     
  </form>        
</div>
 
<div id="resultat">
   
 <?php
 // si les POST existent  
 
 if ((isset($_POST['section']))){
         if (isset($_POST['type'])) {
             if(isset($_POST['reference'])) {
          if (isset($_POST['objet'])) {
              if (isset($_POST['date'])) {
         //if (isset($_POST['dateAproxi'])) {
           
 // alors on cree les variables correspondante
 
            $section  = $_POST['section'];
              $type = $_POST['type'];
               $reference = $_POST['reference'];
               $objet = $_POST['objet'];
                $date = $_POST['date'];
     //$_POST['dateAproxi'] = $dateAproxi ;
 
 // jeu de majuscule avec les POST  
 
      $section = strtoupper ($_POST['section']);
         $type = strtoupper ($_POST['type']);
               $reference = strtoupper ($_POST['reference']);
               $objet = strtoupper ($_POST['objet']);
            $date = strtoupper ($_POST['date']);
     //$dateAproxi = strtoupper ($_POST['$dateAproxi']);
 
   // on traite le formulaire en ouvrant le dossier et en entrant dans la fonction
   
            $dossier = 'Courrier/' ;
            $list = scandir($dossier);
            foreach ($list as $file) //identique a for mais specifié au tableau
              {  
        $file = strtoupper ($file); // jeu de majuscule avec les fichiers  
        $divfichier = explode('_',$file); //on decoupe les fichiers
     
           if((strpos($divfichier[0], $_POST['section']))  
             AND (strpos($divfichier[1], $_POST['type']))  
               AND (strpos($divfichier[2], $_POST['reference']))  
                 AND (strpos($divfichier[3], $_POST['objet']))  
        AND (strpos($divfichier[4], $_POST['date'])) ){
                                   echo '<a href="'.$file.'">'.$file.'</a><br/>';
                                   }
        }
       }
      }
     }
     }      
     } ?>        
 </div>
</body>
</html>
   
 
 
 
 [/php]

Reply

Marsh Posté le 29-01-2009 à 11:45:15   

Reply

Marsh Posté le 29-01-2009 à 11:48:05    

si tu ne sais pas comment fonctionnent les opérateurs logiques alors que tu les utilisaient, j'en déduis que tu as prit ce script quelque part et que tu ne comprends pas ce que tu fais ?
Et tu as bien lu mon message sur strpos et le fait qu'il fallait tester le type de retour ?

Reply

Marsh Posté le 29-01-2009 à 12:08:53    

c'est moi qui l'ait fait ce script je te rassure ma fatigue, mon mal de tete avec des nuits blanches et mon mal de dos (position assise) peuvent en temoigner.
 
 Au depart j'avais fait un essaie avec un seul critere ca fonctionnais et pour les 4 autres criteres j'ai eu lidee de tester avec des AND et ca a fonctionne
 
MAIS je ne comrpends pas qu'il fonctionne alors que en mettant des AND ceux qui veut dire que SI (POST_section = divfichier[0] ET que POST_type = divfichier[1] ET que POST_reference = divfichier[2] ET que POST_objet = divfichier[3] ET que POST_date = divfichier[4]  ) ALORS on ecrit le fichier
 
lorsque je rempli qu'UN seul de mes criteres ca passe corretement alors que d'apres le code les 5 criteres doite etre remplis pour que ca marche
 
c'est ce que je ne comprends pas luc@s

Reply

Marsh Posté le 29-01-2009 à 12:19:00    

il faudrait débugger : afficher divfichier[n] et POST[truc]

Reply

Marsh Posté le 29-01-2009 à 12:37:21    

excuses la question comment je fais stp?

Reply

Marsh Posté le 29-01-2009 à 12:55:18    

echo, les bases.

Reply

Sujets relatifs:

Leave a Replay

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