IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mysql Mobile_Detect.php et firefox 9 [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut Mysql Mobile_Detect.php et firefox 9
    Bonjour,

    j'ai un petit souci de détection de site mobile depuis quelques jours :
    Avec Internet Explorer : le navigateur est bien détecté
    Avec Mozilla Firefox 9 : le navigateur est considéré comme "smartphone"...

    Merci de votre aide !

    Source :
    http://code.google.com/p/php-mobile-detect/

    ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // pour detecter les smartphones et utiliser le bon style CSS...
    include("Mobile_Detect.php");
    function detection_mobile()
    {
    	global $bandeau_non_connecte, $bandeau_connecte, $nom_style, $message_depart;
    	$detect = new Mobile_Detect();
    	if ($detect->isMobile())
    	{
    		$message_depart = '<br/>'.'Site mobile'.'<br/>';
    		$nom_style = "style_mobile.css";
    		$bandeau_non_connecte = "bandeau_mobile.php";
    		$bandeau_connecte = "bandeau_membres_mobile.php";
    		return $bandeau_non_connecte;
    		return $bandeau_connecte;
    	}
    	else
    	{
    		$message_depart = '<br/>'.'Site classique'.'<br/>';
    		$nom_style = "style.css"; 
    		$bandeau_non_connecte = "bandeau.php";
    		$bandeau_connecte = "bandeau_membres.php";
    		return $bandeau_non_connecte;
    		return $bandeau_connecte;
    	}
    }
    Avec firefox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bandeau_non_connecte = "bandeau_mobile.php";
    Avec I.E. 7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bandeau_non_connecte = "bandeau.php";

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    tu fais deux return dans chacune de tes conditions...renvois un array à la place et tu pourrai même le faire en dehors de ta condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function detection_mobile()
    {
    	$parametres = array('bandeau_non_connecte' => "bandeau.php",
    				    'bandeau_connecte' => "bandeau.php",
    				    'nom_style' => "style.css", 
    				    'message_depart' => '<br/>'.'Site classique'.'<br/>');// par défaut
    	$detect = new Mobile_Detect();
    	if ($detect->isMobile())//on écrase les anciens parametres avec les nouveaux
    	{
    		$parametres['message_depart'] = '<br/>'.'Site mobile'.'<br/>';
    		$parametres['nom_style'] = "style_mobile.css";
    		$parametres['bandeau_non_connecte'] = "bandeau_mobile.php";
    		$parametres['bandeau_connecte'] = "bandeau_membres_mobile.php";
    	}
    	return $parametres;
    }
    Je ne dis pas que ça résoudra ton problème (à voire)...
    Développeur informatique contrarié...

  3. #3
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Bonjour vorace,

    Hélas, cela n'a rien changé, il détecte toujours la version mobile au lieu du classique...

    j'ai un message d'erreur en plus :
    Warning: include() [function.include]: Failed opening '' for inclusion (include_path='/include:.:/usr/php5/lib/php') in index.php on line 26


    ligne concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
    la fonction modifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    include("Mobile_Detect.php");
    function detection_mobile()
    {
    	$parametres = array('bandeau_non_connecte' => "bandeau.php",
    				    'bandeau_connecte' => "bandeau.php",
    				    'nom_style' => "style.css", 
    				    'message_depart' => '<br/>'.'Site classique'.'<br/>');	// par défaut
    	$detect = new Mobile_Detect();
    	if ($detect->isMobile())	//on écrase les anciens parametres avec les nouveaux
    	{
    		$parametres['message_depart'] = '<br/>'.'Site mobile'.'<br/>';
    		$parametres['nom_style'] = "style_mobile.css";
    		$parametres['bandeau_non_connecte'] = "bandeau_mobile.php";
    		$parametres['bandeau_connecte'] = "bandeau_membres_mobile.php";
    	}
    	return $parametres;
    }
     
    function bandeau_detection() 	// si l'utilisateur est connecté, c'est le bandeau membre sinon c'est le bandeau classique...
    	{
    		global $bandeau, $bandeau_non_connecte, $bandeau_connecte;
    		if (!isset($_SESSION['pseudo']) || $_SESSION['pseudo']=='')	// bandeau classique si pas connecté
    		{ $bandeau = $parametres['bandeau_non_connecte'];
    			return $bandeau; }
    		else 	// bandeau membre si connecté
    		{ $bandeau = $parametres['bandeau_connecte'];
    			return $bandeau; } 
    	}
    je ne vois pas ?
    Merci.

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Hélas, cela n'a rien changé, il détecte toujours la version mobile au lieu du classique...
    Faut regarder ce qui se fait dans cette classe.

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    class Mobile_Detect
    {
     
    	protected $accept;
    	protected $userAgent;
    	protected $isMobile = false;
    	protected $isAndroid = null;
    	protected $isAndroidtablet = null;
    	protected $isIphone = null;
    	protected $isIpad = null;
    	protected $isBlackberry = null;
    	protected $isBlackberrytablet = null;
    	protected $isOpera = null;
    	protected $isPalm = null;
    	protected $isWindows = null;
    	protected $isWindowsphone = null;
    	protected $isGeneric = null;
    	protected $devices = array(
    		"android" => "android.*mobile",
    		"androidtablet" => "android(?!.*mobile)",
    		"blackberry" => "blackberry",
    		"blackberrytablet" => "rim tablet os",
    		"iphone" => "(iphone|ipod)",
    		"ipad" => "(ipad)",
    		"palm" => "(avantgo|blazer|elaine|hiptop|palm|plucker|xiino)",
    		"windows" => "windows ce; (iemobile|ppc|smartphone)",
    		"windowsphone" => "windows phone os",
    		"generic" => "(kindle|mobile|mmp|midp|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap|opera mini)"
    	);
     
    	public function __construct()
    	{
    		$this->userAgent = $_SERVER['HTTP_USER_AGENT'];
    		$this->accept = $_SERVER['HTTP_ACCEPT'];
     
    		if (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE'])) {
    			$this->isMobile = true;
    		} elseif (strpos($this->accept, 'text/vnd.wap.wml') > 0 || strpos($this->accept, 'application/vnd.wap.xhtml+xml') > 0) {
    			$this->isMobile = true;
    		} else {
    			foreach ($this->devices as $device => $regexp) {
    				if ($this->isDevice($device)) {
    					$this->isMobile = true;
    				}
    			}
    		}
    	}
     
    	/**
    	 * Overloads isAndroid() | isAndroidtablet() | isIphone() | isIpad() | isBlackberry() | isBlackberrytablet() | isPalm() | isWindowsphone() | isWindows() | isGeneric() through isDevice()
    	 *
    	 * @param string $name
    	 * @param array $arguments
    	 * @return bool
    	 */
    	public function __call($name, $arguments)
    	{
    		$device = substr($name, 2);
    		if ($name == "is" . ucfirst($device) && array_key_exists(strtolower($device), $this->devices)) {
    			return $this->isDevice($device);
    		} else {
    			trigger_error("Method $name not defined", E_USER_WARNING);
    		}
    	}
     
    	/**
    	 * Returns true if any type of mobile device detected, including special ones
    	 * @return bool
    	 */
    	public function isMobile()
    	{
    		return $this->isMobile;
    	}
     
    	protected function isDevice($device)
    	{
    		$var = "is" . ucfirst($device);
    		$return = $this->$var === null ? (bool) preg_match("/" . $this->devices[strtolower($device)] . "/i", $this->userAgent) : $this->$var;
    		if ($device != 'generic' && $return == true) {
    			$this->isGeneric = false;
    		}
     
    		return $return;
    	}
     
    }
    Donc ça repose en grande partie sur ceci :
    $_SERVER['HTTP_USER_AGENT']
    $_SERVER['HTTP_X_WAP_PROFILE']
    $_SERVER['HTTP_PROFILE']

    Affiche ces données là pour voir ce que ça contient.
    Si ton modèle de mobile n'est pas répertorié dans le tableau $device, alors il ne sera pas considéré comme un mobile. Faudra le rajouter au besoin.

    Concernant le Warning, quel code il y a il à la ligne 26 du index.php ? (et au alentour)
    Si cela concerne l'inclusion du bandeau, c'est que le chemin où ce trouve le fichier ($bandeau) n'est pas le bon.
    Où ce trouve t-il dans ton arborescence ? Il doit être dans un répertoire non ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    @ RunCodePhp :

    Voici l'affichage à l'écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HTTP_USER_AGENT :Mozilla/5.0 (Windows NT 6.0; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
    HTTP_X_WAP_PROFILE :
    HTTP_PROFILE :
    ligne 26 du index.php : include du bandeau...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ....
    <body>
    <?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
    <div id="mainContent">
    ...
    le bandeau se trouve à la racine comme les autres fichiers...

    Merci de votre aide !

  6. #6
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    ça fonctionne à nouveau !

    fonction modifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    // pour detecter les smartphones et utiliser le bon style CSS...
    include("Mobile_Detect.php");
    function detection_mobile()
    {
    	global $bandeau_non_connecte, $bandeau_connecte, $nom_style, $message_depart;
    	$detect = new Mobile_Detect();
    	if ($detect->isMobile())
    	{
    		$message_depart = '<br/>'.'Site mobile'.'<br/>';
    		$nom_style = "style_mobile.css";
    		$bandeau_non_connecte = "bandeau_mobile.php";
    		$bandeau_connecte = "bandeau_membres_mobile.php";
    		return $bandeau_non_connecte;
    		return $bandeau_connecte;
    	}
    	else
    	{
    		$message_depart = '<br/>'.'Site classique'.'<br/>';
    		$nom_style = "style.css"; 
    		$bandeau_non_connecte = "bandeau.php";
    		$bandeau_connecte = "bandeau_membres.php";
    		return $bandeau_non_connecte;
    		return $bandeau_connecte;
    	}
    }	
     
    function bandeau_detection() 	// si l'utilisateur est connecté, c'est le bandeau membre sinon c'est le bandeau classique...
    	{
    		global $bandeau, $bandeau_non_connecte, $bandeau_connecte;
    		if (!isset($_SESSION['pseudo']) || $_SESSION['pseudo']=='')	// bandeau classique si pas connecté
    		{ $bandeau = $bandeau_non_connecte;
    			return $bandeau; }
    		else 	// bandeau membre si connecté
    		{ $bandeau = $bandeau_connecte;	
    			return $bandeau; } 
    	}
     
     
    function connect_sql() 		//Connection à MySQL
    {
    	global $sql_serveur, $sql_login, $sql_pass, $sql_bdd;
    	//connexion au serveur
    	$linkid = @mysql_connect($sql_serveur,$sql_login,$sql_pass) or die ("Erreur lors de la connection au serveur MySQL !");
    	//selection de la BDD
    	@mysql_select_db($sql_bdd,$linkid) or die("Impossible de selectionner la base de données\n<br>\nVoici l'erreur renvoyée par le serveur MySQL :\n<br>\n".mysql_error());
    	return $linkid;
    }
    dans index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php session_start();
    $nompage = 'index.php';require('configuration.php');
    $sql = connect_sql();$sql2 = detection_mobile();$sql3 = bandeau_detection();
    if ($bandeau_non_connecte == "bandeau_mobile.php") 
    { ?>
    <SCRIPT LANGUAGE="JavaScript">
    if(confirm('Vous naviguez depuis un mobile, voulez-vous essayer l\'application pour smartphone ?'))
    {document.location.href="/test4/index.php";}
    else{document.location.href="/index.php";}
    </SCRIPT>
    <?php
    }
    else {}
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <title><?php echo $nom_site ?></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="<?php echo $nom_style ?>" />
    <meta name="robots" content="nofollow" />
    <?php include('scripts.php'); ?> <!-- insère les scripts -->
    </head>
    <body>
    <?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
    <div id="mainContent">
    ....

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Export MySql en php
    Par pierre50 dans le forum Débuter
    Réponses: 5
    Dernier message: 11/08/2010, 13h46
  2. MySql et PHP : valeur NULL
    Par fffonck dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/02/2006, 17h02
  3. barre de recherche dans les fonctions php pour firefox
    Par titoumimi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 03/02/2006, 10h16
  4. Installer apache, mysql et php sur une red hat 9 !
    Par Ruddy16 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 07/11/2005, 21h41
  5. requête mysql sous php
    Par remi59 dans le forum Débuter
    Réponses: 9
    Dernier message: 03/07/2003, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo