aidez moi svp extraire depuis la base

aidez moi svp extraire depuis la base - PHP - Programmation

Marsh Posté le 03-05-2016 à 22:11:07    

comment faire pour que j'extraire depuis ma base les clients qui n'ont pas entrer une puissance depuis 7 jours .  
le bute c'est d'envoyer un email automatique à ces clients pour les rappeler .  
le champs id signifie l'identifieur du client.  
j'ai bien fait l'extraction mais je ne connais pas comment faire un contrôle automatique pour que le programme extraire ces client et l'envoyer un email .  

Code :
  1. $requete="ALTER TABLE  `puissance` ORDER BY  `date` DESC ";
  2.   $requete2=mysql_query($requete);
  3.   $query ="SELECT   DISTINCT `date`, `id` FROM  `puissance` ORDER BY `id` ";
  4. $query2=mysql_query($query);
  5. $i_nbLigne1 = mysql_num_rows($query2);
  6. while ($tableau = mysql_fetch_assoc($query2)){
  7. $tab = $tableau['id'].$tableau['date'] ;
  8. echo $tab;}}


 
http://img11.hostingpics.net/pics/376718Sanstitre.png

Reply

Marsh Posté le 03-05-2016 à 22:11:07   

Reply

Marsh Posté le 03-05-2016 à 23:55:29    

Indice : t'as un champ "date". Dans ta requête, indique une clause WHERE avec une condition sur la date ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-05-2016 à 11:10:43    

DATEDIFF est ton ami :)

Reply

Marsh Posté le 04-05-2016 à 12:08:46    

rufo a écrit :

Indice : t'as un champ "date". Dans ta requête, indique une clause WHERE avec une condition sur la date ;)


 
 
merci beaucoup rufo cé tres gentil j'ai déja trouver la solution  :bounce:

Reply

Marsh Posté le 04-05-2016 à 12:10:32    

antac a écrit :

DATEDIFF est ton ami :)


cé quoi le DATEDIFF un fonction ?  :hello:

Reply

Marsh Posté le 04-05-2016 à 12:22:08    

Commence par dégager ta première requête "ALTER TABLE".
Elle sert à rien (dans ce contexte).


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 04-05-2016 à 12:24:15    

kao98 a écrit :

Commence par dégager ta première requête "ALTER TABLE".
Elle sert à rien (dans ce contexte).


 
AH D'accord  merci pour l'information  :hello:  

Reply

Marsh Posté le 04-05-2016 à 13:41:42    

nouracm a écrit :


cé quoi le DATEDIFF un fonction ?  :hello:


 
C'est une fonction de MYSQL permettant de connaître la différence entre deux dates (en nombre de jours par exemple)

Reply

Marsh Posté le 04-05-2016 à 13:55:23    

antac a écrit :


 
C'est une fonction de MYSQL permettant de connaître la différence entre deux dates (en nombre de jours par exemple)


 
 
ah merci  
est-ce-tu connais comment je peut avoir combien de fois l'email à été envoyés .
le but c'est d'afficher sur l'ecran un message contenent le nombre d'email à été envoyés.
cé le code pour que tu comprend

