IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Filtrer les fichiers par date


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 412
    Par défaut Filtrer les fichiers par date
    bonjour,

    j'ai ce script qui me liste tous mes documents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
      <?php$dir_nom = './archives'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers
     
     
    while($element = readdir($dir)) {
    	if($element != '.' && $element != '..' && strrchr($element,'.') != '.php') {
    		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
    		else {$dossier[] = $element;}
    	}
    }
     
     
    closedir($dir);
     
     
    if(!empty($dossier)) {
    	rsort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
    	echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
    	echo "\t\t<ul>\n";
    		foreach($dossier as $lien){
    			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
    		}
    	echo "\t\t</ul>";
    }
     
     
    if(!empty($fichier)){
    	rsort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
     
    	echo "\t\t<ul>\n";
    		foreach($fichier as $lien) {
    			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
    		}
    	echo "\t\t</ul>";
    }
    ?>
    Ces documuments son enregistrés sou ce format

    01-01-2021.pdf
    05-01-2021.pdf
    25-01-2021.pdf
    04-02-2021.pdf
    13-02-2021.pdf.............

    j'aimerai qu'il n'affiche que ceux du mois de janvier

    pouvez vous me prêter la main

    Merci a vous

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Vite fait, à consolider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if(!empty($dossier)) {
             $re = '/-(.*)-/m';
    	rsort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
    	echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
    	echo "\t\t<ul>\n";
    		foreach($dossier as $lien){
                    preg_match_all($re, $lien, $matches, PREG_SET_ORDER, 0);
                    if($matches[1] === '01'{
    			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
                      }
    		}
    	echo "\t\t</ul>";
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 412
    Par défaut
    c'est une bonne piste je pense mais cela affiche quand même les fichiers de février

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 597
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 597
    Par défaut
    montrez nous le code que vous avez testé.
    parce que dans le code de MaitrePylos il y a juste une erreur au niveau du "if" mais une fois que c'est corrigé, le code affiche bien les fichiers de janvier.

  5. #5
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    Citation Envoyé par UDSP50 Voir le message
    Ces documuments son enregistrés sou ce format

    01-01-2021.pdf
    05-01-2021.pdf
    25-01-2021.pdf
    04-02-2021.pdf
    13-02-2021.pdf.............

    j'aimerai qu'il n'affiche que ceux du mois de janvier
    Passer par une base de données est la méthode la plus appropriée
    MySQL ou autre vous permetra de tirer partie de la puissance des fonctions de date.
    Je vous ai codé une petite classe php permettant d'importer la liste de vos fichiers dans la base de données.
    La fonction PHP scandir simplifie la génération de votre liste de fichiers.
    Une fois votre liste importée vous pouvez vous amuser avec du sql.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE fichiers (
    	fichier_id integer auto_increment primary key,
    	type_id smallint,
    	fichier varchar(100),
    	creation date
    );

    bibio.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    class Biblio {
     
    	public $pdo;
    	public $dossier;
    	public $db_host;
    	public $db_user;
    	public $db_password;
     
    	private $regex_date = '/.*([0-9]{2})-([0-9]{2})-([[0-9]{4}).*/';
     
    	/**
    	 * connecter()
    	 */
    	public function connecter()
    	{
    		$this->pdo = new PDO( $this->db_host, $this->db_user, $this->db_password );
    		$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    	}
     
    	/**
    	 * importer()
    	 */
    	public function importer()
    	{
    		if ( !is_dir($this->dossier) ) die('Dossier non valide ou innexistant !!');
     
    		$this->fichiers = scandir($this->dossier);
     
    		$values = [];
    		foreach( $this->fichiers as $fichier )
    		{
    			$fichier = $this->dossier . $fichier;
    			$type_id = is_dir($fichier) ? 1 : 2;
     
    			$fichier = addslashes( $this->dossier . $fichier );
    			preg_match( $this->regex_date, $fichier, $infos );
    			$date = empty($infos[0]) ? null : $infos[3] . '-' . $infos[2] . '-' . $infos[1];
     
    			$values[] = "('$fichier', '$date', $type_id)";
    		}
     
    		$query = 'INSERT INTO fichiers (fichier, creation, type_id) VALUES ' . implode(",\n", $values);
    		$this->pdo->exec( $query );
    	}
     
    	/**
    	 * supprimer()
    	 */
    	public function supprimer()
    	{
    		$query = 'TRUNCATE fichiers';
    		$this->pdo->exec( $query );
    	}
     
    	/**
    	 * categoriser()
    	 */
    	public function categoriser()
    	{
    		$query = 'UPDATE fichiers SET type_id = 3 WHERE fichier LIKE \'%.pdf\'';
    		$this->pdo->exec( $query );
    	}
     
    	/**
    	 * rechercher()
    	 */
    	public function rechercher( $sql )
    	{
    		$results = $this->pdo->query( $sql );
    		return $results->fetchAll( PDO::FETCH_OBJ );
    	}
    }
    ?>
    test.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    	require 'biblio.php';
     
    	$bibio = new Biblio();
     
    	$bibio->dossier = './archives/';
    	$bibio->db_host = 'mysql:host=localhost;dbname=my_bd';
    	$bibio->db_user = '.....';
    	$bibio->db_password = '....';
     
    	$bibio->connecter();
    	$bibio->supprimer();
    	$bibio->importer();
    	$bibio->categoriser();
     
    	// Recherche des fichiers de janvier triés par ordre croissant de date
    	$sql = 'SELECT fichier, creation FROM fichiers WHERE MONTH(creation) = 1 AND type_id = 3 ORDER BY creation ASC';
    	$fichiers = $bibio->rechercher( $sql );
     
    	// Recherche des dossiers
    	$sql = 'SELECT fichier, creation FROM fichiers WHERE type_id = 1 ORDER BY creation ASC';
    	$dossiers = $bibio->rechercher( $sql );
    ?>
     
    <ul>
    <?php foreach( $fichiers as $doc): ?>
    <li><a href="<?php echo $doc->fichier ?>"><?php echo basename($doc->fichier) ?></a></li>
    <?php endforeach; ?>
    </ul>
     
    <hr>
    <ul>
    <?php foreach( $dossiers as $doc): ?>
    <li><a href="<?php echo $doc->fichier ?>"><?php echo basename($doc->fichier) ?></a></li>
    <?php endforeach; ?>
    </ul>

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 183
    Par défaut
    Regarder aussi du coté de la fonction glob.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Ha zut, j'ai oublié une parenthèse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    if (!empty($dossier)) {
        $re = '/-(.*)-/m';
        rsort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
        echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
        echo "\t\t<ul>\n";
        foreach ($dossier as $lien) {
            preg_match_all($re, $lien, $matches, PREG_SET_ORDER, 0);
            if ($matches[1] === '01') {
                echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
            }
        }
        echo "\t\t</ul>";
    }

  8. #8
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    Citation Envoyé par UDSP50 Voir le message
    bonjour,

    j'ai ce script qui me liste tous mes documents

    Ces documuments son enregistrés sou ce format

    01-01-2021.pdf
    05-01-2021.pdf
    25-01-2021.pdf
    04-02-2021.pdf
    13-02-2021.pdf.............

    j'aimerai qu'il n'affiche que ceux du mois de janvier

    pouvez vous me prêter la main

    Merci a vous
    Est-ce que vous envisagez afficher vos données avec d'autres critères : par exemple fichiers compris entre une date A et une date B ... ?

Discussions similaires

  1. Problème de filtre sur table
    Par omega dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/08/2006, 10h53
  2. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  3. Problème de filtre dans un formulaire acess
    Par cdbaloo dans le forum Access
    Réponses: 4
    Dernier message: 31/03/2006, 17h25
  4. Problème avec filtre d'un formulaire ?
    Par HookerSeven dans le forum Access
    Réponses: 3
    Dernier message: 25/02/2006, 01h59
  5. Problème de filtre sur un formulaire
    Par bernardmichel dans le forum IHM
    Réponses: 6
    Dernier message: 12/12/2005, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo