Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP I MYSQL - Wysyłanie e-maila, Wysyłanie emaila do odpowiednich osób - z bazy danych
Karmazyner
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 15.04.2022

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Dziękuje za odwiedzenie mojego tematu.
Od wczoraj siedzę sobie nad kodem który ostatecznie miałby wysyłać E-maile do dopasowanych do siebie osób pod kątem zainteresowań oraz innych parametrów.
Ogólnie bazę danych już zbudowałem, zapytania również i dostaje efekt jaki mnie satysfakcjonuje czyli w odpowiedzi dostaje osoby które do siebie pasują.
Zaprezentuje tutaj w skrócie jak wygląda okrojona baza oraz zapytanie wyświetlające użytkowników którzy są do siebie dopasowani:
DBFIDDLE LINK

Następnie w celu podglądu stosuje zapytanie na mojej stronie które wygląda mniej więcej tak:
PHP + HTML:
  1. <?php
  2. include_once 'connection.php';
  3. $result = mysqli_query($conn,"select
  4. m.id, m.imie, m.email,
  5. k.id, k.imie, k.email
  6. from
  7. wybory c
  8. join wybory s
  9. on c.wybierajacy = s.wybor
  10. left join uzytkownicy m on m.id = c.wybierajacy
  11. left join uzytkownicy k on k.id = c.wybor
  12. where s.wybierajacy = c.wybor
  13. and m.plec = 'M'
  14. and k.plec = 'K');
  15. ?>
  16.  
  17. <?php
  18. if (mysqli_num_rows($result) > 0) {
  19. ?>
  20.  
  21. <table class='table table-bordered table-striped'>
  22. <tr>
  23. <td>ID</td>
  24. <td>Imię</td>
  25. <td>Email</td>
  26. <td></td>
  27. <td>ID</td>
  28. <td>Imię</td>
  29. <td>Email</td>
  30. </tr>
  31.  
  32. <?php
  33. $i=0;
  34. while($row = mysqli_fetch_array($result)) {
  35. ?>
  36.  
  37. <tr>
  38. <td><?php echo $row["0"]; ?></td>
  39. <td><?php echo $row["1"]; ?></td>
  40. <td><?php echo $row["2"]; ?></td>
  41. <td></td>
  42. <td><?php echo $row["id"]; ?></td>
  43. <td><?php echo $row["imie"]; ?></td>
  44. <td><?php echo $row["email"]; ?></td>
  45. <tr>
  46.  


Na co w odpowiedzi dostaje:
Cytat
idㅤㅤㅤimieㅤㅤㅤㅤemailㅤㅤㅤㅤㅤㅤㅤidㅤㅤimieㅤㅤㅤㅤemail
203ㅤAdam WㅤadamW@gmail.comㅤ101ㅤKasia BㅤkasiaB@gmail.com
204ㅤPiotr KㅤㅤpiotrK@gmail.comㅤㅤ101ㅤKasia BㅤkasiaB@gmail.com
204ㅤPiotr KㅤㅤpiotrK@gmail.comㅤㅤ102ㅤOla SㅤㅤolaS@gmail.com


I teraz kwestia mojego problemu.
Jest ktoś w stanie pokazać przykład jak po przyciśnięciu przycisku mogę wysłać email "na krzyż?" bez wysyłania podwójnych emaili do tej samej osoby?
Jakich e-maili oczekuje?

Pierwszy email:
Cytat
Od kogo: Mojemail@gmail.com
Do kogo: adamW@gmail.com
Temat: Masz dopasowanie!
Body:
Gratuluje Adam W, dopasowaliśmy Cie z:
Kasia B (kasiaB@gmail.com)

I w tym nie widzę problemu... Ale problem pojawia się przy wysyłce emaila do Kasia B, która ma już dwa dopasowania czyli: Adam W oraz Piotr K.

Cytat
Od kogo: Mojemail@gmail.com
Do kogo: kasiaB@gmail.com
Temat: Masz dopasowanie!
Body:
Gratuluje Kasia B, dopasowaliśmy Cie z:
Adam W (adamW@gmail.com)
Piotr K (piotrK@gmail.com)


I idac dalej wiadomość do Piotra K będzie będzie zawierała w body dwie osoby bo ma dwa dopasowania, zarówno z Kasia B oraz Ola S ( jedna wiadomość z dwoma dopasowanymi osobami ) a już Ola S w body będzie miała tylko jedną osobę którą jest Piotr W.

Jest ktoś w stanie pokazać taki uniwersalny kod napisany w php który będzie wysyłał e-maile tak jak opisałem to powyżej?
Przepraszam, ale lepiej nie potrafiłem tego opisać, jeśli coś jest niezrozumiałe proszę pytać.
Pozdrawiam! (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Salvation
post
Post #2





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Generalnie, to nie wiem dlaczego ten temat jest tutaj, a nie w Przedszkolu, ale...
Ten kod Ci działa tak jak chcesz, tak?
  1. <?php
  2. $headers = array(
  3. 'From' => 'dasda@gmail.com',
  4. 'Reply-To' => 'dasda@gmail.com'
  5.  
  6. );
  7.  
  8.  
  9. foreach ($males as $idMale => $male) {
  10.  
  11. $to = $male['email'];
  12. $subject = "xCześć {$male['name']} oto dopasowania które dla Ciebie przygotowaliśmy:";
  13. $message = "Dopasowaliśmy Cię z następującymi osobami: \n";
  14. foreach ($male['females'] as $female) {
  15. $message .= "Pani {$female['name']}. Skontaktuj się: {$female['email']} \n";
  16. }
  17.  
  18. $status = mail($to, $subject, $message, $headers);
  19. if($status)
  20. {
  21. ?>
  22. <tr>
  23. <td><?php echo $to; ?></td>
  24. <td><?php echo 'Wysłano!'; ?></td>
  25. </tr>
  26. <?php
  27. } else {
  28. ?>
  29. <tr>
  30. <td><?php echo $to; ?></td>
  31. <td><?php echo 'Nie wysłano!!'; ?></td>
  32. </tr>
  33. <?php
  34. }
  35.  
  36. }
  37.  
  38. foreach ($females as $idFemale => $female) {
  39.  
  40. $to = $female['email'];
  41. $subject = "xCześć {$female['name']} oto dopasowania które dla Ciebie przygotowaliśmy:";
  42. $message = "Dopasowaliśmy Cię z następującymi osobami: \n";
  43. foreach ($female['males'] as $male) {
  44. $message .= "Pan {$male['name']}. Skontaktuj się: {$male['email']} \n";
  45. }
  46.  
  47. $status = mail($to, $subject, $message, $headers);
  48. if($status)
  49. {
  50. ?>
  51. <tr>
  52. <td><?php echo $to; ?></td>
  53. <td><?php echo 'Wysłano!'; ?></td>
  54. </tr>
  55. <?php
  56. } else {
  57. ?>
  58. <tr>
  59. <td><?php echo $to; ?></td>
  60. <td><?php echo 'Nie wysłano!!'; ?></td>
  61. </tr>
  62. <?php
  63. }
  64.  
  65. }
  66. ?>
  67. </table>

No to teraz trzeba dodać zmienną, jako tablica, przed wszystkimi pętlami, a w pętlach dopisywać ID-ki. A później już tylko proste Query z użyciem `NOT IN()` i już.
  1. <?php
  2. ...
  3. $machedIds = [];
  4.  
  5.  
  6. foreach ($males as $idMale => $male) {
  7. $matchedIds[] = $male['id'];
  8.  
  9. ...
  10. }
  11.  
  12. foreach ($females as $idFemale => $female) {
  13. $matchedIds[] = $female['id'];
  14.  
  15. ...
  16. }
  17.  
  18. $sqlFormat = "SELECT * FROM `uzytkownicy` WHERE `id` NOT IN(%s)";
  19. $sql = sprintf($sqlFormat, implode($matchedIds, ','));


Ten post edytował Salvation 25.04.2022, 06:13:47
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 18:58