Code :
  1. $query ="SELECT   DISTINCT `date`, `id` FROM  `puissance` ORDER BY `id`  ";
  2. $query2=mysql_query($query);
  3. $i_nbLigne1 = mysql_num_rows($query2);
  4. while ($tableau = mysql_fetch_array($query2)){
  5. $id=$tableau['id'];
  6. date_default_timezone_set('Africa/Tunis');
  7. $dauj=date("Y-m-d" );
  8. $j =date('d');
  9. $m =date('m');
  10. $a =date('Y');
  11. $dateb=$tableau['date'];
  12.   $jb= substr($dateb,8,2);
  13. $mb=substr($dateb,5,2);
  14. $ab=substr($dateb,0,4);
  15. $dj=$j-$jb;
  16. $dm=$m-$mb;
  17. if($j>$jb){ $dj=$j-$jb;}
  18. else{$dj=$jb-$j;};
  19.  if( $dm == 0 and $dj>6){echo "plus 7";
  20. $sql="SELECT `mail` FROM `client` WHERE `id` LIKE '$id' ";
  21.    $sql2=mysql_query($sql);
  22. while( $res = mysql_fetch_array( $sql2 ))
  23.   {$email=$res['mail'];
  24.    $mail = $email; // Déclaration de l'adresse de destination.
  25.          if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
  26.          {$passage_ligne = "\r\n";}
  27.          else
  28.         {$passage_ligne = "\n";}
  29. //=====Déclaration des messages au format texte et au format HTML.
  30. $message_txt = "Sme Solaire - Ressouvenir,";
  31. $message_html = "<html><head></head><body>Cher client<br>l'entreprise <b>Sme Solaire</b> vous remercie pour votre participation à améliorer nos services.
  32. On a indiqué que vous n'avez pas entrer une puissance derniérement.
  33. Pour entrer ce dernier, vous devez vous authentifier en indiquant votre Nom et votre mot de passe, veuillez suivre SVP ce lien <u>www.Sme Solaire.com </u> afin de connecter.  </body></html>";
  34. //==========
  35. //=====Création de la boundary.
  36. $boundary = "-----=".md5(rand());
  37. $boundary_alt = "-----=".md5(rand());
  38. //==========
  39. //=====Définition du sujet.
  40. $sujet = "Ressouvenir";
  41. //=========
  42. //=====Création du header de l'e-mail.
  43. $header = "From: $email ".$passage_ligne;
  44. $header.= "Reply-to: $email ".$passage_ligne;
  45. $header.= "MIME-Version: 1.0".$passage_ligne;
  46. $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
  47. //==========
  48. //=====Création du message.
  49. $message = $passage_ligne."--".$boundary.$passage_ligne;
  50. $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
  51. $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
  52. //=====Ajout du message au format texte.
  53. $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
  54. $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
  55. $message.= $passage_ligne.$message_txt.$passage_ligne;
  56. //==========
  57. $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
  58. //=====Ajout du message au format HTML.
  59. $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
  60. $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
  61. $message.= $passage_ligne.$message_html.$passage_ligne;
  62. //==========
  63. $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
  64. //==========
  65. $message.= $passage_ligne."--".$boundary.$passage_ligne;
  66. mail($mail,$sujet,$message,$header);}
  67.  
  68. }
  69. elseif ( $dm == 0 and $dj <= 6)  {  echo "erreur<br>";}
  70. elseif( $dm !== 0 and $dj>6)
  71.     {echo "plus 7";
  72.  $sql="SELECT `mail` FROM `client` WHERE `id` LIKE '$id' ";
  73.    $sql2=mysql_query($sql);
  74. while( $res = mysql_fetch_array( $sql2 ))
  75.   {$email=$res['mail'];
  76.    $mail = $email; // Déclaration de l'adresse de destination.
  77.          if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
  78.          {$passage_ligne = "\r\n";}
  79.          else
  80.         {$passage_ligne = "\n";}
  81. //=====Déclaration des messages au format texte et au format HTML.
  82. $message_txt = "Sme Solaire - Ressouvenir,";
  83. $message_html = "<html><head></head><body>Cher client<br>l'entreprise <b>Sme Solaire</b> vous remercie pour votre participation à améliorer nos services.
  84. On a indiqué que vous n'avez pas entrer une puissance derniérement.
  85. Pour entrer ce dernier, vous devez vous authentifier en indiquant votre Nom et votre mot de passe, veuillez suivre SVP ce lien <u>www.Sme Solaire.com </u> afin de connecter.  </body></html>";
  86. //==========
  87. //=====Création de la boundary.
  88. $boundary = "-----=".md5(rand());
  89. $boundary_alt = "-----=".md5(rand());
  90. //==========
  91. //=====Définition du sujet.
  92. $sujet = "Ressouvenir";
  93. //=========
  94. //=====Création du header de l'e-mail.
  95. $header = "From: $email ".$passage_ligne;
  96. $header.= "Reply-to: $email ".$passage_ligne;
  97. $header.= "MIME-Version: 1.0".$passage_ligne;
  98. $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
  99. //==========
  100. //=====Création du message.
  101. $message = $passage_ligne."--".$boundary.$passage_ligne;
  102. $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
  103. $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
  104. //=====Ajout du message au format texte.
  105. $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
  106. $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
  107. $message.= $passage_ligne.$message_txt.$passage_ligne;
  108. //==========
  109. $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
  110. //=====Ajout du message au format HTML.
  111. $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
  112. $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
  113. $message.= $passage_ligne.$message_html.$passage_ligne;
  114. //==========
  115. $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
  116. //==========
  117. $message.= $passage_ligne."--".$boundary.$passage_ligne;
  118. mail($mail,$sujet,$message,$header);}}
  119.   
  120. elseif( $dm !== 0 and $dj<=6)
  121.       {$djj=30+$dj;
  122.       if($djj>6) {echo "plus 7";
  123.    $sql="SELECT `mail` FROM `client` WHERE `id` LIKE '$id' ";
  124.    $sql2=mysql_query($sql);
  125. while( $res = mysql_fetch_array( $sql2 ))
  126.   {$email=$res['mail'];
  127.    $mail = $email; // Déclaration de l'adresse de destination.
  128.          if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
  129.          {$passage_ligne = "\r\n";}
  130.          else
  131.         {$passage_ligne = "\n";}
  132. //=====Déclaration des messages au format texte et au format HTML.
  133. $message_txt = "Sme Solaire - Ressouvenir,";
  134. $message_html = "<html><head></head><body>Cher client<br>l'entreprise <b>Sme Solaire</b> vous remercie pour votre participation à améliorer nos services.
  135. On a indiqué que vous n'avez pas entrer une puissance derniérement.
  136. Pour entrer ce dernier, vous devez vous authentifier en indiquant votre Nom et votre mot de passe, veuillez suivre SVP ce lien <u>www.Sme Solaire.com </u> afin de connecter.  </body></html>";
  137. //==========
  138. //=====Création de la boundary.
  139. $boundary = "-----=".md5(rand());
  140. $boundary_alt = "-----=".md5(rand());
  141. //==========
  142. //=====Définition du sujet.
  143. $sujet = "Ressouvenir";
  144. //=========
  145. //=====Création du header de l'e-mail.
  146. $header = "From: $email ".$passage_ligne;
  147. $header.= "Reply-to: $email ".$passage_ligne;
  148. $header.= "MIME-Version: 1.0".$passage_ligne;
  149. $header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
  150. //==========
  151. //=====Création du message.
  152. $message = $passage_ligne."--".$boundary.$passage_ligne;
  153. $message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
  154. $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
  155. //=====Ajout du message au format texte.
  156. $message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
  157. $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
  158. $message.= $passage_ligne.$message_txt.$passage_ligne;
  159. //==========
  160. $message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
  161. //=====Ajout du message au format HTML.
  162. $message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
  163. $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
  164. $message.= $passage_ligne.$message_html.$passage_ligne;
  165. //==========
  166. $message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
  167. //==========
  168. $message.= $passage_ligne."--".$boundary.$passage_ligne;
  169. mail($mail,$sujet,$message,$header);}}
  170.     else{echo "erreur<br>";}}
  171.       
  172. }


 
