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

Langage PHP Discussion :

Incrémentation spécifique dans un WHILE


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Incrémentation spécifique dans un WHILE
    Bonjour,

    Ceci étant ma première tentative sur forum et après avoir galéré dans tous les sens pour trouver une réponse depuis 2 mois, je me dois de m'en remettre à vous pour me dire où je fais erreur dans mon code.
    En effet, dans le but d'afficher le contenu de mon répertoire dans un tableau de page HTML avec tri et regroupement alphabétique des dossiers contenus, j'ai voulu incrémenter une variable [$i], malheureusement sans succès.. Mon $i reste irrémédiablement égal à 0 malgré le $i++;
    De plus la différenciation entre les [$lettre] initiales et la lettre de référence à vérifier ne se fait pas.
    Chaque entrée est traitée comme un tableau différent.
    Pourriez-vous m'indiquer l'erreur que je fais.

    Je vous joint le code concerné :

    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
     
    // TABLEAU_SOCIETES
    function table_soc($titre) {
    $i = 0;
    $ref_lettre = '0';
    $dir = $titre;
    $dossier = opendir($dir);
    while ($fichier = readdir($dossier)) {
    			if(($fichier != '.') && ($fichier != '..')) {
    			$rep_name = substr(strrchr($dir,'/'),1);
    			$lettre = substr($rep_name,0,1);
    			$rep = $dir.'/'.$fichier;
    			$id_file = $lettre.$i;
    				if ($ref_lettre !== $lettre) {
    					$ref_lettre = $lettre;
    					echo '</tr><td class="section" id="'.$id_file.'">'.$lettre.'</td></tr><tr>';
    					$i = 0;
    					}
    				if ($i == 5) {
    					echo '</tr><tr>';
    					$i = 0;
    					}
    			$id_file = str_replace(' ','_',$rep_name).$lettre.$i;
    			echo '<td class="nds"><a href="'.$dir.'/'.$fichier.'" target="navig">'.$rep_name.'</a></td>';
    			$i++;
    			}
    	}
    }
    Merci d'avance pour votre intérêt et vos éventuelles réponses

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    A aucun moment tu ne gère le fait que substr peut te retourner false.
    C'est surement ce qui se produit dans ton cas, ce qui fait que tu tombe toujours dans un des tes if qui remet $i à 0
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour grunk,

    Je n'ai à priori pas de retour d'erreur sur les substr puisque je récupère bien les nom de repertoire et les initilaes.
    Mais comme le script liste un dossier contenant des sous-dossiers et les fichiers à l'intérieur de ceux-ci il me fait un array par sous-dossier au lieu de me faire un array contenant tous les sous-dossiers

    Résultat
    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
    Array
    (
        [0] => 1000MERCIS.php
    )
    Array
    (
        [0] => 4PMC.php
    )
    Array
    (
        [0] => ACOLAD.php
    )
    Array
    (
        [0] => AC_GROUPE.php
    )
    Array
    (
        [0] => CENTRIC.php
    )
    Array
    (
        [0] => CGI_CONSULTING.php
    )
    Array
    (
        [0] => CONSORT_NT.php
    )
    Array
    (
        [0] => DELOITTE.php
    )
    Array
    (
        [0] => EIFFAGE.php
    )
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Array
    (
        [0] => 1000MERCIS.php
        [1] => 4PMC.php
        [2] => ACOLAD.php
        [3] => AC_GROUPE.php
        [4] => CENTRIC.php
        [5] => CGI_CONSULTING.php
        [6] => CONSORT_NT.php
        [7] => DELOITTE.php
        [8] => EIFFAGE.php
    )
    Merci toutefois de ton intérêt pour mon problème

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function test($titre) {
      if(is_dir($titre)){
        $scanned_dir = array_diff(scandir($titre), array('..', '.'));
        echo '<pre>';
        print_r($scanned_dir);
        echo '</pre>';
      }
      else{
        echo $titre. 'n est pas un répertoire accessible.';
      }
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour et MERCI Dendrite,

    Suite à la lecture de ton code, j'en arrive à ceci :

    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
     
    function table_soc($rep) {
    $ref_lettre = '0';
    $dir = dirname($rep);
    $dossier = array_merge(array_diff(scandir($dir),array('..','.','index.php')));
    foreach ($dossier as $sub_rep) {
    $filename = $sub_rep.'.php';
    $lettre = substr($filename,0,1);
    if ($ref_lettre !== $lettre) {
    $ref_lettre = $lettre;
    echo '</tr><td class="section">'.$lettre.'</td></tr><tr>';
    $i = 0;
    }
    if ($i > 5) {
    echo '</tr><tr>';
    $i = 0;
    }
    $id_file = str_replace(' ','_',$filename).$lettre.$i;
    echo '<td class="nds"><a href="'.$dir.'/'.$sub_rep.'/'.$filename.'" target="navig">'.$sub_rep.'</a></td>';
    $i++;
    }
    }
    Malheureusement, même si en effet le tableau est formaté exactement comme je le désire, il me le réplique dans la page, autant de fois qu'il y a de sous-dossier....

    Une idée

    Merci encore.

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je ne comprends pas ce que tu veux.

    Mais si tu veux tous les fichiers contenus dans tel répertoire, ainsi que les fichiers contenus dans n'importe quel sous-répertoire (récursif), mais tout ceci sur le même plan dans un simple array PHP... il y a ça, une fonction récursive, trouvée encore sur un commentaire de la page PHP scandir :


    Code php : 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
    <?php
    function scanDirectories($rootDir, $allData=array()) {
        // set filenames invisible if you want
        $invisibleFileNames = array(".", "..", ".htaccess", ".htpasswd");
        // run through content of root directory
        $dirContent = scandir($rootDir);
        foreach($dirContent as $key => $content) {
            // filter all files not accessible
            $path = $rootDir.'/'.$content;
            if(!in_array($content, $invisibleFileNames)) {
                // if content is file & readable, add to array
                if(is_file($path) && is_readable($path)) {
                    // save file name with path
                    $allData[] = $path;
                // if content is a directory and readable, add path and name
                }elseif(is_dir($path) && is_readable($path)) {
                    // recursive callback to open new directory
                    $allData = scanDirectories($path, $allData);
                }
            }
        }
        return $allData;
    }
    ?>
     
    Example output:
     
    print_r(scanDirectories("www"));
    ---
    Array
    (
        [0] => www/index.php
        [1] => www/admin.php
        [3] => www/css/css.css
        [4] => www/articles/2007/article1.txt
        [4] => www/articles/2006/article1.txt
        [8] => www/img/img1.png
    )
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut MERCI A TOUS
    Bon, au final je suis un âne, je ne passais pas la bonne variable à ma fonction, du coup elle faisait le tour de tous les dossier inclus dans le répertoire parent...

    Merci encore à tous pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de bouton stop dans boucle while
    Par Simon et ulrich dans le forum LabVIEW
    Réponses: 4
    Dernier message: 04/08/2011, 10h59
  2. probléme d'incrémentation dans la boucle while
    Par cmoi_doudi dans le forum Langage
    Réponses: 3
    Dernier message: 28/05/2008, 10h19
  3. Problème avec position d'image dans un while()
    Par damigr dans le forum Langage
    Réponses: 1
    Dernier message: 08/04/2008, 00h46
  4. [MySQL] Problème pour récupèrer les champs d'un formulaire qui se trouve dans un while
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 21/03/2008, 14h59
  5. Problème avec if dans un while.
    Par rutabagas dans le forum C
    Réponses: 7
    Dernier message: 28/02/2007, 12h36

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