Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie poczty [MySQL][PHP]
Forum PHP.pl > Forum > Przedszkole
elldiablo
Witam,

Zrobiłem stronkę na której jest kilka sklepów (oddziałów) i każdy sklep ma swój adres e-mail.

Na stronie można dodawać do koszyka produkty z różnych sklepów. Np. można mieć Produkt A ze sklepu A i produkt B ze sklepu B itd.

Po złożeniu zamówienia wysyłam mail do osoby która podała e-mail w formularzu do administratora i chciałbym do obu sklepów z których zostały zamówione produkty.

Używam funkcji mail().

W bazie danych z zamówieniami mam dwa różne ID_sklepu które są połączone z tabelą gdzie znajdują się dane sklepów.

A oto skrypt:
  1. $to = $e_mail; // email użytkownika który podaje w formularzu
  2. $subject = 'Zamówienie w sklepie internetowym'; // Tytuł w wiadomości
  3. $message = ''; // Kod html z zamówieniem
  4.  
  5. $headers = "MIME-Version: 1.0\r\n";
  6. $headers .= "Content-type: text/html; charset=utf-8\r\n";
  7. $headers .= "From: <email@email.pl>\r\n";
  8. $headers .= "Cc: <email@email.pl>\r\n";
  9. $headers .= "X-Mailer: PHP / ".phpversion()."\r\n";
  10.  
  11. mail ($to, $subject, $message, $headers);


Potrzebuje pobrać z bazy danych dwa adresy e-mail (lub więcej) i dodać do tego skryptu. Adresy mają być sklepowe.

Proszę o pomoc,
Pozdrawiam

mortus
O tym, czy da się tak zrobić nie decyduje kod odpowiedzialny za wysyłanie wiadomości e-mail, ale struktura samych zamówień. Jak są one u Ciebie realizowane? Tzn. jakie informacje zawiera dane zamówienie, a dokładniej jak zapisywane są te ID_sklepu?
elldiablo
Sesja zapisywana jest w tabeli tymczasowej z dodawanymi lub odejmowanymi produktami.

Następnie jeśli klient wciśnie "Kup" to sesja zapisywana jest w tabeli z zamówieniami a tabela tymczasowa jest kasowana.

Tabela z zamówieniami wygląda następująco:

  1. CREATE TABLE IF NOT EXISTS `hb_orders` (
  2. `ord_sessid` varchar(50) COLLATE utf8_bin NOT NULL,
  3. `ord_hidden` int(11) NOT NULL,
  4. `ord_data` date NOT NULL,
  5. `ord_godzina` time NOT NULL,
  6. `ord_id_produkt` int(11) NOT NULL,
  7. `ord_id_sklep` int(11) NOT NULL,
  8. `ord_id_model` int(11) NOT NULL,
  9. `ord_tlf_imei` varchar(20) COLLATE utf8_bin NOT NULL,
  10. `ord_tlf_sprzedaz_www` float(6,2) NOT NULL,
  11. )


ord_id_sklep -> pobieram dane z tabeli gdzie są adresy e-mail

A może będzie łatwiej jeśli do tabeli z zamówieniami będę zapisywał od razu e-mail sklepu(ów)?
mortus
Zapytanie wybierające email powinno zatem wyglądać tak
  1. $query = "SELECT ds.email FROM dane_sklepow ds LEFT JOIN hb_orders ho ON ho.ord_id_sklep=ds.id WHERE ho.ord_sessid=$id_sesji";
W kolejnych rekordach zwróconego wyniku będziemy mieć adresy poszczególnych sklepów. Choć wydaje mi się, że zamówienie powinno być jedno, identyfikowane np. po własnym id i powinna istnieć jeszcze jedna tabela realizująca relację wiele do wielu, pomiędzy zamówieniem a produktami (i ewentualnie danymi sklepu, bo to można na kilka sposobów zorganizować).
elldiablo
Zrobiłem taką kwerendę:

  1. $query3 = "SELECT `hb_orders`.*, `hb_sklep`.*
  2. FROM `hb_orders`
  3. LEFT JOIN `hboffice`.`hb_sklep` ON `hb_orders`.`ord_id_sklep` = `hb_sklep`.`id_sklep`
  4. WHERE ord_sessid='$sessid'";
  5. $results3 = mysql_query($query3) or (mysql_error());
  6. while ($row3 = mysql_fetch_array($results3)) {
  7. extract($row3);
  8. echo $hb_email; // pobiera mi oba adresy e-mail
  9. }
  10. echo $hb_email; // pobiera mi jeden adres e-mail


Jeśli poza nawiasami pobiorę zmienną $hb_email to pobieram tylko jeden e-mail (jeśli produkty są kupione w tym samym sklepie to nie ma problemu) ale jeśli są dwa różne adresy to drugi sklep nie będzie poinformowany o zakupie.

I teraz trza pomyśleć nad tym aby w zmiennej
$to = $email // adres email z formularza od kupującego
dodać pozostałe dwa adresy e-mail lub więcej.

mortus
Zastępujemy pętle while pętlą for:
  1. $to = '';
  2. for($i = 0; $i < mysql_num_rows($result3); $i++) {
  3. $row3 = mysql_fetch_array($result3, MYSQL_ASSOC);
  4. extract($row3);
  5. $to .= $hb_email;
  6. if($i < mysql_num_rows($result3) - 1) $to .= ', ';
  7. }
  8. echo $to;
Adresy do funkcji mail() mogą być przekazane właśnie w taki sposób, w jaki zostały zapisane pod zmienną $to.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.