Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [PHP][boolean] Dati boolean e operatori

    Ciao, premetto che sono nuovo del forum e anche un neofita in PHP. Ho un problema con una funzione che verifica che ci sia l'input utente e che non contenga altri caratteri oltre a quelli alfanumerici, [spazio], [_] e [-] se questo accade restituisce FALSE atrimenti TRUE. Il mio dubbio nasce dal fatto che il tipo di dati boolean può essere 1 - ON - TRUE - YES oppure 0 - OFF - FALSE - NO. In teoria dovrebbero essere equivalenti quindi è possibile utilizzare uno o un'altro indistintamente. Ma provando un esempio preso da un libro la funzione restituisce sempre TRUE se utilizzo TRUE (come indicato sul libro) invece funziona correttamente se uilizzo 1 (provato da me); ma in teoria se non ho capito male 1 = TRUE = ON = YES). Ecco le due funzioni:

    Codice PHP:
    // QUESTA FUNZIONE FUNZIONA CORRETTAMENTE
    public function verificaNomeUtente($nome_utente)
    {
        if (
    $nome_utente == '' or ereg('[^[:alnum:] _-]'$nome_utente) === 1)
            return 
    FALSE;
        else
            return 
    TRUE;
    }

    // QUESTA FUNZIONE RESTITUISCE SEMPRE TRUE
    public function verificaNomeUtente($nome_utente)
    {
        if (
    $nome_utente == '' or ereg('[^[:alnum:] _-]'$nome_utente) === TRUE)
            return 
    FALSE;
        else
            return 
    TRUE;

    Ma se cambio l'operatre [===] con [==] nella seconda funzione sembra funzionare correttamente. Eccola:

    Codice PHP:
    // QUESTA FUNZIONE SEMBRA FUNZIONARE CORRETTAMENTE
    public function verificaNomeUtente($nome_utente)
    {
        if (
    $nome_utente == '' or ereg('[^[:alnum:] _-]'$nome_utente) == TRUE)
            return 
    FALSE;
        else
            return 
    TRUE;

    So che [==] è l'operatore di Uguaglianza e restituisce TRUE se i due operandi hanno lo stesso valore; mentre [===] è l'operatore di Identità e restituisce TRUE se oltre ad avere lo stesso valore sono dello stesso tipo.
    Ma il tipo di dato non è sempre boolean?

    Ho provato inoltre a non inserire nulla nel form e solo così sembra funzionare correttamente tutto, anche la seconda funzione che restituisce sempre TRUE, quindi quello che non funziona è cosa restituisce [ereg]?

    Mi sembra una cosa banale, mi sto perdendo in un bicchiere d'acqua.
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    http://fr.php.net/manual/en/function.ereg.php

    ereg restituisce un int, non un boolean ;-)

    ciao

  3. #3
    Grazie per il link gianiaz!
    Quindi non passando il terzo parametro opzionale se l'espressione_regolare si verifica o la stringa è 0 restituisce [int(1)] altrimenti restituisce [int(0)].
    Quello che non ho chiaro è perchè 1 == TRUE ---> TRUE mentre 1 === TRUE ---> FALSE quando TRUE = 1 e FALSE = 0; Quindi non è la stessa cosa identificare un boolean con 1 - 0 o con TRUE - ON - YES - FALSE - OFF - NO? O meglio hanno lo stesso valore ma sono di tipi diversi?
    Tra quelli che ho provato qual'è il modo migliore per realizzare la funzione che ho postato sopra? Io ritengo che quando si utilizzano boolean è meglio usare [===] ma chiedo a voi consiglio.

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Un esempio che ti può chiarire è quello della funzione strpos.

    http://fr.php.net/manual/en/function.strpos.php

    Questa ritorna la posizione del carattere che stai cercando all'interno di una stringa.

    ad esempio:

    codice:
    $pos = strpos('stringa', 'r'); // ritorna 2 
    
    // modo errato 
    if($pos == false) {
      echo "non ho trovato nulla" 
    }  
    
    // modo corretto
    if($pos === false) {
      echo "non ho trovato nulla" 
    }
    Il primo metodo è errato perchè se io cercassi la lettera "s" avrei come risultato l'intero 0.
    0 in questo caso è sia un risultato che equivalente a false.
    Quindi per ottenere il risultato che voglio faccio un controllo anche sul tipo utilizzando l'operatore "===", cosi se ho un falso vero e proprio allora non ho risultati.

    In questo e altri casi particolari si usa questo operatore, ma nella maggior parte dei casi fa comodo utilizzare l'operatore == o != in favore di === e !==.

    io farei cosi:
    codice:
    public function verificaNomeUtente($nome_utente)
    {
        if (trim($nome_utente) == '' or ereg('[^[:alnum:] _-]', $nome_utente)) {
            return true;
        } else {
            return false;
        }
    }

    [/code]

  5. #5
    Ho provato e funziona correttamente! ora do una bella spulciata al manuale! Grazie ancora.

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.