Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    37

    controllo su tutte le righe di una tabella

    Salve a tutti!
    Il mio problema è il seguente:
    ho una tabella dove vengono riportate le potenze master e slave di alcuni contatori di energia. vorrei fare dei controlli per cui se ad esempio le potenze sono entrambe zero mi si valorizzi il campo stato a 2. Ho scritto il codice seguente:

    Codice PHP:

    while ($row mysql_fetch_assoc ($result)) {
      
    extract ($row)                                   ;
      echo 
    '<tr>'                                      ;
      echo 
    "<td align = 'center'>$id</td>"             ;
           
    //caso 1 
      
    IF ($potenza_m>and $potenza_s>0) {
      
    $query2="UPDATE Tab_Potenze SET stato =1" 
      }
    //caso 2
      
    ELSEIF ($potenza_m==and $potenza_s==0
    {
      
    $query2="UPDATE Tab_Potenze SET stato =2" 
      }  

      
    $result mysql_query ($query2$db) or die (mysql_error ($db));                               
                      } 

    ma il risultato è che mi imposta ad 1 lo stato per tutte le righe del DB anche se alcuni contatori hanno entrambe le potenze a zero.


    potete aiutarmi?

    Grazie.

  2. #2
    Fai un echo di $potenza_m e $potenza_s per vedere i valori che assumono di volta in volta.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    37
    Ciao Satifal grazie per l'interessamento.

    ho modificato la seconda istruzione "echo" in questo modo:

    Codice PHP:
      echo "<td align = 'center'>$id -- PM=$potenza_m  PS=$potenza_s</td> 
    "  

    ed ottengo la lista delle potenze che ti riporto

    1 -- PM=255.30 PS=259.40
    2 -- PM=241.60 PS=241.70
    3 -- PM=0.00 PS=0.00
    4 -- PM=299.70 PS=299.10
    5 -- PM=261.50 PS=260.20

    quello che vorrei accadesse è che per il contatore tre mi settasse il campo "stato" a "2".
    invece è come se verificasse che la condizione è vera per la prima riga e la applica a tutta la tabella

  4. #4
    Il problema non è nell'if, ma nelle query. Così come sono impostate lo stato viene modificato per tutti i record per cui alla fine trovi lo stato corrispondente all'ultima query eseguita. Devi aggiungere una condizione where:

    Codice PHP:
    $query2 "UPDATE Tab_Potenze SET stato = 1 WHERE id = $id"
    ovviamente ho dato per scontato che nella tabella ci fosse un campo ID. Eventualmente devi modificare la query in base alla struttura della tabella.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    37
    Si ovviamente la tabella ha un campo ID.
    Ho provato la modifica che mi hai suggerito ma non mi funziona.
    ho fatto la prova anche mettendo la clausola where solo sul primo ID ma non mi imposta correttamente lo stato. lo script viene eseguito senza errori ma non va...

    Codice PHP:
    $query2 "UPDATE inv_dati SET stato = 2  WHERE id = 1"         

  6. #6
    Originariamente inviato da Giandoxx
    Si ovviamente la tabella ha un campo ID.
    Ho provato la modifica che mi hai suggerito ma non mi funziona.
    ho fatto la prova anche mettendo la clausola where solo sul primo ID ma non mi imposta correttamente lo stato. lo script viene eseguito senza errori ma non va...

    Codice PHP:
    $query2 "UPDATE inv_dati SET stato = 2  WHERE id = 1"         
    Ma hai modificato ENTRAMBE le query?

    Codice PHP:
    ...
    //caso 1 
      
    IF ($potenza_m>and $potenza_s>0) {
      
    $query2="UPDATE Tab_Potenze SET stato =1 WHERE id = $id
      }
    //caso 2
      
    ELSEIF ($potenza_m==and $potenza_s==0
    {
      
    $query2="UPDATE Tab_Potenze SET stato =2 WHERE id = $id
      }  
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    37
    avevi ragione non avevo modificato entrambe le query!!
    il comportamento però resta poco lineare: mi ha aggiornato correttamente lo stato sul primo record e sull'ultimo ma quelli in mezzo non me li valorizza correttamente (li avevo impostati io tutti al valore 5).

    1 -- PM=81.70 PS=102.10 Stato=1
    2 -- PM=274.80 PS=269.60 Stato=5
    3 -- PM=270.70 PS=270.30 Stato=5
    4 -- PM=0.00 PS=356.40 Stato=5
    5 -- PM=0.00 PS=0.00 Stato=0

  8. #8
    Posta il codice aggiornato.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    37
    mi sono fatto un db di test dove ho importato la tabella delle potenze, così posso fare tutti i test che voglio in un ambiente "pulito".

    riporto tutto il codice cosi forse si capisce dove sbaglio:

    Codice PHP:
    // Collegamento al DB    
         
    $db mysql_connect ('localhost''root','') or die ('nun se collega');
         
    mysql_select_db ('test'$db) or die (mysql_error ($db));

    //Query per la selezione dei dati 
    $query 'SELECT * FROM tab_potenze'
    $result mysql_query ($query$db) or die (mysql_error ($db));
      
    //estrazione dei dati  
      
    while ($row mysql_fetch_assoc ($result)) {
      
    extract ($row)                                       ;
      echo 
    '<tr>'                                          ;
      echo 
    "<td align = 'center'>$id -- PM=$potenza_m  PS=$potenza_s Stato=$stato</td>
    "    
    ;
                                              } 
                                           
        
     
    //caso 1  
      
    IF ($potenza_m>and $potenza_s>0) { 
      
    $query2="UPDATE tab_potenze SET stato =1 WHERE id= $id;  
      
    $result2 mysql_query ($query2$db) or die (mysql_error ($db));   
      } 
    //caso 2 
      
    ELSEIF ($potenza_m==and $potenza_s==0)    { 
      
    $query2="UPDATE tab_potenze SET stato =2 WHERE id= $id;  
      
    $result2 mysql_query ($query2$db) or die (mysql_error ($db));   
      
      } 
    il risultato che ottengo è il seguente:

    1 -- PM=256.20 PS=246.50 Stato=5
    2 -- PM=166.10 PS=278.50 Stato=5
    3 -- PM=278.50 PS=280.70 Stato=5
    4 -- PM=0.00 PS=0.00 Stato=5
    5 -- PM=379.70 PS=379.40 Stato=5

    cioè non mi fa il controllo e non imposta correttamente lo stato.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.