Bonjour à tous,

Je suis à la recherche d'une solution pour envoyer une page PHP par email. Je m'explique en détails:

Je dispose d'une page index.php avec un classement de commerciaux de leur chiffre d'affaires. L'idée est d'envoyer par un simple clic d'un bouton situé au dessus d'envoyer le classement par email en sachant que dans la BDD il y a leur adresse email de notifié. Avez vous une idée de comment je peux procéder ? J'ai créer une page PHP type à envoyer mais après je ne sais pas comment procéder.
Merci

25 réponses


Salut,
J'espère que c'est pas ton vrai nom
bref

Pourquoi tu veux une page php par email alors que tu peux envoyer un email en html tout simplement en remplacent des caractère spéciaux par les valeurs que tu veux.

Exemple:
Mon email en html:

<table>
    <tr>
        <td>Nom</td>
        <td>Nombre de client</td>
        <td>Prix par client</td>
    </tr>
    <tr>
        <td>%NOM_COMM_BASE%</td>
        <td>%NOMBRE_CLIENT_BASE%</td>
        <td>%PRIX_CLIENT_BASE%</td>
    </tr>
</table>

Mon script php qui va envoyer le mail

// je récupère mais info en base
$var = $mesVariablesEnBaseSousFormeDeTableau

$message = file_get_content('email.html')
$message = str_replace('%NOM_COMM_BASE%', $var['nomCommercial'], $message);
$message = str_replace('%NOMBRE_CLIENT_BASE%', $var['nombreClient'], $message);
$message = str_replace('%PRIX_CLIENT_BASE%', $var['prixClient'], $message);

$to = 'commerciaux@omg.com';
$subject = 'Tu es virée';
mail($to, $subject, $message);

Et voila le tour est joué tu as remplacé tes variable par les bonnes valeurs et tu as envoyé ton mail .

ps: le tableau c'est la vie pour l'écriture d'un mail

Oui c'est mon nom.....

Par contre si je procéde comme ça je n'aurais pas l'aspect graphique de ma page index.php

et je voudrais que avec un simple clic sa envoi le classement à tout les emails de ma bdd de mes commerciaux car si je veux rajouter un commercial il faudra que je tape dans le code pour rajouter l'email.

j'ai un exemple avec un centre de karting on a fait une course et nous avons reçu par email ceci
http://hpics.li/f0b8edb

C'est exactement ce que je t'ai montré mais tu n'as peut être pas compris mon exemple je vais recommencer mais en plus clair

