Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: IF: AND, OR o entrambi

  1. #1

    IF: AND, OR o entrambi

    Sto creando un piccolo contatore visite. Tra gli altri campi ci sono questi:
    Codice PHP:
    $ip $_SERVER['REMOTE_ADDR'];
    $altro $_SERVER['HTTP_USER_AGENT'];
    $host_user gethostbyaddr($ip); 
    Ho dei problemi con il campo $altro e $host_user
    Ho notato che $altro oltre a registrarmi:
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
    Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0
    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
    mi registra anche:
    Apache-HttpClient/4.1.1 (java 1.5) che ritengo inutile

    $host_user oltre a registrarmi:
    host199-213-dynamic.31-79-r.retail.telecomitalia.it
    79.97.6.145
    93-45-68-204.ip101.fastwebnet.it
    dynamic-adsl-94-34-3-27.clienti.tiscali.it
    mi registra anche:
    crawl-66-249-72-23.googlebot.com
    msnbot-157-56-93-209.search.msn.com che ritengo inutili

    Le voci evidenziate nel contatore visite le ritengo inutili per il fatto che occupano centinaia di record contro le poche decine delle altre voci.

    Il problema della IF
    Ho cercato di limitare la registrazione di queste voci con una IF ma non funziona:
    ne ho provare due.
    Il primo:
    Codice PHP:
    if ($altro != "Apache-HttpClient/4.1.1 (java 1.5)" || substr($host_user,0,5) != "crawl" || substr($host_user,0,6) != "msnbot") {
    //  esegue registrazione

    Il secondo:
    Codice PHP:
    if ($altro != "Apache-HttpClient/4.1.1 (java 1.5)" && substr($host_user,0,5) != "crawl" && substr($host_user,0,6) != "msnbot") {
    //  esegue registrazione

    Purtroppo sembra non funzionare nessuno dei due. Continuo a vedermi registrate tutte le voci indesiderate.
    C'è un'altro modo di istruire questa IF?

    Grazie

  2. #2
    Grazie raven74.
    Per quel che riguarda le stringhe sono giuste (quelle che vedi sono un semplice copia-incolla di quel che leggo nella tabella del DB)

    Per Apache-HttpClient/4.1.1 (java 1.5) è una voce ricorrente tra i vari record
    Per crawl-66-249-72-23.googlebot.com e msnbot-157-56-93-209.search.msn.com ho notato che a volte cambiano i numeri contenuti nell'intera stringa e per questo ho usato la funzione substr() basandomi solo cui primi caratteri.

    Per la IF ho provato sia con AND ( && ) che con OR ( || ), ma i dati non vengono filtrati come dovrebbero.

    Il vero problema non è tanto delle visite che ricevo da questi 3 elementi, il problema è che registrando le loro continue visite mi ritrovo una tabella con svariate migliaia di record, mentre quelle vere sono molto meno. Il mio è uno spazio web free quindi ho paura di superare lo spazio disponibile.
    In caso contrario, se non riesco a risolvere queste registrazioni indesiderate, mi vedrò costretto a fare a meno del contatore.


  3. #3
    Grazie ancora raven74
    farò di più. stamperò anche che cosa ottendo con la funzione substr() e poi farò sapere.


  4. #4
    forse ho risolto con questo:
    Codice PHP:
    if ($altro != "Apache-HttpClient/4.1.1 (java 1.5)" && (substr($host_user,0,5) != "crawl" || substr($host_user,0,6) != "msnbot")) {
    ...................

    Ho racchiuso tra parentesi le due substr()
    Spero che così mi funzioni

  5. #5
    GRRRRRRRRRRRRRRR
    No mi sono perso. Gli indesiderabili continuano ad essere registrati
    Se continua così tolgo il contatore di visite

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da micdas
    Ho racchiuso tra parentesi le due substr()
    Magari se ci metti un AND anche dentro, invece di quell'or che non ha senso...

  7. #7
    Vi ringrazio per i suggerimenti.
    A dire il vero tra AND e OR le ho provate entrambe: tutti AND, tutti OR.
    Quella con le parentesi è l'ultima prova che stavo facendo.
    è logica, non PHP
    Questo lo so, ma come mi capita spesso in certe circostanze è la perdita della logica che mi rovina...vedrò di calmarmi.
    O le stringhe non sono esattamente quelle (basta uno spazio prima o dopo)
    per creare la IF, per non sbagliare ho fatto copia-incolla.
    L'ultima cosa che mi rimane, per eventuali spazi invisibili, è di usare TRIM o, in alternativa, altra funzione al posto di substr(), magari strpos() a cui non interessa l'esatta collocazione della stringa da cercare.

    Ma il tempo è tiranno, specie la mattina, per me, per cui le prove le farò questo pomeriggio, anche perchè non è che la verifica la possa fare subito in quanto i tre indesiderati non è che stanno lì ogni minuto ma vengono solo occasionalmente.

    Comunque vi farò sapere

    Grazie di nuovo e.............

  8. #8
    Ah dimenticavo
    Il codice:
    Codice PHP:
    $table_count "tab_stats";
    $uagent $_SERVER['HTTP_USER_AGENT'] . "
    "
    ;
    $ua getBrowser();            //    funzione personale per $browser e $so
    $browser $ua['name'] . " " $ua['version'];
    $so $ua['platform_vers'];
    $ip $_SERVER['REMOTE_ADDR'];
    $pagina_visitata $_SERVER['REQUEST_URI'];
    $pagina_provenienza $_SERVER["HTTP_REFERER"];
    $host_user gethostbyaddr($ip);
    $altro $_SERVER['HTTP_USER_AGENT'];
    $fields = array (
        
    "ip",
        
    "pagina_visitata",
        
    "pagina_provenienza",
        
    "host_user",
        
    "browser",
        
    "so",
        
    "altro"
    );
    $values = array (
        
    "'" $ip "'",
        
    "'" $pagina_visitata "'",
        
    "'" $pagina_provenienza "'",
        
    "'" $host_user "'",
        
    "'" $browser "'",
        
    "'" $so "'",
        
    "'" $altro "'"
    );
    $campi implode (", "$fields); 
    $valori implode (", "$values);
    $Query_ins "INSERT INTO " $table_count " (" $campi ") VALUES (" $valori ");";    
    $link connect_db();        //    funzione personale
    $Query "SELECT * FROM ".$table_count;

    if (
    $altro != "Apache-HttpClient/4.1.1 (java 1.5)" && (substr($host_user,0,5) != "crawl" && substr($host_user,0,6) != "msnbot")) {
        if (
    $num_rec num_record($Query$link)) {        //    funzione personale
            
    if (!verify_user($table_count$link$ip$pagina_visitata)) {
                
    $result mysql_query($Query_ins);
                if (!
    $result) {
                    echo 
    mysql_error() . "
    \n"
    ;
                }
            }
        } else {
            
    $result mysql_query($Query_ins);
            if (!
    $result) {
                echo 
    mysql_error() . "
    \n"
    ;
            }
        }

    Verso l'inizio del codice c'è il richiamo di una mia funzione "getBrowser()" per rilevare il browser ed il SO

  9. #9
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Hai provato così

    Codice PHP:
    if ($_SERVER['HTTP_USER_AGENT']!='Apache-HttpClient/4.1.1 (java 1.5)' &&
        
    strpos($host_user'crawl')!==&&
        
    strpos($host_user'msnbot')!==0

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  10. #10
    Ciao neroux,
    infatti è quel che intendo fare appena posso però. Oggi è una giornataccia per me. Forse questo pomeriggio ci provo.
    Purtroppo, siccome le visite di questi indesiderati sono sporadiche seppur troppo numerose, il test durerà alcuni giorni.

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