Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Cambiare colore riga se record corrisponde a file nella cartella

    Ciao a tutti, sto impazzendo. Aiutatemi please
    Estraggo dei record da un DB in MySQL con un query SQL e li piazzo in una tabella e fino a qui tutto ok.
    Il mio obiettivo è quello di cambiare il colore della riga se nella cartella che indico è presente un file che si chiama come il dato presente nel campo. Tipo:

    riga 1 - aaa - colore riga bianco (nessun file nella cartella)
    riga 2 - bbb - colore riga bianco (nessun file nella cartella)
    riga 3 - ccc - colore riga rosso (file nella cartella presente con nome "ccc.ext"
    ecc...

    Il tentativo che ho fatto che si avvicina di più è:

    - recuperare tutto il contenuto della cartella con i files e metterlo in una variabile XXX
    - aprire il ciclo per l'estrazione dei record
    - confrontare il valore del record (aaa ecc..) con il contenuto della variabile XXX
    - se il risultato è TRUE imposto una variabile che uso per cambiare lo stile nella riga della tabella

    Facendo così mi cambia solo la riga che corrisponde all'ultimo file che c'è nella cartella.
    Immagini allegate Immagini allegate

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,844
    Dovresti postare anche il codice, hai esposto il tuo algoritmo, ma non è certo che ci sia corrispondenza con il codice scritto.

  3. #3
    Innanzitutto grazie per aver risposto. Visto il momento non era così scontato.
    In realtà ho fatto altre prove e il codice funziona. C'è solo un problema:
    la variabile $file che creo dopo il ciclo all'inizio (foreach...) è ok, nel senso che ci sono tutti i nomi dei files presenti nella cartella di riferimento, quando però vado a fare il confronto con if (stristr($file,$soggetto,0) !== false) la variabile contiene solamente l'ultimo nome di file presente nella variabile originale, ripetuto per il numero dei records estratti dal DB. (!!!)

    Ho provato ad inserire manualmente nella variabile $file la stringa con tutti i nomi dei files (commentando il ciclo foreach... iniziale) e funziona perfettamente, quindi credo che il problema sia lì.

    Posto qui sotto la parte di codice interessata:

    codice:
    <?php
                      
                      $sqlSelect = "SELECT * FROM wrin WHERE modulo = '$modulo' ";
                      $result = mysqli_query($conn, $sqlSelect);
                      
                                      
                      $path = 'pdf/'.$modulo;
                        foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file) 
                            { 
                                $file = $file->getFilename();
    
                            } 
    
    
                    if (mysqli_num_rows($result) > 0)
                    {
                    
                    ?>
                        <table class="table table-sm" width="145%">
                            <thead>
                                <tr>
                                    <th>Wrin</th>
                                    <th>Descrizione</th>
                                    <th>Contenuto</th>
                                    <th>Quantità</th>
                                    <th>Note</th>
                                </tr>
                            </thead>
                    <?php
                        
                        
                        while ($row = mysqli_fetch_array($result)) {
                            
                        $soggetto = $row['modulo']."_".$row['wrin'];
                            
                        if (stristr($file,$soggetto,0) !== false) 
                        { 
                            echo "<tr class='testo_light2 pdfbassa'>
                                    <td>".$row['wrin']."</td>
                                    <td>".$row['descrizione']."</td>
                                    <td>".$row['contenuto']."</td>
                                    <td>".$row['quantita']."</td>
                                    <td>".$row['note']."</td>
                                  </tr>";
                        }
                          else
                        {
                            echo "<tr class='testo_light2 nopdfbassa'>
                                    <td>".$row['wrin']."</td>
                                    <td>".$row['descrizione']."</td>
                                    <td>".$row['contenuto']."</td>
                                    <td>".$row['quantita']."</td>
                                    <td>".$row['note']."</td>
                                  </tr>";
                        }
                        
                            
                        }
                    ?>

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,844
    Nel tuo codice, qui
    Codice PHP:
    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file
    {
        
    $file $file->getFilename();

    ad ogni iterazione sovrascrivi la variabile $file, per questo ti risulta sempre l'ultimo nome di file.
    D'altro canto $file è una variabile semplice, non un array, quindi è anche normale che alla fine ci sia una sola stringa all'interno, ed ancora, usi lo stesso nome di variabile per 2 cose diverse.

    Io il tuo codice lo cambierei così

    Codice PHP:
    <?php
    $sqlSelect 
    "SELECT * FROM wrin WHERE modulo = '$modulo' ";
    $result mysqli_query($conn$sqlSelect);
     
    $path 'pdf/'.$modulo;
    foreach (new 
    RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file

        
    $files[] = $file->getFilename();


    if (
    mysqli_num_rows($result) > 0)
    {
    ?>
    <table class="table table-sm" width="145%">
        <thead>
            <tr>
                <th>Wrin</th>
                <th>Descrizione</th>
                <th>Contenuto</th>
                <th>Quantità</th>
                <th>Note</th>
            </tr>
        </thead>
        <tbody>
    <?php
    while ($row mysqli_fetch_assoc($result)) 
    {
        
    $soggetto $row['modulo']."_".$row['wrin'];
        
        
    $class in_array($soggetto$files) ? 'pdfbassa' 'nopdfbassa';

        echo 
    "<tr class='testo_light2 " $class "'>
                <td>"
    .$row['wrin']."</td>
                <td>"
    .$row['descrizione']."</td>
                <td>"
    .$row['contenuto']."</td>
                <td>"
    .$row['quantita']."</td>
                <td>"
    .$row['note']."</td>
              </tr>"
    ;    
    }
    ?>
        </tbody>
    </table>
    N.B. potrebbe essere necessario aggiustare qualcosa, non so esattamente come sono i dati che recuperi.
    Ultima modifica di Alhazred; 17-03-2020 a 18:34

  5. #5
    È vero quello che dici in merito al sovrascrivere la variabile e me n'ero scordato!
    Provo a fare le modifiche con i tuoi suggeriementi e spero funzioni.

    Per il momento ti ringrazio, gentilissimo.

  6. #6
    Ciao, ho provato, ma c'è un problema simile. A quanto pare la variabile $files[] è vuota...
    Ho provato a togliere "[]" e lasciare solo $files ed effettivamente così funziona, nel senso che ci sono tutti i files.
    Quando la richiamo però più avanti, quindi fuori dal ciclo foreach, contiene solo l'ultimo valore. Quindi sono punto a capo.

    Sto cercando info in rete nel frattempo...

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,844
    Hai usato tutto il mio codice? Non è cambiato solo lì, è cambiato anche dentro il while.

    Se usi $files senza le parentesi quadre, stai usando una variabile semplice, che può contenere un solo valore, quindi alla fine del coclo c'è solo una valore.
    Con le quadre invece diventa un array e può contenere quanti valori vuoi.

  8. #8
    Sì certo, ho usato tutto il codice. Ma non succede nulla.
    Questo e il copia/incolla della parte incriminata...

    Codice PHP:
     <?php
                        $sqlSelect 
    "SELECT * FROM wrin WHERE modulo = '$modulo' ";
                        
    $result mysqli_query($conn$sqlSelect);

                        
    $path 'pdf/'.$modulo;
                        foreach (new 
    RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file
                        { 
                            
    $files[] = $file->getFilename();
                        } 

                        if (
    mysqli_num_rows($result) > 0)
                        {
                        
    ?>
                        <table class="table table-sm" width="145%">
                            <thead>
                                <tr>
                                    <th>Wrin</th>
                                    <th>Descrizione</th>
                                    <th>Contenuto</th>
                                    <th>Quantità</th>
                                    <th>Note</th>
                                </tr>
                            </thead>
                            <tbody>
                        <?php
                        
    while ($row mysqli_fetch_assoc($result)) 
                        {
                            
    $soggetto $row['modulo']."_".$row['wrin'];

                            
    $class in_array($soggetto$files) ? 'pdfbassa' 'nopdfbassa';

                            echo 
    "<tr class='testo_light2 " $class "'>
                                    <td>"
    .$row['wrin']."</td>
                                    <td>"
    .$row['descrizione']."</td>
                                    <td>"
    .$row['contenuto']."</td>
                                    <td>"
    .$row['quantita']."</td>
                                    <td>"
    .$row['note']."</td>
                                  </tr>"
    ;    
                        }
                        
    ?>
                        </table>
                    <?php

  9. #9
    Ho provato anche con "Glob" per leggere i nomi dei files nella cartella, ma il risultato è uguale.
    Quello che non capisco è, se alla fine del ciclo foreach ho effettivamente tutti nomi dei files sottoforma di stringa, perchè quando li metto in una variabile mi legge solo l'ultimo? Ho provato all'interno del ciclo a stamparla a video e i nomi ci sono tutti!

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,844
    Subito fuori il foreach metti

    print_r($files);

    ti appaiono tutti i file della cartella che hai indicato in $path?
    Ricorda che di un array non puoi fare l'echo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.