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 :

fonction while dans mail et java


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut fonction while dans mail et java
    Bonjour,

    je ne suis pas sûre de comprendre la fonction while, premièrement est ce possible de l'insérer dans le message d'un email ?

    Dans ce code ci je voudrais que la ligne <tr><td>-'.$lign['nom'].'</td></tr> se répète autant de fois qu'il y a de résultat. Comme elle est ici, je n'ai que le premier résultat et si je mets un while je n'ai aucun résultat.

    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
    // REQUETE
    $requete=mysql_db_query($sql_bdd,"select distinct(email) from listes where liste=\"$liste\" limit $debut,$limit",$db_link);
    $nombre=mysql_num_rows($requete);
     
    $user="xxx";
    $host="localhost";
    $password="xxx";
    $database="xxx";
    $To=mysql_result($requete,$i,"email");
    $sqlquery = "SELECT nom FROM tirs WHERE $liste='Oui'";
    $resulta = mysql_query($sqlquery) or die ("Impossible d'exécuter la requête");
    $lign = mysql_fetch_array ($resulta,MYSQL_ASSOC);
     
    $connection =mysql_connect($host, $user, $password) or die ("Connexion impossible au serveur");
    $db=mysql_select_db($database, $connection) or die ("La BD ne peut être selectionnée");
    $query = "SELECT nomsociete FROM Membre WHERE email='$To'";
    $resultat = mysql_query($query) or die ("Impossible d'exécuter la requête");
    $ligne = mysql_fetch_array ($resultat,MYSQL_ASSOC);
     
    $sujet=str_replace("xxquotxx","\"",$sujet);
    $texte=str_replace("xxquotxx","\"",$texte);
    $sujet=stripslashes($sujet);
    $texte=stripslashes($texte);
     
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    $headers .= 'From: Newsletter Swiss-target.ch <newsletter@swiss-target.ch>' . "\r\n";
     
    $newsmessage ='
      <html>
    <head>
    </head>
    <body><table border="0" cellpadding="5" cellspacing="0" width="80%" align="center">
    <br /><tr><td colspan="3" bgcolor="#19431B" align="center">
    <font color="#E4E0B0" size="+1">Newsletter</font></td></tr></table>
    <table border="0" cellpadding="5" cellspacing="0" width="80%" align="center" bgcolor="#E4E0B0">
    <font color="#19431B">
    <tr><td>Cher '.$ligne['nomsociete'].',</td></tr>
    <tr><td>-'.$lign['nom'].'</td></tr>
    <tr><td>
    <br>
    '.$texte.'
    <br></td></tr>
     <tr><td>Nous apprécions l\'intérêt que nous portez à notre site. Si vous avez des questions à poser vous pouvez envoyer un e-mail à info@swiss-target.ch.<br></td></tr>
     
      <tr><td>Cordialement, <i>Swiss-target.ch</i><br><br></tr></td></table>
      <table border="0" cellpadding="5" cellspacing="0" width="80%" align="center">
    <tr><td colspan="3" bgcolor="#19431B">&nbsp;</td></tr>
    </table>
      </body>
    </html>';
     
    $i=0;
    $tmp=$debut+$limit;
    $a=$tmp-$limit+1;
    echo "<table align=\"center\">\n";
    while ($i<$nombre) 
    	{
    	$To=mysql_result($requete,$i,"email");
    	$test="Erreur : Mail non envoy&eacute;";
     
    	if(mail("$To", "$sujet", "$newsmessage", "$headers")) {$test="Mail envoy&eacute;";}
    	break;
     
    	echo "<tr><td><font size=1><b>$a-</b> </font>$To</td><td><b>$test</b></td></tr>\n";
    	$i++; $a++;
    	}
    echo "</table>\n";
     
    $tmp=$debut+$limit;
    if($tmp>$nb_total) {$tmp=$nb_total;}
    echo "<br><br><b>$tmp</b> mails envoyés sur <b>$nb_total</b> !<br><br>";
     
    $sujet=str_replace("\"","xxquotxx",$sujet);
    $texte=str_replace("\"","xxquotxx",$texte);
    Ensuite, est ce possible de faire un while dans du java ?

    Pareil qu'avant avec le code ci dessous (avec while) je n'ai aucun résultat et si je l'enlève je n'ai qu'un seul résultat.
    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
        <script type="text/javascript">//<![CDATA[
          function load()
            {
            if (GBrowserIsCompatible())
              {
              var map = new GMap2(document.getElementById("map"));
              map.setCenter(new GLatLng(46.818188, 8.227512), 7);
    		  map.addControl(new GLargeMapControl3D());
    		  map.enableScrollWheelZoom();
    		  map.addControl(new GMapTypeControl());
    		  map.addControl(new GOverviewMapControl());
    		  map.addControl(new GScaleControl());
    // "point" correspond aux coordonnées du marker
              while ($ligne = mysql_fetch_array ($result2,MYSQL_ASSOC)) {
    		  var point = (new GLatLng(<?php echo $ligne["lat"]; ?>,<?php echo $ligne["lng"]; ?>));
    		  };
     
     
    // Initialisation d'un nouvel objet GIcon et de ses propriétés
              var MonIcon = new GIcon(G_DEFAULT_ICON);
              MonIcon.iconSize=new GSize(32,32);
              MonIcon.iconAnchor=new GPoint(16,32);
              MonIcon.image="images/purple-pushpin.png";
    // Affichage du marker (repère)
              var marker = new GMarker(point,MonIcon);
              map.addOverlay(marker);
     
              }
            }
        //]]></script>
    Est-ce que je rédige mal cette fonction ou ce n'est pas possible ?

    Merci d'avance !

    Mary

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    bon j'ai pas tout compris mais globalement les retours de requête sont des itérateurs c'est pourquoi on utilise la boucle while sauf que cela peut être dangereux enfin bref (ceci est valable pour beaucoup de langage).

    l'exemple ci-dessous montre une boucle autre qu'avec mysql_result
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($row = mysql_fetch_assoc($result)) {
       echo $row["userid"];
       echo $row["fullname"];
       echo $row["userstatus"];
    }
    perso j'utilise plus la librairie mysql mais PDO

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    Je vais essayer d'être plus claire:
    lorsque je fait une requête (ici pour avoir le nom des tous les tirs à une discipline) il y a plusieurs résultats (plusieurs noms, plusieurs résultats pour $lign['nom']).
    J'aimerais donc faire une liste de ces noms. En faisant un appel à la table sans un while je n'ai qu'un seul nom alors que je les voudrais tous. Cependant, je n'arrive pas à insérer correctement un while dans mes deux exemples.

    J'essaie avec ta façon de l'écrire:
    Pour la liste des tirs:
    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
    $newsmessage ='
      <html>
    <head>
    </head>
    <body><table border="0" cellpadding="5" cellspacing="0" width="80%" align="center">
    <br /><tr><td colspan="3" bgcolor="#19431B" align="center">
    <font color="#E4E0B0" size="+1">Newsletter</font></td></tr></table>
    <table border="0" cellpadding="5" cellspacing="0" width="80%" align="center" bgcolor="#E4E0B0">
    <font color="#19431B">
    <tr><td>Cher '.$ligne['nomsociete'].',</td></tr>
    '.while ($lign = mysql_fetch_assoc($resulta)) {
    echo "<tr><td>-'.$lign['nom'].'</td></tr>";.'
    }
    <tr><td>
    <br>
    '.$texte.'
    <br></td></tr>
     <tr><td>Nous apprécions l\'intérêt que nous portez à notre site. Si vous avez des questions à poser vous pouvez envoyer un e-mail à info@swiss-target.ch.<br></td></tr>
     
      <tr><td>Cordialement, <i>Swiss-target.ch</i><br><br></tr></td></table>
      <table border="0" cellpadding="5" cellspacing="0" width="80%" align="center">
    <tr><td colspan="3" bgcolor="#19431B">&nbsp;</td></tr>
    </table>
      </body>
    </html>';
    j'ai l'erreur: Parse error: syntax error, unexpected T_WHILE

    Dans l'exemple avec plusieurs points cardinaux:
    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
       <script type="text/javascript">//<![CDATA[
          function load()
            {
            if (GBrowserIsCompatible())
              {
              var map = new GMap2(document.getElementById("map"));
              map.setCenter(new GLatLng(46.818188, 8.227512), 7);
    		  map.addControl(new GLargeMapControl3D());
    		  map.enableScrollWheelZoom();
    		  map.addControl(new GMapTypeControl());
    		  map.addControl(new GOverviewMapControl());
    		  map.addControl(new GScaleControl());
    // "point" correspond aux coordonnées du marker
              while ($ligne = mysql_fetch_assoc ($result2)) {
    		  var point = (new GLatLng(<?php echo $ligne["lat"]; ?>,<?php echo $ligne["lng"]; ?>));
    		  };
     
     
    // Initialisation d'un nouvel objet GIcon et de ses propriétés
              var MonIcon = new GIcon(G_DEFAULT_ICON);
              MonIcon.iconSize=new GSize(32,32);
              MonIcon.iconAnchor=new GPoint(16,32);
              MonIcon.image="images/purple-pushpin.png";
    // Affichage du marker (repère)
              var marker = new GMarker(point,MonIcon);
              map.addOverlay(marker);
     
              }
            }
        //]]></script>
    Je n'ai aucune réaction, il ne lit pas le while donc il n'y a aucun point qui est pris en compte.

    J'espère que c'est plus clair

  4. #4
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    ouep c'est un peu plus claire que tu ne sais pas forcément ce que tu fait.

    2eme exemple tu utilise des coordonnées javascript dans un script php le php étant traité coté serveur et le javascript coté client tu ne risque pas d'avoir grand chose en retour. le seul moyen étant dans javascript de faire un appel ajax vers un script php qui te renvoi les infos.

    sinon pour la solution 1

    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
     
    $newsmessage ='
      <html>
    <head>
    </head>
    <body><table border="0" cellpadding="5" cellspacing="0" width="80%" align="center">
    <br /><tr><td colspan="3" bgcolor="#19431B" align="center">
    <font color="#E4E0B0" size="+1">Newsletter</font></td></tr></table>
    <table border="0" cellpadding="5" cellspacing="0" width="80%" align="center" bgcolor="#E4E0B0">
    <font color="#19431B">
    <tr><td>Cher '.$ligne['nomsociete'].',</td></tr>';
     
    while ($lign = mysql_fetch_assoc($resulta)) 
    {
       $newsmessage .= '<tr><td>-'.$lign['nom'].'</td></tr>';
    }
     
    $newsmessage .= '
    <tr><td>
    <br>
    '.$texte.'
    <br></td></tr>
     <tr><td>Nous apprécions l\'intérêt que nous portez à notre site. Si vous avez des questions à poser vous pouvez envoyer un e-mail à info@swiss-target.ch.<br></td></tr>
     
      <tr><td>Cordialement, <i>Swiss-target.ch</i><br><br></tr></td></table>
      <table border="0" cellpadding="5" cellspacing="0" width="80%" align="center">
    <tr><td colspan="3" bgcolor="#19431B">&nbsp;</td></tr>
    </table>
      </body>
    </html>';
    tu en fait trop d'un coup et te mélange les pinceaux entre traitement, affichage et gestion de données.


    Enfin, le javasscript n'est pas souhaité dans un mail car pas toujours traité dans les logiciel de messagerie.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  5. #5
    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
    Salut

    Dans les 2 parties de code tu ne sépare pas suffisamment les codes au niveau de la syntaxe.
    Dans la partie 1, tu commence par stocker une chaine dans une variable $newsmessage, puis une concaténation sur une boucle qui elle effectue un echo, et on poursuit ...
    Sépare un peu les choses au lieu de tout faire dans un seul bloc.

    Pour la 2ème partie, tu mélange du code Javascript et Php sans dire au serveur qui est qui, c'est à dire il manque les <?php et ?> afin de les séparer.


    Partie 1 :
    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
     
    $newsmessage = '
      <html>
    ... etc ...
    <tr><td>Cher '.$ligne['nomsociete'].',</td></tr>';
     
    // Instruction de boucle (en poursuivant la chaine dans $newsmessage)
    while ($lign = mysql_fetch_assoc($resulta)) {
        $newsmessage .= '<tr><td>-'.$lign['nom'].'</td></tr>';
    }
     
    // Suite de la chaine (avec .=)
    $newsmessage .= '<tr><td>
    ... etc ...
    </html>';
    En supposant que tout doit être sotcké dans $newsmessage.
    A voir/essayer.

    Partie 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    map.addControl(new GScaleControl());
    <?php
    // Partie Php
    // "point" correspond aux coordonnées du marker
    while ($ligne = mysql_fetch_assoc ($result2)) {
        echo 'var point = (new GLatLng("'.$ligne["lat"].'", "'.$ligne["lng"].'"));'.PHP_EOL;
    };
    // Fin partie Php
    // Initialisation d'un nouvel objet GIcon et de ses propriétés
    ?>
    var MonIcon = new GIcon(G_DEFAULT_ICON);
    En espérant ne pas faire d'erreurs.
    Mais Php doit générer le code JS, et pour vérifier ça, le truc c'est de regarder le code source généré coté navigateur, et repérer la partie concernée (click droit dans la page Web -> code source de la page)
    Ceci dit, je me suis contenter de générer le JS selon ton code, mais à mon avis ça risque de ne pas être correcte, car ça va générer ceci :
    var point = (new GLatLng("une_lat", "une_lng"));
    var point = (new GLatLng("une_lat", "une_lng"));
    var point = (new GLatLng("une_lat", "une_lng"));
    Ca redéfini la variable point à chaque fois.
    A vérifier, mais j'ai un doute qu'on obtienne plusieurs points.
    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]

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    merci beaucoup ! les .= c'est tout à fait ce qu'il me manquait pour le php. Cela fonctionne bien maintenant !

    Le script en java ne vas pas dans le message. Il est à côté (affiche une carte sur le site lui-même) et j'aimerais également lui mettre en while.
    RunCodePhp, j'ai essayé ta solution mais malheureusement l'echo n'est pas lu.

    Voici la page dans son ensemble où j'ai essayé de mettre un while mais comme il n'est pas lu, à l'affichage je n'ai qu'une carte sans points.
    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
    88
     <!-- language --> <?php
     require("decide-lang.php");
     ?> 	 
    <!-- fin language-->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <script src="http://maps.google.com/maps?file=api&v=2&key=
        xxx"
        type="text/javascript"></script>
     
    <!-- Javascript minimaliste créant votre carte -->
        <?php
    $user="xxx";
    $host="localhost";
    $password="xxx";
    $database="xxx";
     
    $connection = mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
     $db = mysql_select_db ($database, $connection) or die ("La base de données ne peut pas êre sélectionnée");
     $sql2 ="SELECT lat,lng FROM Membre";
     $result2= mysql_query($sql2) or die ("Impossible d'exécuter la requête");
     $ligne = mysql_fetch_array ($result2,MYSQL_ASSOC);
    ?>
     
        <script type="text/javascript">//<![CDATA[
          function load()
            {
            if (GBrowserIsCompatible())
              {
              var map = new GMap2(document.getElementById("map"));
              map.setCenter(new GLatLng(46.818188, 8.227512), 7);
    		  map.addControl(new GLargeMapControl3D());
    		  map.enableScrollWheelZoom();
    		  map.addControl(new GMapTypeControl());
    		  map.addControl(new GOverviewMapControl());
    		  map.addControl(new GScaleControl());
     
    // "point" correspond aux coordonnées du marker
              while ($ligne = mysql_fetch_assoc ($result2 )) {
    		  var point = new GLatLng(<?php echo $ligne["lat"]; ?>,<?php echo $ligne["lng"]; ?>);
    		  map.addOverlay(new GMarker(point));
    		  }
     
     
    // Initialisation d'un nouvel objet GIcon et de ses propriétés
              var MonIcon = new GIcon(G_DEFAULT_ICON);
              MonIcon.iconSize=new GSize(32,32);
              MonIcon.iconAnchor=new GPoint(16,32);
              MonIcon.image="images/purple-pushpin.png";
    // Affichage du marker (repère)
              var marker = new GMarker(point,MonIcon);
              map.addOverlay(marker);
     
              }
            }
        //]]></script>
    <?php include ("head.php");
    ?>
    <body onload="load()" onunload="GUnload()">
    <center>
            <div id="conteneur">
     
    <?php include ("header.php");
    ?>
     
    <?php include ("menu.php");
    ?>
     
     
    		<!--corps -->
    		<div id="corps">
     
    <br />
    <fieldset style="width:500px; border-color:#19431B">
     
    <table align="center">
     
    <tr><td colspan="2"><center><div id="map" style="width: 600px; height: 400px"></div></center></td></tr>
     
    </table>
    </fieldset><br /><center><br><input type="button" value="Retour" onclick="history.go(-1)"> </form></center>
               </div>
     
    		<!--fin corps -->
     
    <?php include ("footer.php");
    ?></div>
    (inspiré de: http://www.applications-google-maps....-GM-repere.php)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    Avec ce code un point est affiché seulement alors qu'en répétant ces deux lignes il devrait en avoir plusieurs. C'est comme si le while ne fait pas sa boucle répétitive.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php while ($ligne = mysql_fetch_assoc ($result2)) {
    		  echo 'var point = new GLatLng('.$ligne["lat"].' , '.$ligne["lng"].');
    		  map.addOverlay(new GMarker(point));'.PHP_EOL;
    		  ;}?>

  8. #8
    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
    Avec ce code un point est affiché seulement alors qu'en répétant ces deux lignes il devrait en avoir plusieurs. C'est comme si le while ne fait pas sa boucle répétitive.
    C'est ce que je disais, ce n'est pas un problème de syntaxe, mais de logique coté Javascript.
    var point est à tour de boucle redéfinie, donc écrasé, et c'est le dernier point qui sera tenu compte à mon avis.



    Faut que tu revois la façon de créer plusieurs points.

    Mais en jetant un oeil vite fait du coté des exemples de codes que fourni Google, je tombe la dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (var i = 0; i < 10; i++) {
      var point = new GLatLng(southWest.lat() + latSpan * Math.random(),
                              southWest.lng() + lngSpan * Math.random());
      map.addOverlay(new GMarker(point));
    }
    La boucle for c'est donc du Javascript, et le principe (apparemment) c'est qu'à tour de boucle c'est l'Objet map suivie de la méthodhe addOverlay map.addOverlay() qui ajouterait un Gmarker.

    Donc quelque part il ne serait pas utile de faire la boucle en JS (vu qu'on connait les points lat/lng à l'avance, on pourrait ajouter directement les markers.

    Un truc comme ça peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    while ($ligne = mysql_fetch_assoc ($result2)) {
        echo 'map.addOverlay(new GMarker(new GLatLng('.$ligne['lat'].', '.$ligne['lng'].')));'.PHP_EOL;
    }
    ?>
    A essayer (sans garantie).

    N'oubli pas que pour faire des essais, pour juste tester si le Javascript fonctionne, le plus simple est de mettre "en dur" juste le code JS.
    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    map.addOverlay(new GMarker(new GLatLng(une_lat, une_lng)));
    map.addOverlay(new GMarker(new GLatLng(autre_lat, autre_lng)));
    C'est ce code que Php doit générer (visible dans le code source).


    Si tout ça ne fonctionne pas, alors faut peut être stocker les points dans un tableau JS, puis faire comme l'exemple Google, boucler en JS sur le tableau des points pour les créer/ajouter.
    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]

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    Oui c'est comme tu dis, le dernier point qui est affiché.

    Oui dans le tuto c'est dis que c'est le map.addOverlay () qui fait en sorte qu'il y ait d'autres points.

    J'ai tout de suite essayé en dur. Il y a tous les points de mes sociétés tests qui s'affichent. Une fois que je mets la boucle while comme tu l'as écrite, j'ai de nouveau qu'un seul point.

    La boucle for, j'ai essayé à la place du while et ce n'a rien donné.

    Comment faire un tableau en javascript ? je ne connais pas vraiment les points à l'avance vu que c'est le membre qui donne sa position en s'inscrivant s'il veut apparaître sur la carte (les points sont donc dans les lignes de la table membre au fur et à mesure des inscriptions).

  10. #10
    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
    je ne connais pas vraiment les points à l'avance vu que c'est le membre qui donne sa position en s'inscrivant s'il veut apparaître sur la carte.
    Ben si, car les points que tu récupère dans ta requête sont ceux de tous les membres, ces points sont largement connu à l'avance, vu qu'ils sont dans la Bdd.
    Pour le point du membre, ça n'a aucun rapport à ce que tu fais à cet instant (faut pas tout mélanger).

    Comment faire un tableau en javascript ?
    Là j'suis pas d'accord
    Interroge Google, tu obtiendras une fulltitude de tuto, faq, etc ... bref, plein d'exemples de code pour le faire.
    Il y a peut être même un exemple tout fait du coté de Google Map. As tu regardé d'ailleurs ?

    Bon, la base c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var listePoints = new Array();
     
    var listePoints[0] = new Array();
    listePoints[0]['lat'] = 123456789.321;
    listePoints[0]['lng'] = 123456789.321;
     ...etc ...
    Un conseil, simule le en 1er "en dur", donc en pur JS avec des valeurs dans un tableau JS, et une boucle.
    Une fois que ça fonctionne, suffit de générer ça en Php.
    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]

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    Si si j'ai regardé, c'est même bien cela le pire. J'ai passé des heures et des heures dessus
    mais... je comprends tellement rien au javascript que ce que j'ai fait en m'inspirant d'autres codes google map avec fichier xml ne donne rien....

    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
        <script type="text/javascript">//<![CDATA[
          function load()
            {
            if (GBrowserIsCompatible())
              {
              var map = new GMap2(document.getElementById("map"));
              map.setCenter(new GLatLng(46.818188, 8.227512), 7);
    		  map.addControl(new GLargeMapControl3D());
    		  map.enableScrollWheelZoom();
    		  map.addControl(new GMapTypeControl());
    		  map.addControl(new GOverviewMapControl());
    		  map.addControl(new GScaleControl());
    // Initialisation d'un nouvel objet GIcon et de ses propriétés
              var MonIcon = new GIcon(G_DEFAULT_ICON);
              MonIcon.iconSize=new GSize(32,32);
              MonIcon.iconAnchor=new GPoint(16,32);
              MonIcon.image="images/purple-pushpin.png";	
     
     
                GDownloadUrl("test.xml", function(data)   // Fichier xml contenant les valeurs de la BDD
    	       { 
    		       var xml = GXml.parse(data); 
    		       var lat = xml.documentElement.getElementsByTagName("lat");
                   //creation d'un tableau lng
                    var lng = xml.documentElement.getElementsByTagName("lng");
     
    		       //boucle for sur les tableaux
    			   for (var i = 0; i < lat.length; i++)
    		       {		   
                     var lati =parseFloat(lat[i].textContent);
                     var lngi = parseFloat(lng[i].textContent);
                      if(lat === 0 && lng === 0)
                       {
                          }
                       else
                       {
                        //récupération de l'objet GLatLng
                       var point = new GLatLng(lat, lng);
                        //creation du marqueur
                       var marker = new GMarker(point,MonIcon));
                       //ajoute le marqueur sur la carte
                        map.addOverlay(marker);
              }
            }
        //]]></script>
    Fichier xml pour l'instant "en dur":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <markers>
      <marker lat="46.19388198852539" lng="7.1599737" />
      <marker lat="46.19388198852539" lng="8.1599737" />
    </markers>
    je me suis inspirée de ca:
    http://www.developpez.net/forums/d72...rkers-adresse/
    (un peu différent de ce que je veux faire vu que j'ai des points au lieu d'adresses)

    ou encore ca: http://www.google.com/support/forum/...007161d6&hl=fr

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    Comme d'hab c'est quand je désespère et que je poste mes essais infructueux que je tombe sur quelque chose de plus intéressant.

    Voici le code JS utilisé:
    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
    <script type="text/javascript">//<![CDATA[
          function load()
            {
            if (GBrowserIsCompatible())
              {
              var map = new GMap2(document.getElementById("map"));
              map.setCenter(new GLatLng(46.818188, 8.227512), 7);
    		  map.addControl(new GLargeMapControl3D());
    		  map.enableScrollWheelZoom();
    		  map.addControl(new GMapTypeControl());
    		  map.addControl(new GOverviewMapControl());
    		  map.addControl(new GScaleControl());
    // Initialisation d'un nouvel objet GIcon et de ses propriétés
              var MonIcon = new GIcon(G_DEFAULT_ICON);
              MonIcon.iconSize=new GSize(32,32);
              MonIcon.iconAnchor=new GPoint(16,32);
              MonIcon.image="images/purple-pushpin.png";	
     
          function creerMarker(point, onglet1, onglet2) {
            var marker = new GMarker(point);
            var infoTabs = [
              new GInfoWindowTab("Infos", onglet1),
              new GInfoWindowTab("Détails", onglet2) 
               ];
            GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowTabsHtml(infoTabs);
              });
            return marker;
            }
     
              GDownloadUrl("test.xml", function(data) {
                var xml = GXml.parse(data);
                 var markers = xml.documentElement.getElementsByTagName("marker");
                 for (var i = 0; i < markers.length; i++) {
                   var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")), 9);
               var marker = creerMarker(point, markers[i].getAttribute("info"), markers[i].getAttribute("details") );
                   map.addOverlay(marker);
                 }
               });
             }
         }
     
          //]]>
          </script>
    et le xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?>
    <markers>
      <marker lat="46.19388198852539" lng="7.1599737" info="rue trucmuche"   details="marker1" />
    />
      <marker lat="46.19388198852539" lng="8.1599737" info="quelque part"   details="marker2" />
    />
    </markers>
    j'essaie maintenant de faire des appels à la table mais je pense que c'est le plus simple une fois arrivé à là

  13. #13
    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
    Comme d'hab c'est quand je désespère et que je poste mes essais infructueux que je tombe sur quelque chose de plus intéressant.
    Si ce genre de technique t'intéresse vraiment, et bien pousse un peu plus le truc, car Google propose de gérer ça dans des fichier types KML.

    Un KML c'est comme du XML, sauf que c'est un format très carré, est particulièrement étudié pour gérer des éléments dans l'espace.
    Les possibilités sont bien plus grandes (mais ça n'oblige pas pour autant de tout exploiter).

    En somme, avec un tout petit plus de recherche, tu obtiendras le même résultat que des markers dans un XML, sauf que tu conserve la possibilité d'en faire largement plus.

    Comme définir des itinéraires fléchés, rajouter des icons personnalisées, du contenu HTML (donc tout média numérique), etc, etc ...
    On peu tout imaginer (ou presque).
    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]

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    merci pour l'info, je vais la noter.
    Je pense pour l'instant la laisser comme cela pour la première version du site. J'ai déjà le marker personnalisé (c'est le MonIcon)
    J'y réfléchirai par la suite quand je voudrai des nouveautés

    Pour le fichier avec les markers, "en dur" cela fonctionne mais quand je remplace la valeur des points par '.$ligne["lat"].' les points ne s'affichent plus..

    fichier xml remplacé par un fichier 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
    <?php
    $user="xxx";
    $host="localhost";
    $password="xxx";
    $database="xxx";
     
    $connection = mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
     $db = mysql_select_db ($database, $connection) or die ("La base de données ne peut pas êre sélectionnée");
     $sql2 ="SELECT lat,lng FROM Membre";
     $result2= mysql_query($sql2) or die ("Impossible d'exécuter la requête");
     $ligne = mysql_fetch_array ($result2,MYSQL_ASSOC);
     
    	header("Content-type: text/xml");
    	echo '<'.'?xml version="1.0" encoding="iso-8859-1"?'.'>';
    	echo '<markers>';
    	echo ' <marker lat='.$ligne["lat"].' lng='.$ligne["lng"].' info="rue trucmuche"  details="marker1" />/>';
    	echo  '<marker lat="46.19388198852539" lng="8.1599737" info="quelque part"   details="marker2" />/>';
    	echo '</markers>';
     
    ?>

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    il manquait juste des ""

    je mets donc le while pour que le fichier ait plusieurs lignes à chaque point dans la base de données mais c'est comme avant: il n'y a qu'un seul point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $connection = mysql_connect($host, $user, $password) or die ("Connexion au serveur impossible");
     $db = mysql_select_db ($database, $connection) or die ("La base de données ne peut pas êre sélectionnée");
     $sql2 ="SELECT lat,lng FROM Membre";
     $result2= mysql_query($sql2) or die ("Impossible d'exécuter la requête");
     $ligne = mysql_fetch_array ($result2,MYSQL_ASSOC);
     
    	header("Content-type: text/xml");
    	echo '<'.'?xml version="1.0" encoding="utf-8"?'.'>';
    	echo '<markers>';
    	while ($ligne = mysql_fetch_array($result2))
    {extract($ligne);
    	echo '<marker lat="'.$ligne["lat"].'" lng="'.$ligne["lng"].'" info="rue trucmuche"  details="marker1" />/>';
    	}
    	echo '</markers>';

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    Points : 37
    Points
    37
    Par défaut
    il fallait juste enlever $ligne = mysql_fetch_array ($result2,MYSQL_ASSOC);

    C'est merveilleux quand cela fonctionne enfin

    merci infiniment pour ton aide !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/06/2010, 14h22
  2. envoie mail dans du code Java
    Par senshi03 dans le forum Langage
    Réponses: 0
    Dernier message: 09/06/2009, 13h38
  3. [MySQL] Envoi mail auto en fonction date dans base de donnée
    Par calitom dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 30/06/2008, 15h17
  4. Réponses: 16
    Dernier message: 27/04/2008, 14h22
  5. [Mail] Inclure une fonction php dans un mail
    Par Tobleron dans le forum Langage
    Réponses: 12
    Dernier message: 26/02/2007, 14h23

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