Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2012, 11h54   #1
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
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 :
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 :
$bandeau_non_connecte = "bandeau_mobile.php";
Avec I.E. 7 :
Code :
$bandeau_non_connecte = "bandeau.php";
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 19h08   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
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 :
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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 08h04   #3
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
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 :
<?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
la fonction modifiée :
Code :
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.
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 08h33   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 738
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 738
Points : 3 310
Points : 3 310
Citation:
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 :
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]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 09h30   #5
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
@ RunCodePhp :

Voici l'affichage à l'écran :
Code :
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 :
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 !
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 09h57   #6
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
ça fonctionne à nouveau !

fonction modifiée :
Code :
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 :
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 !
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h27.


 
 
 
 
Partenaires

Hébergement Web