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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    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 expérimenté

    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
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    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 : 44
    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
    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
    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.

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2010
    Messages : 88
    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;
    		  ;}?>

+ 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