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 régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 411
    Points : 117
    Points
    117
    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 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    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 régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 213
    Points : 15 499
    Points
    15 499
    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 averti
    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
    Points : 433
    Points
    433
    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
    17 307
    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 : 17 307
    Points : 42 707
    Points
    42 707
    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 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    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 averti
    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
    Points : 433
    Points
    433
    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, 11h53
  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, 16h40
  3. Problème de filtre dans un formulaire acess
    Par cdbaloo dans le forum Access
    Réponses: 4
    Dernier message: 31/03/2006, 18h25
  4. Problème avec filtre d'un formulaire ?
    Par HookerSeven dans le forum Access
    Réponses: 3
    Dernier message: 25/02/2006, 02h59
  5. Problème de filtre sur un formulaire
    Par bernardmichel dans le forum IHM
    Réponses: 6
    Dernier message: 12/12/2005, 16h36

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