désolé pour mon faible français  
merci d'avance  :hello:

Reply

Marsh Posté le 09-05-2016 à 14:23:52    

Code :
  1. if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.


Cette condition m'a beaucoup fait rire :o
 
bogues = serveurs SMTP qui refusent les spammeurs par défaut.


---------------
sheep++
Reply

Marsh Posté le 09-05-2016 à 14:23:52   

Reply

Marsh Posté le 09-05-2016 à 15:06:19    

h3bus a écrit :

Code :
  1. if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.


Cette condition m'a beaucoup fait rire :o
 
bogues = serveurs SMTP qui refusent les spammeurs par défaut.


 
 j'ai pas bien compris mais la condition j'ai déja la testé et elle marche bien .
ou est la faute ? :hello:

Reply

Marsh Posté le 09-05-2016 à 15:12:32    

Edit: NVM j'ai mal lu


Message édité par h3bus le 09-05-2016 à 15:15:52

---------------
sheep++
Reply

Marsh Posté le 09-05-2016 à 16:17:58    

nouracm a écrit :

 

j'ai pas bien compris mais la condition j'ai déja la testé et elle marche bien .
ou est la faute ? :hello:


C'est pas le pb, tu peux dégager cette condition elle ne sert à rien, autant mettre du \r\n partout

Message cité 1 fois
Message édité par gatsu35 le 09-05-2016 à 16:28:19
Reply

Marsh Posté le 09-05-2016 à 17:02:51    

Le plus simple, est d'utiliser la fonction NOW() pour récupérer la date actuelle. Après, tu soustrait avec INTERVAL 7 DAY et tu as exactement ce que tu recherches. Maintenant je vois que tu as choisi une date et non un datetime dans ta structure de donnée ... De ce fait tu perds l'information de l'heure, ce qui peut-être embêtant car imprécis.
 
SELECT   DISTINCT `date`, `id` FROM  `puissance` WHERE `date` < (NOW() - INTERVAL 7 DAY) ORDER BY `id` ";

