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

  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 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 104
    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 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 104
    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 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 104
    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 !

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Je déplace en section PHP puisque le problème ne semble pas lié à JavaScript.

  8. #8
    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 SylvainPV et Watilin, bonjour le nouveau sous-forum,

    Merci de votre attention et de votre aide.

    Pour ma part je n'ai pas d'idée sauf un blocage structurel chez Google ou openlayers ou...

    En tout cas aucun souci toutes choses étant égales par ailleurs...

    J'ai créé dans le menu de la section membre une image transparente avec lien vers mon fichier-carte.
    J'ai testé après ID/PW et cela n'affiche rien comme avant (la page reste vierge) alors que si je clique sur un des autres liens du menu tout baigne.

    Voilà çà a l'air vraiment dur dur.

    Messieurs (et mes consoeurs) à vous la patate chaude si je peux dire avec un zest de provoc-humour.

    A+, j'espère

    Steph

  9. #9
    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 SylvainPV et Watilin, bonjour le sous-forum,

    Je voulais suivre et fermer ce fil.

    Comme il n'y a pas eu de réaction, nous avons ouvert un autre fil dans un forum d'experts en cartographie.

    Hélas bien que quelques corrections aient été apportées au code de js, la solution n'a pas été trouvée.

    Comme nous avons eu le même problème en utilisant un autre outil "online" de cartes appelé MyMaps, nous en déduisons que ces dispositifs de cartes en ligne ne fonctionnent pas dans une section membres.


    En tout cas merci de votre aide à tous les 2 et à ceux qui ont lu ce fil.

    Steph

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par Stephdem Voir le message
    Pour ma part je n'ai pas d'idée sauf un blocage structurel chez Google ou openlayers ou...
    Google n'a strictement rien à voir avec openstreetmap. Si tu as des copyrights google sur une map OSM c'est que tu utilises probablement des layers extraits des servers de carto Google et , y'a de forte chance que cela enfreigne quelque copyright


    Citation Envoyé par Stephdem Voir le message
    Comme nous avons eu le même problème en utilisant un autre outil "online" de cartes appelé MyMaps, nous en déduisons que ces dispositifs de cartes en ligne ne fonctionnent pas dans une section membres.
    Ca fonctionne sans "espace membre" donc c'est que le problème vient de la gestion de l'espace membre. Tout ces services sont complètement indépendants de l'architecture dans laquelle ils sont implémentés (encore heureux). Si ça ne marche pas c'est bien un problème avec votre espace membre et pas les services tiers qui ne serait pas compatibles.

    J'ai déjà intégré des cartes OSM (via leaflet) et Google Map dans des espace membre sans aucun problème.

    Une première piste serait de comparer le code html et plus particulièrement JS généré en public et en membre . Les différences pointeront sans doute le problème.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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