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

Langage PHP Discussion :

Affichage section publique vs. section membre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Par défaut Affichage section publique vs. section membre
    Bonjour,
    Un de mes amis m’a soumis le problème suivant, mais comme je suis restée sèche, je vous le soumet directement.
    Il s’agit d’affichage de cartes Google dans une page html.
    Sur le site Internet, en section publique, pour le fichier avec le code suivant, la carte s’affiche correctement (le txt appelé blabla ne contient que des coordonnées GPS) avec l’URL de la page (zmapTanzania.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
    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
    <html><head>
    	<title>Blabla locations in Tanzania</title>
    	<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    	<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
    	<script type="text/javascript">
    		var lat=-7
    		var lon=35
    		var zoom=6
     
    		var map;
     
    		function init() {
    			map = new OpenLayers.Map ("map", {
    				controls:[
     
    					new OpenLayers.Control.Navigation(),
    					new OpenLayers.Control.PanZoomBar(),
    					new OpenLayers.Control.LayerSwitcher(),
    					new OpenLayers.Control.Attribution()],
     
     
    				maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
    				maxResolution: 156543.0399,
    				numZoomLevels: 19,
    				units: 'm',
    				projection: new OpenLayers.Projection("EPSG:900913"),
    				displayProjection: new OpenLayers.Projection("EPSG:4326")
    			} );
       map.addControl(
                    new OpenLayers.Control.MousePosition({
                        separator: ' | ',
                        numDigits: 2,
                        emptyString: 'Mouse is not over map.'
                    })
                );			
    			layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
    			map.addLayer(layerCycleMap);
    			layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
    			map.addLayer(layerMapnik);
     
    			var mapquest = new OpenLayers.Layer.OSM("MapQuest", "http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png");
                		map.addLayer(mapquest);
     
            		var scaleline = new OpenLayers.Control.ScaleLine();
    			map.addControl(scaleline);
     
    			var pois = new OpenLayers.Layer.Text( "Blabla in Tanzania",
                        { location:"./Blabla.txt",
                          projection: map.displayProjection
                        });
        map.addLayer(pois);
    			var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
    			map.setCenter(lonLat, zoom); 
    			var size = new OpenLayers.Size(21,25);
    			var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
    			;
    		}
    	</script>
    </head>
    <body onload="init();">
    	<div style="width:100%; height:100%" id="map"></div>
    <div id="mouseposition"></div>
    </body>
    </html>
    Mais si l’on prend le même code, qu’on y ajoute le code correspondant à la protection de la section membres (avec ID/PW) et qu’on le télécharge sur Internet, alors la carte ne s’affiche plus lors de la navigation sur Internet pour l’URL de la page (zmapTanzania-BD.php) dans la section membres (après avoir tapé ID et PW).

    Voici le code ajouté en haut (comme à chaque page de la section membres) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    session_start();
     
    if ($_SESSION["MEMBRE"]!="oui")
     header("Location: http://www.xxxxxx.org");
    ?>

    Le souci tient à quoi ? Un problème avec javascript (pourtant, il y a d’autres js dans la section membres), ou avec Google, ou autre chose.
    Peut-on contourner, solutionner le problème ?

    Merci de votre aide,

    Steph

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Je ne vois pas de problèmes dans le code que tu as donné, hormis le fait que normalement, on ajoute une instruction exit après un header de redirection. Mais je sais que les serveurs arrivent souvent à corriger automatiquement cet oubli. Mets-la quand même dans le doute, ça ne coûte pas grand chose.

    À mon intuition, le problème se trouverait plutôt dans la gestion de la session PHP, et du traitement des identifiants et mots de passe. Peux-tu me montrer les codes correspondants ?

    Au fait, OpenStreetMap n'a rien à voir avec Google
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Par défaut
    Bonjour Watilin,

    Merci de cette réaction positive et de ton aide (c’est vrai openstreetmap n’est pas issu de Google, mais la carte produite est un produit signé Google avec son logo, pas moyen d’y échapper, etc.).

    Pour le exit du header je ne savais pas… mais où faut-il le placer :
    Comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($_SESSION["MEMBRE"]!="oui")
     header("Location: http://www.xxxxxx.org");
    exit;
    ?>
    En tout cas voici le code pour la page d’accès, avant le doc type de cette page appelée subscription.php (j’ai enlevé les commentaires //)
    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
    <?php
    session_start();
     
    if ((isset($_POST)) && (!empty($_POST))) 
    {
    	 $redirect = "http://www.xxxxxx.org/subscription.php";
    	 $members_area = "http://www.xxxxxx.org/members/index2.php";
    	 $error = "http://www.xxxxxx.org/login_failed.php";
     
    	 if ((!isset($_POST["ID"])) or (!isset($_POST["password"]))) 
    	 {
     
    		   header('Location: $error');
    		   die("");
    	 }
     
    	 $nom=$_POST["ID"];
    	 $passe=sha1($_POST["password"]);
     
    	 if (($nom=="") or ($passe=="")) 
    	 {
    	   header("Location: $error");
    	 } 
    	 else 
    	 {
     
    	   $lignes=file("archives/members.txt");
    	   $membre=0;
    	   $regex ="#$nom\t$passe#";
    	   foreach ($lignes as $lgn)
    	   {
     
     		 if(preg_match($regex,$lgn, $tab))
     		 {
    			$champ = preg_split('#\t#',$lgn);
     	      	  $date = $champ[2];
     
     		      if($date !== false)
     		      {
     		      	$now = new Datetime();
     		      	$now = $now->format('Y-m-d');
     				$next = new DateTime($date);
     					if( $now < $date )
    					{
     						$membre=1;
     						$id_mem=$tab[1]; 
     					}
     		      }
     
     
    	      }
    	    }
    	   if ($membre==1) 
    	   {
    	     $_SESSION["MEMBRE"]="oui";
    	     $_SESSION["login"]=$nom;
    	     $_SESSION["passe"]=$passe;
    	     // sauver les infos de connexion
    	     $chn=file_get_contents('archives/visitor.txt');
    	     $chn.="\n".$nom."\t".$id_mem."\t".date("Y-m-d h:i:s")."\t".$_SERVER["REMOTE_ADDR"];
    	     $mf=fopen('archives/visitor.txt','w');
    	     fwrite($mf,$chn);
    	     fclose($mf);
     
    	     header("Location: $members_area");
    	   } 
    	   else 
    	   {
    		    header("Location: $error");
    			include "$error";
    	   }
     
     
    	}
    } 
    else {
    	?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    Etc.
    Et tout à la fin de cette même page, il y a :
    Voilà j’ai tout mis (dans le code de la page, le formulaire avec les boîtes à remplir de ID et PW est standard avec method « post »)

    Encore, merci de ton aide !

    Steph

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Le exit est équivalent à ce die("") que tu utilises déjà. C'est important de l'ajouter après un header location, parce que si tu as plusieurs headers location dans le même script (et c'est le cas), le dernier écrasera les précédents. Voir la doc de header pour plus d'infos.

    Attention, le premier appel à header dans ton script a des guillemets simples, du coup la variable $error n'est pas interprétée.

    En l'état, je ne vois pas de bug flagrant dans ton code. Juste une petite inefficacité au moment où tu utilises file_get_contents suivi d'un fopen sur le même fichier. En réalité tu n'as pas besoin de lire le contenu du fichier, tu peux donc utiliser le mode 'a' au lieu du mode 'w'.

    Juste en dessous, tu as un header suivi d'un include, je pense que tu as dû oublier de supprimer l'include.

    Je t'encourage à mettre des print_r($_POST) et print_r($_SESSION) aux points-clés de ton script pour essayer de trouver à quel moment ça coince. Et évidemment, mets error_reporting(-1) au début du code pour voir tous les messages d'erreurs.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Par défaut
    Re-bonjour Watilin,

    Merci de tes commentaires.

    Mais je ne suis pas sûre de comprendre.

    Tes remarques ont-elles un rapport avec le non-affichage des cartes dans la section membre ???

    En plus je ne suis pas l'auteure de ce code (comme j'avais indiqué initialement c'est un ami qui m'a soumis le problème).
    Ici je suis une passeuse et en plus j'ai trouvé plus fort que moi car tu as trouvé des indélicatesses dans ce code que je n'avais pas vues.

    Mais au total la question des cartes reste le seul os (sauf erreur) car la section membres marche bien depuis longtemps.
    C'est ce nouveau projet de cartes qui perturbe.
    Et encore il perturbe seulement les cartes, car toutes les pages hors carte de la section membre s'affichent correctement.

    Commen peut-on avancer ?

    Merci de ton aide.
    Je te souhaite un bon week-end.

    Steph

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Comme je te l'ai dit, je n'ai pas vu de problème avec le JavaScript ; d'ailleurs j'ai testé chez moi en local (protocole file:) et ça marchait impec. C'est pourquoi j'ai supposé que le problème avait un rapport avec le PHP qui gère la section membres. Mais peut-être que je me trompe ! En tout cas, je ne peux pas dire précisément où ça coince. Ça peut aussi être lié à l'environnement de test (navigateur qui bloque les cookies, extension genre RequestPolicy qui bloque les requêtes vers des sites tiers, etc.).
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/07/2014, 20h21
  2. [MySQL] [PHP] Gestion de l'affichage des messages privés entre membre
    Par B.michael dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/11/2010, 10h05
  3. sécurisation des sessions pour une section membres
    Par CROSS dans le forum Langage
    Réponses: 5
    Dernier message: 20/06/2007, 12h46
  4. Mise à jour affichage section détail form
    Par thb74 dans le forum Access
    Réponses: 3
    Dernier message: 27/08/2006, 13h39
  5. [SQL Lite][Débutant] Sections et sous sections
    Par agent007se dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/06/2006, 08h28

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