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

    Problema IF... assurdo ma vero!

    Sono giorni che cerco una soluzione a questo problema apparentemente banale e inesistente ma non riesco a venirne a capo!
    Riscontro un malfunzionamento dell'istruzione IF ELSE.
    Codice PHP:
    $record=2;
    if (
    $record==1) {
         
    // istruzioni che interferiscono!
    } else {
            
    //istruzioni che dovrebbero essere svolte!

    Quello qui sopra è un codice sintetizzato. Ovviamente dovrebbero essere svolte le istruzioni dentro l'else invece vengono eseguite quelle dentro l'if!
    Ho testato la variabile $record (che viene da una parte precedente del programma) ed è effettivamente di tipo numerico e pari a 2.

    Qui sotto vi riporto il codice dentro l'if e l'else... io non so più dove mettere le mani, spero in un vostro aiuto!!!

    Codice PHP:
    $record count($risultati); //$risultati è un array con 2 elementi
    //con un test ho verificato che $record=2

    if ($record==1) {
            
    //SE QUI METTO exit; TUTTO FUNZIONA BENE!!!!!!!!!!
            
    Db_connect2();
        
    $query1 "SELECT * FROM ".$tabella."_utenti WHERE locale='".@$locale."'";
        
    $risultato1 mysql_query($query1);
        
    $row1 = @array_filter(mysql_fetch_array($risultato1));

        if (
    count($row1)>0) {
            
    Db_connect2();
            
    $query "UPDATE ".$tabella."_locali SET dataAggiornamento='2' WHERE username='pippo'";
            if (!
    mysql_query($query)) {
                echo 
    "errore";
                exit;
            } else echo
    "";
            
            echo 
    "<script language=\"javascript\">"
                
    ."invia_dati('aggiornamento.php', {'ph':'','subph':'Reload','fase':'$fase'}, 'post');"
                
    ."</script>";
                exit;
        } else { 
                
            if (......) { 
    //altra condizione
                 //altre istruzioni
            
    } else {
                
    //altre istruzioni
            
    }                        
        }
                            
    } else { 
    // Parte di codice che dovrebbe essere eseguita!

    La cosa strana è che se metto exit; all'interno dell'if (come commentato nel codice) il comportamento anomalo si risolve, il che mi fa pensare che siano le istruzioni interne all'if a dar fastidio ma.. in teoria non dovrebbero essere ignorate?!
    Grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    fai così (le parti mancanti restano invariate):

    Codice PHP:
    $record count($risultati); //$risultati è un array con 2 elementi 
    //con un test ho verificato che $record=2 

    print "#1 ".var_export($recordtrue)."\r\n
    "
    ;
    if (
    $record==1) { 
    print 
    "#2 ".var_export($recordtrue)."\r\n
    "
    ;
    ... ... ...
        } else {  
    print 
    "#3 ".var_export($recordtrue)."\r\n
    "
    ;
            if (......) { 
    //altra condizione 
                 //altre istruzioni 
            
    } else { 
                
    //altre istruzioni 
            
    }                         
        } 
    print 
    "#4 ".var_export($recordtrue)."\r\n
    "
    ;           
    } else {  
    print 
    "#5 ".var_export($recordtrue)."\r\n
    "
    ;
    // Parte di codice che dovrebbe essere eseguita! 
    }
    print 
    "#6 ".var_export($recordtrue)."\r\n
    "

    e posta il risultato dell'output...

  3. #3
    Ciao,
    nella documentazione di count() (http://php.net/manual/en/function.count.php)
    puoi ben leggere:

    Return Values:
    Returns the number of elements in var. If var is not an array or an object with implemented Countable interface, 1 will be returned.. There is one exception, if var is NULL, 0 will be returned.

    ora sei proprio sicuro sicuro che $record sia 2??
    metti un echo $record subito dopo $record = count($risultati);

    perché forse il rpoblema è in $risultati che non è Countable e allora ti restituisce 1...

  4. #4
    Originariamente inviato da philbert
    ora sei proprio sicuro sicuro che $record sia 2??
    metti un echo $record subito dopo $record = count($risultati);
    Si Philbert, ho già messo l'echo e il valore è proprio 2. Ho fatto anche verifiche di tipo ISSET, IS_INT ecc, tutte positive.

    Eiyen provo subito la tua soluzione e vediamo cosa esce fuori!
    Grazie a entrambi per la prontezza nella risposta

  5. #5
    Originariamente inviato da eiyen
    fai così (le parti mancanti restano invariate):
    ...
    e posta il risultato dell'output...
    Eiyen ho provato la soluzione. Inserendo solo i print non vedo nulla, nel senso che il redirect contenuto nell'IF incriminato non mi dà tempo di vedere l'output. Ma guardando il database vedo appunto che il campo dataAggiornamento viene posto a due (immediatamente prima dell'if è di sicuro a zero), quindi viene eseguito l'if anzichè l'else.

    Se metto un exit; dentro l'if prima dell'aggiornamento database, mi viene eseguito l'else (cioè l'anomalia scompare) e ottengo #1 2 #5 2. Ma ovviamente non posso usare l'exit come soluzione, altrimenti non mi verrebbero eseguite le istruzioni nell'if laddove $record valga 1.

    Non riesco proprio a capire cosa mandi in tilt l'if

  6. #6
    Originariamente inviato da scrabionau77
    Eiyen ho provato la soluzione. Inserendo solo i print non vedo nulla, nel senso che il redirect contenuto nell'IF incriminato non mi dà tempo di vedere l'output.
    Magari commentando il redirect...?!?!?!


    Originariamente inviato da scrabionau77
    Se metto un exit; dentro l'if prima dell'aggiornamento database, mi viene eseguito l'else (cioè l'anomalia scompare)
    Un exit interrompe l'esecuzione dello script per cui non vedo come possa eseguire il codice all'interno dell'else.
    Inoltre, se è già entrato nell'if come può eseguire anche l'else?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Ammettilo, tu ci stai nascondendo qualcosa!

    Perché una cosa è certa se tu fai
    Codice PHP:
    if ($record==1) {
         
    // istruzioni che interferiscono!
    } else {
            
    //istruzioni che dovrebbero essere svolte!

    e ti entra nell'if allora $record=1!!!!
    di qui non si scappa.

    quindi commenta tutto il codice dentro la if e tutto il codice dentro la else.

    Ora dentro la if metti solo
    Codice PHP:
    echo 'sono nella if'
    e dentro la else metti solo
    Codice PHP:
    echo 'sono nella else'
    cosa ti stampa????

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ...al posto del redirezionamento metti un semplice "print 'redirezionamento...';" o simile... può darsi che lo script sia richiamato prima con $record==2 e poi successivamente con $record==1? magari dentro l'else c'è un redirezionamento anche lì?

  9. #9
    Originariamente inviato da eiyen
    ...al posto del redirezionamento metti un semplice "print 'redirezionamento...';" o simile... può darsi che lo script sia richiamato prima con $record==2 e poi successivamente con $record==1? magari dentro l'else c'è un redirezionamento anche lì?
    Dentro l'else c'è un redirect, ma prima del redirect pongo dataAggiornamento=4 nel database. Quindi se venisse eseguito l'else vedrei il valore 4 nel db, non il valore 2!

    Comunque sto commentando tutti i redirect, poi rieseguo il codice e posto i risultati.

  10. #10
    Originariamente inviato da philbert
    Ammettilo, tu ci stai nascondendo qualcosa!

    Perché una cosa è certa se tu fai
    Codice PHP:
    if ($record==1) {
         
    // istruzioni che interferiscono!
    } else {
            
    //istruzioni che dovrebbero essere svolte!

    e ti entra nell'if allora $record=1!!!!
    di qui non si scappa.

    quindi commenta tutto il codice dentro la if e tutto il codice dentro la else.

    Ora dentro la if metti solo
    Codice PHP:
    echo 'sono nella if'
    e dentro la else metti solo
    Codice PHP:
    echo 'sono nella else'
    cosa ti stampa????
    Se metto così funziona perfettamente (sono nella else), ma se lascio il codice originale esegue il contenuto della if... assurdo... ora tolgo i redirect e vedo cosa ottengo

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.