[PHP] Controllare condizione ciclo While

nonsochisono

Nuovo Utente
23 Ago 2012
7
0
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_NAME, DB_USER, DB_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 == 1 ) {
    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:

nonsochisono

Nuovo Utente
23 Ago 2012
7
0
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
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 ...............';
?>
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.
 

nonsochisono

Nuovo Utente
23 Ago 2012
7
0
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
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;
}
?>

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.
 

nonsochisono

Nuovo Utente
23 Ago 2012
7
0
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Hai provato il codice?
Dove sorge il problema è perchè io voglio sapere all'esterno del ciclo while se la condizione else interna è stata eseguita almeno una volta.
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.
$conta_conteggio=[];
//altra notazione dove in num è incrementale di conteggio e items sono gli obj aggiornati
$conta_conteggio_uno=['num'=>0,'items'=>[]];
Questo si trova fuori il while
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'];
}
}
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?
//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']);
 
Discussioni simili
Autore Titolo Forum Risposte Data
K [PHP] Controllare dati database tra due valori PHP 18
L [PHP] if con array per controllare l'ip locale PHP 1
Fede72 Controllare le checkbox con PHP PHP 6
Jonn [PHP] Controllare l'inizio di una stringa PHP 5
J Php ajax sql controllare se l'id esiste in una tabella db PHP 2
M PHP controllare sia attiva una sola istanza del codice PHP 0
T controllare gli errori nel log di php PHP 1
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8

Discussioni simili