Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Un errore che ti posso segnalare a colpo d'occhio è l'utilizzo di = al posto di == nell'if. in pratica inizializzi $browser ad un valore piuttosto che verificarne il contenuto.

    in più quel Mozilla buttato lì dopo = cos'è?

    Se vuoi verificare se una parolina è constnuta in una stringa puoi usare strpos

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

    codice:
    if(strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla")===false)
       echo "Sbagliato";
    else
       echo "Figata";
    mi raccomando il === ovvero tre volte uguale. se lo vuoi negare usi !==

    poi dipende dai gusti lo sbagliato e la figata

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    $_SERVER['HTTP_USER_AGENT']

    non restituisce semplicemente "Mozilla", ma una stringa più lunga, quindi
    if($browser == "Mozilla")
    sarà sempre false

    prova a stampare la variabile e vedi cosa contiene.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    Originariamente inviato da :V:
    Naturalmente non sara figata e sbagliato quello che farà, ma sicuramente una funzione sicuramente più utile come ad esempio reindirizzare con un: header ("location: ...") ad una pagina appositamente creata per un tipo di browser.... cmq lo script che hai scritto se non sbaglio si potrebbe scrivere anche cosi:

    if(strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla")==Mozilla)
    echo "Sbagliato";
    else
    echo "Figata";

    Giusto?
    Sbagliato.

    1: strpos serve per cercare la posizione della parola in una stringa.

    2: == Mozilla? Mozilla senza apici genererebbe errore, ed in ogni caso lì è da indicare al limine la posizione numerica della stringa, non il browser

    3: http_user_agent non ti stampa "Mozilla", "Internet Explorer", "Safari" e simili; la stringa è più complessa.

    Ti consiglio di fare riferimento alla pagina ufficiale: http://php.net/manual/en/reserved.variables.server.php

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    A te funziona questo? Perché è un po' impossibile.

    Codice PHP:
    if(strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla")==Mozilla)
    echo 
    "Sbagliato";
    else
    echo 
    "Figata"

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    Evidentemente tu non hai abilitato la visione degli errori di PHP.

    Mozilla come lo hai scritto tu senza apici è una costante, e ti da errore se non l'hai definita.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    Il fatto di mettere == 'Mozilla' non ha senso!

    La funzione strpos RITORNA UN VALORE NUMERICO che indica la posizione della parola/lettera che hai scelto: se tu confronti quel risultato con una stringa è IMPOSSIBILE che ti possa funzionare. Pensare che funzioni non vuol dire che funzioni.

    E' come se tu metti acqua in un'auto e questa inizia ad andare avanti; il fatto che va avanti perché è in discesa non vuol dire che l'acqua funzioni da carburante.

    Non saprei come aiutarti, in giro ci sono molti script pronti all'uso che trattano al dovere il detecting browser, prova con google.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    218
    Provo a spiegarti quello che stai facendo un'ultima volta, poi lascio perdere e chiudo quì.

    Ti traduco questa linea di codice in parole comprensibili.

    Codice PHP:
    if(strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla") == Mozilla)
       echo 
    "Sbagliato";
    else
       echo 
    "figata"
    Se IL NUMERO della posizione della parola Mozilla all'interno della variabile $_SERVER è uguale a alla costante (che tra l'altro non hai definito e non ha valore) chiamata Mozilla stampa "sbagliato", altrimenti "figata".

    Ora, dato che la costante Mozilla non è difinita, il valore numerico restituito dalla funzione strpos sarà sempre diverso da Mozilla, per cui con qualsiasi browrser tu vedrai figata.

    Prova ad aprire Internet Explorer e vedrai.

  8. #8
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Utilizzare la scritta Mozilla nel codice equivale ad utilizzare una costante. Dato che tale costante non è definita, php la trasforma automaticamente in "Mozilla" se serve una stringa e in 0 se serve un numero e dovrebbe emettere la Notice come segnale di errore. Provando il confronto di Mozilla==flase ritorna falso mentre Mozilla==true ritorna true

    La stringa di codice

    strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla")==Mozilla

    sfrutta quindi un abominio di PHP .

    Se avessi letto il link del manuale sapresti che strpos restituisce un valore maggiore o uguale a 0, che indica la posizione iniziale della stringa cercata all'interno della stringa in cui cerchi. Nel caso in cui la stringa cercata non sia presente ritorna false numericamente simile allo 0 se non si utilizza l'operatore di confronto ===.

    Quindi cosa succede? La scritta Mozilla viene interpretata come 0 quando la strpos ritorna un numero e come true o "Mozilla" quando ritorna false quindi:

    1)$_SERVER['HTTP_USER_AGENT'] contiene Mozilla come parola iniziale la condizione risulta verificata
    2)$_SERVER['HTTP_USER_AGENT'] contiene Mozzilla in posizione successiva alla 0 o non la contiene affatto allora la condizione non risulta verificata

    E' per questo che ti sembra funzioni ma come codice fa veramente schifo


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.