[PHP] Controllare condizione ciclo While

Discussione in 'PHP' iniziata da nonsochisono, 18 Ottobre 2018.

  1. nonsochisono

    nonsochisono Nuovo Utente

    Registrato:
    23 Agosto 2012
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    PHP:
    function desc_caratteristica_ditta()
                {
    ?>
    <body>
        <div id="div2">
            <form action="NextFile.php" method="post">
                <table border="2px" cellspacing="0px";>
                    <tr>
                        <th>Codice caratteristica_ditta</th>
                        <th>Descrizione caratteristica_ditta WINFARM </th>
                        <th>Cod Magento</th>
                        <th>Descrizione caratteristica_ditta Magento </th>
                    </tr>
                    <?php
                    $db 
    = new PDO "mysql:host=" DB_HOST "; dbname=" DB_NAMEDB_USERDB_PASSWORD );
                    
    $querycaratteristica_ditta="SELECT caratteristica_ditta  FROM importaditte2 GROUP BY caratteristica_ditta ORDER BY caratteristica_ditta";
                    
    $stm4=$db->prepare($querycaratteristica_ditta);
                    
    $stm4->execute();
                    
    $totale4 $stm4->rowCount();
                    echo 
    'sono presenti: '.$totale4.' prodotti con caratteristica_ditta',"<br />" ;
                    
    $i=1;

                        while(
    $row5 $stm4->fetch(PDO::FETCH_ASSOC))
                    {
                        
    $caratteristica_ditta $row5['caratteristica_ditta'];
                        
    $dcaratteristica_ditta=$row5['caratteristica_ditta']; //caratteristica_ditta
                        
    $querycaratteristica_ditta3="SELECT * FROM TS011 WHERE FDI_T004 = '$dcaratteristica_ditta'";
                        
    $stm7=$db->prepare($querycaratteristica_ditta3);
                        
    $stm7->execute();
                        
    $row7 $stm7->fetch(PDO::FETCH_ASSOC);
                        
    $risultato_desc_caratteristica_ditta1=$row7['FDI_T005'];  codice caratteristica_ditta                                                     
                 
                        $dcaratteristica_ditta
    =$row5['caratteristica_ditta']; //caratteristica_ditta
                        
    $querycaratteristica_ditta2="SELECT * FROM caratteristica_ditta2 WHERE caratteristica_ditta = '$dcaratteristica_ditta'";
                        
    $stm5=$db->prepare($querycaratteristica_ditta2);
                        
    $stm5->execute();
                        
    $row6 $stm5->fetch(PDO::FETCH_ASSOC);
                        
    $risultato_desc_caratteristica_ditta=$row6['caratteristica_ditta'];
                        if (! empty ( 
    $risultato_desc_caratteristica_ditta )) {
                    
    $conteggio 0;
                    continue;
                        }
                        else {
                    
    $conteggio 1;                 
                        }
                    
    ?>
                    <tr>
                        <td  >
                            <input type="text" size="10" name="first<?php echo $i?>" value= "<?php echo $caratteristica_ditta?>" />
                        </td>
                        <td>
                            <input  type="text" size="50" name="second<?php echo $i;?>"value= "<?php echo $risultato_desc_caratteristica_ditta1 ?>" />
                        </td>
                        <td>
                            <input type="text" size="10" name="third<?php echo $i;?>" />
                        </td>
                        <td>
                            <input type="text" size="70" name="forth<?php echo $i;?>" value= "<?php echo 'Default Category/' ?>" />
                        </td>
                    </tr>
                    <?php         
                    $i
    ++;
                    }         
                    
    ?>
                </table>
                <input  type="submit" value="Submit"/>
            </form>
        </div>
        <?php
        
    if ( $conteggio == 0) {
        echo 
    'Devi aggiornare caratteristica_ditta';
        }
        else ( 
    $conteggio == ) {
        echo 
    'aaaaaaaaaaaaaaaaaaaaaa';
        
    ?>
        <br/><br/>
        <script
        src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script type="text/javascript">
                                $(document).ready(function() {
                                $("table").remove();
                                $("input").remove();
                                });
        </script>
        <br/><br/>
        -->
                </body>
                </html>
                        }
                }
    Premetto che non sono un professionista ma programmo per diletto.
    Quello che devo fare è un pochettino complesso per me. Con la prima query prelevo informazioni di una ditta raggruppate per questa caratteristica, poi verifico questa caratteristica sul database collegato a questa caratteristica e dovrò inserirla se non è presente nel terzo database che fungerà da tabella di scambio.
    Il tutto lo mando con il post alla seconda pagina.
    Mi funziona tutto tranne per il controllo finale, non riesco a capire come faccio a determinare nella prima condizione if , se e quando si verifica else
    forse sono stato un pò contorto
    sicuramente
     
    Ultima modifica: 18 Ottobre 2018
  2. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.006
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    PHP:

    if($conteggio==0){
    echo 
    'Aggiorna caratteristica ditta';
    }else{
    echo 
    'aaaaaa';
    }
     
  3. nonsochisono

    nonsochisono Nuovo Utente

    Registrato:
    23 Agosto 2012
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Non va perchè memorizza l'ultimo passaggio nella variabile
     
  4. nonsochisono

    nonsochisono Nuovo Utente

    Registrato:
    23 Agosto 2012
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Se il primo If è sempre = 0
    allora $conteggio =0 e non va in else, che poi mi cancellerà intestazione della tablella
    mi sa che ho fatto un casino
     
  5. nonsochisono

    nonsochisono Nuovo Utente

    Registrato:
    23 Agosto 2012
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    PHP:
                while($row5 $stm4->fetch(PDO::FETCH_ASSOC))
                    {

                                            ........
                                                    
    prelevo variabile database

                                        
    ::::::::::
                        }
                        else {
                            
    $conteggio 1;
                            
    //$conteggio = 1;
                        
    }

                            
    ?>
                                                TABELLA........
                               
                           $i++;

                    }
               
                            ALL'ESTERNO DEL CICLO

                       if ( $conteggio == 0) {

                               echo 'Devi aggiornare .......;

                       }

                           else  {
                            echo 'Tutti gli ...............';
                         ?>


                          }
    semplifico un conto e verificare con if all'interno del ciclo, fin qui tutto bene
    ma all'esterno del ciclo come faccio? vorrei vedere se almeno una condizione si è verificata una vola
    grazie
     
  6. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.006
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Dichiara conteggio fuori il ciclo while, cosi:
    PHP:
    $conteggio=0;
    while(......){.....}
    if(
    $conteggio){
    //conteggio == 1
    }else{
    //conteggio == 0
    }
    Altra nota, opterei per metodi che effettuano le operazione che servono... Questa modalità seppur semplice molto spesso induce ad errori. Potresti vedere come implementare (non necessariamente una "classe") delle funzioni che facciano quello che a te serve passando le variabili corrette riusciresti a spezzare la logica in tante piccole parti, questo conviene per fare debug e per controllare meglio il flusso d'elaborazione dati.
     
  7. nonsochisono

    nonsochisono Nuovo Utente

    Registrato:
    23 Agosto 2012
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    ma io verifico la variabile prelevata dal database all'interno del ciclo se è true allora $conteggio =0, altrimenti =1; Fin qui tutto ok
    il problema che una volta finito il ciclo io voglio sapere se per esempio il flusso del programma è passato almeno una volta da else.
    Ma questo non lo posso sapere perchè $conteggio prende il valore dell'ultimo passaggio.
    Non so se mi sono spiegato
     
  8. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.006
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Allora per fare quello che chiedi se ho capito bene..... ti serve sapere il numero di volte?
    Allora prima del while:
    PHP:
    $conta_conteggio=[];
    //altra notazione dove in num è incrementale di conteggio e items sono gli obj aggiornati
    $conta_conteggio_uno=['num'=>0,'items'=>[]];
    while(.....){
    //tutto il tuo codice
    if (! empty ( $risultato_desc_caratteristica_ditta )) {
                    
    $conteggio 0;
                    continue;
                        }
                        else {
                    
    $conteggio 1
              
    //per assurdo credo che ci sia almeno un ID quindi (obj), dove row7['ID'] sarebbe l'identificativo.... naturalmente devi adattarlo.
              
    $conta_conteggio[]=['conteggio'=>1,'element'=>$row7['ID']];
                   
    $conta_conteggio_uno['num']++;
                  
    $conta_conteggio_uno['items'][]=$row7['ID'];
                        }
    }
    //siamo fuori dal ciclo
    //numero di volte che sei entrato in conteggio prima versione
    echo count($conta_conteggio);
    //numero di volte seconda versione
    echo $conta_conteggio_uno['num'];

    //per vedere gli obj aggiornati o cmq sia processati
    //prima versione
    foreach($conta_conteggio as $key=>$value){
         echo 
    $value['element'].' -';
    }
    //seconda versione
    print_r($conta_conteggio_uno['items']);
    non resta che scegliere quello che ti serve sempre se ho centrato il problema.
     
  9. nonsochisono

    nonsochisono Nuovo Utente

    Registrato:
    23 Agosto 2012
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    PHP:
            <?php


                                
    while($row5 $stm4->fetch(PDO::FETCH_ASSOC))
                    {
                                        
    CICLO WHILE
                                        ......
                                        
    PRELEVO VARIABIL  $risultato_desc_caratteristica_ditta

                            
    //QUESTO IF TUTTO OK SE è PIENA LA VARIABILE SALTA
                                //        ALTRIMENTI  PRELEVO I DATI PER LA MIA TABELLA
                        
    if (! empty ( $risultato_desc_caratteristica_ditta )) {
                    
    $conteggio 0;
                    continue; 
                        }
                        else {
                    
    $conteggio 1;                       
                        }
                    
    ?>


                                        TABELLA  QUI TUTTO OK

                               
                    $i++;
                    }               
                    ?>
                </table>
                <input  type="submit" value="Submit"/>
            </form>
        </div>


                                <?php
                                
    //IL PROBLEMA SORGE QUI


                                
    if ( $conteggio == 0) {
                                echo 
    'Devi aggiornare caratteristica_ditta';
                                }
                                else {
                                echo 
    'aaaaaaaaaaaaaaaaaaaaaa';
                               
                                }
    Dove sorge il problema è perchè io voglio sapere all'esterno del ciclo while se la condizione else interna è stata eseguita almeno una volta.
    la variabile $conteggio purtroppo all'esterno non è utilizzabile in quanto memorizza il valore dell'ultimo passaggio all'interno di While
    spero di essere stato più chiaro
     
  10. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.006
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Hai provato il codice?
    Infatti è stata dichiarata una var di tipo array fuori dal ciclo che memorizza il numero di volte e gli items che sono stati aggiornati e/o che comunque sia la condizione "$conteggio=1" sia vera.
    Questo si trova fuori il while
    Questo il tuo codice con il conteggio interno al while con le due variabili conta_conteggio e conta_conteggio uno che saranno valorizzate ad ogni iterazione in cui conteggio sia uno....

    Quale parte fuori al while non funziona?
     
Sto caricando...

Condividi questa Pagina