ta table commercial (c'est un exemple, je vais pas la deviner) commercials

id | Nom  | email
 1 | Roger | roger@maboite.com
 2 | Bertrand | bertrand@maboite.com
 3 | Michel | michel@maboite.com

Les info sur les commerciaux benefices

id | Benef | commerciaux\_id
 1  | 100         | 1
 2  | 50          | 2
 3  | 60         | 3

Le template de l'email à envoyer (donc ta page index.php mais sans variable, sans condition et sans boucle sans balise php quoi)

<table>
    <tr>
        <td>Nom</td>
        <td>Bénéfice</td>
    </tr>
    <tr>
        <td>%NOM_COMM%</td>
        <td>%BENEFICE_BASE%</td>
    </tr>
</table>

Le script php qui va envoyé le mail

$db = mysqli..... // je me connecte à la base
$monSelect = 'SELECT * FROM benefices b , commercials c WHERE b.commerciaux\_id = c.id';
$resultat = mysqli_query($db, $monSelect);
while($var = mysqli_fetch_assoc($resultat))
{
    $message = file_get_content('index.php')
    $message = str_replace('%NOM_COMM_BASE%', $var['Nom'], $message);
    $message = str_replace('%BENEFICE_BASE%', $var['Benef'], $message);
    $to =$var['email']
    $subject = 'Tu es virée';
    mail($to, $subject, $message);
}

Donc la ça va envoyer un mail à tous les commerciaux enregistré en base avec le bénéfice de chacun

Merci
hm d'accord par contre le c.id il sert à quoi ? car actuellement ma base resemble a cela

id | pos | agences | nom | prenom | email                       | elec | humain |
 1  | 5       | Nantes|Toto | Pierre    | pt@domaine.fr     | 46446|454846 |

 elec et humain ce sont des prix.

c'était une relation entre la table commercials et benfices mais si tout est dans une seule table par besoin de faire la relation

D'accord, par contre il faut configurer le smtp en local ?

Si tu veux envoyer un mail, il est préférable

Merci, par contre j'ai une erreur: Fatal error: Call to undefined function file_get_content() in C:\wamp\www\classement\script_mails.php on line 9.

j'ai trouver pour l'erreur par contre il ne recupére pas les infos dans la BDD j'ai un message d'erreur.

Bonjour !
Prend le reflexe de nous écrire le message d'erreur car on ne peut pas le deviner !

pardon en effet Notice: Undefined index: agence in C:\wamp\www\classement\script_mails.php on line 11
j'ai un peu remplacer le code de départ de Ch0c4 mon code resemble à ça:

<?php
$bdd = new PDO('mysql:host=localhost;dbname=classement','root',' ');

$request = $bdd->query('SELECT * FROM ca');
while($var = $request->fetchAll(PDO::FETCH_ASSOC))
{
      $message = file_get_contents('mails.html);
      $message = str_replace(%POS%, $var['pos'], $message);
      $message = str_replace(%NOM_AGENCE%, $var['agence'], $message);
      $message = str_replace(%NOM_NOM%, $var['nom'], $message);
      $message = str_replace(%NOM_PRENOM%, $var['prenom'], $message);
      $message = str_replace(%CHIFFRE_HUMAIN%, $var['humain'], $message);
      $message = str_replace(%CHIFFRE_ELEC%, $var['elec'], $message);
      $message = str_replace(%TOTAL_CHIFFRE%, $var['elec']+$var['humain'], $message);

      $to = $var['email'];
      $subject = 'test';
      mail($to, $subject, $message);
    }
    ?>

A chaque fois que tu met $message = tu écrases le $message du dessus !

exemple :

$a = 2; 
$a = 1; 
echo $a // affiche 1 

$a = 2 ;
$a .= 1; 
echo $a; // affiche 21

Regarde pour faire un str_replace mutliple sur google ça devrait t'aider ! :)
ici par exemple http://stackoverflow.com/questions/7605480/str-replace-for-multiple-items

Tu as oublié un "'" dans file_get_contents

$message = file_get_contents('mails.html');

tu dois mettre en quote les textes

$message = str_replace('%NOM_NOM%', $var['nom'], $message);

et @Underscore pas dans ce cas la le str_replace remplace le message dans le 3eme paramêtre de la fonction

$message =  'mon texte %MAVAR% et mon autre texte %MAVAR2%';
echo $message; // mon texte %MAVAR% et mon autre texte %MAVAR2%
$message = str_replace('%MAVAR%', 'bonjour', $message);
echo $message; // mon texte bonjour et mon autre texte %MAVAR2%
$message = str_replace('%MAVAR2%', 'Salut', $message);
echo $message; // mon texte bonjour et mon autre texte Salut

Donc j'ai suivi vos 2 directives la dernière que j'ai faite est celle de underscrean mon code ressemble à cela

<?php
$bdd = new PDO('mysql:host=localhost;dbname=classement','root',' ');

$request = $bdd->query('SELECT * FROM ca');
while($var = $request->fetchAll(PDO::FETCH_ASSOC))
{
      $message = file_get_contents('mails.html);
      $message = str_replace(
      array(%POS%, $var['pos']),
      array(%NOM_AGENCE%, $var['agence']),
       array(%NOM_NOM%, $var['nom']),
        array(%NOM_PRENOM%, $var['prenom']),
         array(%CHIFFRE_HUMAIN%, $var['humain']),
          array(%CHIFFRE_ELEC%, $var['elec']),
           array(%TOTAL_CHIFFRE%, $var['elec']+$var['humain']), $messages);

      $to = $var['email'];
      $subject = 'test';
      mail($to, $subject, $message);
    }
    ?>

j'obtiens une erreur différente Fatal error: Only variables can be passed by reference in C:\wamp\www\classement\script_mails.php on line 19

N'écoute pas @Underscreen car il a tort (désolé mais c'est vrai) reprend le code précédent et rajoute les quotes aux endroit qui en manque

bon je test ta solution et je te dit si sa marche.

j'ai plusieurs messages d'erreurs identiques Notice: Undefined index: pos in C:\wamp\www\classement\script_mails.php on line 15

On poeut voir ton code s'il te plait mais je pense que tu as mal écrit str_replace http://php.net/manual/fr/function.str-replace.php

oui Choc4 je vois ce que tu veux dire et effectivement ça marche comme ça mais je trouve plus propre d'utiliser un tableau que de refaire des str_replace sur un message modifié.
Je n'ai pas tort car ma solution fonctionne, ceci dit elle ne règle pas le problème
L'erreur indique qu'index n'est pas défini
comme tableau par contre j'aurai plus fait ça en se basant sur les array

$message = str_replace(
      array(%POS%, %NOM_AGENCE%, %NOM_NOM%, %NOM_PRENOM%, %CHIFFRE_HUMAIN%, %CHIFFRE_ELEC%, %TOTAL_CHIFFRE%),
      array($var['pos'], $var['agence'], $var['nom'], $var['prenom'], $var['humain'], $var['elec'], $var['elec']+$var['humain']),
 $messages);
<?php
$bdd = new PDO('mysql:host=localhost;dbname=classement','root',' ');

$request = $bdd->query('SELECT pos,agence,nom,prenom,humain,elec,humain,email FROM ca');
while($var = $request->fetchAll(PDO::FETCH_ASSOC))
{
      $message = file_get_contents('mails.html');
      $message = str_replace(%POS%, $var['pos'], $message);
      $message = str_replace(%NOM_AGENCE%, $var['agence'], $message);
      $message = str_replace(%NOM_NOM%, $var['nom'], $message);
      $message = str_replace(%NOM_PRENOM%, $var['prenom'], $message);
      $message = str_replace(%CHIFFRE_HUMAIN%, $var['humain'], $message);
      $message = str_replace(%CHIFFRE_ELEC%, $var['elec'], $message);
      $message = str_replace(%TOTAL_CHIFFRE%, $var['elec']+$var['humain'], $message);

      $to = $var['email'];
      $subject = 'test';
      mail($to, $subject, $message);
    }
    ?>

il dit qu'il ne connait pas l'index pos donc qu'il ne le vois pas dans ta table

Sans envoie de mail tu peux juste faire un affichage des variable que tu récupère?

echo $var['pos']; par exemple

c'est au niveau du while que sa pose soucis car quand je sors le $var = $request->fetchAll(PDO::FETCH_ASSOC) j'ai le message d'erreur de echo $var['pos']; le reste apparement sa ce connecte.

<?php
$bdd = new PDO('mysql:host=localhost;dbname=classement','root',' ');

$request = $bdd->query('SELECT pos,agence,nom,prenom,humain,elec,humain,email FROM ca');

$var = $request->fetchAll(PDO::FETCH_ASSOC);
while($var = $request->fetchAll(PDO::FETCH_ASSOC))
{
      $message = file_get_contents('mails.html');
      $message = str_replace(%POS%, $var['pos'], $message);
      $message = str_replace(%NOM_AGENCE%, $var['agence'], $message);
      $message = str_replace(%NOM_NOM%, $var['nom'], $message);
      $message = str_replace(%NOM_PRENOM%, $var['prenom'], $message);
      $message = str_replace(%CHIFFRE_HUMAIN%, $var['humain'], $message);
      $message = str_replace(%CHIFFRE_ELEC%, $var['elec'], $message);
      $message = str_replace(%TOTAL_CHIFFRE%, $var['elec']+$var['humain'], $message);

      $to = $var['email'];
      $subject = 'test';
      mail($to, $subject, $message);
    }
    ?>

si je procéde comme cela je n'ai pas de message d'erreur.