Reply

Marsh Posté le 09-05-2016 à 18:13:38    

gatsu35 a écrit :


C'est pas le pb, tu peux dégager cette condition elle ne sert à rien, autant mettre du \r\n partout


 
ah d'accord merci  :)

Reply

Marsh Posté le 09-05-2016 à 18:19:10    

Moumoule a écrit :

Le plus simple, est d'utiliser la fonction NOW() pour récupérer la date actuelle. Après, tu soustrait avec INTERVAL 7 DAY et tu as exactement ce que tu recherches. Maintenant je vois que tu as choisi une date et non un datetime dans ta structure de donnée ... De ce fait tu perds l'information de l'heure, ce qui peut-être embêtant car imprécis.
 
SELECT   DISTINCT `date`, `id` FROM  `puissance` WHERE `date` < (NOW() - INTERVAL 7 DAY) ORDER BY `id` ";


woow cé géniale  j'ai résolu la probléme il ya déja 5 jours mais à 10 ligne presque j'ai fais comme ce ci  

Code :
  1. $query ="SELECT   DISTINCT `date`, `id` FROM  `puissance` ORDER BY `id`  ";
  2. $query2=mysql_query($query);
  3. $i_nbLigne1 = mysql_num_rows($query2);
  4. while ($tableau = mysql_fetch_array($query2)){
  5. $id=$tableau['id'];
  6. date_default_timezone_set('Africa/Tunis');
  7. $dauj=date("Y-m-d" );
  8. $j =date('d');
  9. $m =date('m');
  10. $a =date('Y');
  11. $dateb=$tableau['date'];
  12.   $jb= substr($dateb,8,2);
  13. $mb=substr($dateb,5,2);
  14. $ab=substr($dateb,0,4);
  15. $dj=$j-$jb;
  16. $dm=$m-$mb;
  17. $da=$a-$ab;
  18. if($j>$jb){ $dj=$j-$jb;}
  19. else{$dj=$jb-$j;};
  20. if($m>$mb){ $dm=$m-$mb;}
  21. else{$dm=$mb-$m;};


 
et j'ai tombé à tester à chaque foie sur le jour, le moi et l'année et j'ai finie mon code en 1000 ligne  
mais votre solution est géniale je ne l'ai connais pas avant  
merci encore fois

Reply

Marsh Posté le 09-05-2016 à 19:09:11    

Ta solution effectue le traitement côté serveur et non avec la requête à la BDD. C'est pas la solution idéale car tu vas rapatrier toutes les données.. Pour illustrer, imagine toi que tu as 10 000 enregistrements. Tu les récupères tous, et après via ton code php, tu vas traverser tous les enregistrements pour voir lesquels ont une date > que NOW() - 7 jours. Supposons qu'il y a que 100 enregistrements qui correspondent => du traitement overkill.  
 
Ça marche c'est sûr mais le mieux étant de filtrer directement via la requête qui va directement de donner les 100 enregistrements.

Reply

Marsh Posté le 09-05-2016 à 19:25:40    

Moumoule a écrit :

Ta solution effectue le traitement côté serveur et non avec la requête à la BDD. C'est pas la solution idéale car tu vas rapatrier toutes les données.. Pour illustrer, imagine toi que tu as 10 000 enregistrements. Tu les récupères tous, et après via ton code php, tu vas traverser tous les enregistrements pour voir lesquels ont une date > que NOW() - 7 jours. Supposons qu'il y a que 100 enregistrements qui correspondent => du traitement overkill.  
 
Ça marche c'est sûr mais le mieux étant de filtrer directement via la requête qui va directement de donner les 100 enregistrements.


 
oui cé vrai tu as raison merci beaucoup cé trés gentil  
est-ce-que vous avez un cours de php avancé à fin d'améliorer mon niveau ?

Reply

Marsh Posté le 10-05-2016 à 06:16:19    

Evite d'écrire en langage SMS. Sinon pour les cours, là c'est plus un cours sur les bases de données et bien savoir quand il faut faire un traitement du coté de la base que du coté PHP. En général il faut faire un max de traitement coté base.

Reply

Marsh Posté le 10-05-2016 à 17:22:03    

gatsu35 a écrit :

Evite d'écrire en langage SMS. Sinon pour les cours, là c'est plus un cours sur les bases de données et bien savoir quand il faut faire un traitement du coté de la base que du coté PHP. En général il faut faire un max de traitement coté base.


ah d'accord merci beaucoup pour l'information  :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed