Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mailing zmienna
Forum PHP.pl > Forum > PHP
Aquarius
Witam,
po raz kolejny przychodzę po pomoc, pewnie po dłuższym grzebaniu i przemyśleniu w końcu bym doszedł, ale że zaczyna się weekend - zależy mi trochę na czasie - tak więc do rzeczy... mam oczywiście gotowy skrypt do mailingu, jak piszą w dokumentacji zmienne powinny być podstawiane prawidłowo, ale tak nie jest, po wstawieniu {USER_NAME} w każdej kolejnej wiadomości wyświetla się ta sama nazwa użytkownika - z pierwszego rekordu w bazie, tak wygląda kod:

  1. $query = "SELECT * FROM ".TABLE_PREFIX."users";
  2. $result = mysql_query($query);
  3. $success = $failed = 0;
  4. while($value = mysql_fetch_array($result))
  5. {
  6. $content = str_replace("{USER_ID}",$value['user_id'],$content);
  7. $content = str_replace("{USER_NAME}",$value['user_name'],$content);
  8. $subject = str_replace("{USER_ID}",$value['user_id'],$subject);
  9. $subject = str_replace("{USER_NAME}",$value['user_name'],$subject);
  10.  
  11. if(mail($value['user_email'],$subject,$content,$headers)){
  12. $success = $success+1;
  13. }
  14. else{
  15. $failed = $failed+1;
  16. }
  17. }


jak to poprawić? pętlą foreach? jeżeli tak to w jaki sposób? próbowałem już wiele opcji

z góry dziękuję za jakąkolwiek odpowiedź,
pozdrawiam
markonix
Zauważ, że z pierwszym obrotem pętli {USER_NAME} zmieniasz na konkretną nazwę, więc za drugim obrotem nie ma już {USER_NAME}.

Albo znajdź ciekawsze rozwiązanie - np. swift_mailer posiada do tego specjalny plugin, albo popraw ten zapisując "nowy" content i nowy "subject" pod nową zmienną - choćby $content2. Tym samym z każdym obrotem pętli działasz na oryginale.

Poza tym str_replace przyjmuje argumenty także w postaci tablicy - 4 linijki i ewentualne przyszłe dodatkowe zmienne można zastąpić dwoma - to już luźna sugestia.
ADeM
Zauważ, że podmieniasz teksty na odpowiednie wartości tylko w pierwszym przejściu pętli. W drugim w $content i $subject nie ma już {USER_ID}, tylko to co wstawiłeś w pierwszym.
Zrób sobię osobną zmienną, w której trzymasz wzór, a w pętli operuj na kopiach.

==EDIT==
Spóźniłem się ;-)
lukaskolista
Analiza kodu:
1. Przed petla deklarujesz zmienna $content (tresc wiadomosci).
2. W tresci wiadomosci jest znacznik {USER_NAME}.
3. Podczas przetwarzania zwrotu z bazy zamieniasz znacznik {USER_NAME} na nazwe uzytkownika.
4. Wszedzie uzywasz tej samej zmiennej $content.

Pytanie: Czy po przetworzeniu pierwszego rekordu w tresci wiadomosci $content znacznik {USER_NAME} bedzie dalej istnial?
Aquarius
ogromne dzięki panowie, no jak widać całe życie się człowiek uczy, oczywiście działa, na szybko zmieniłem sobie tylko $content = ... na $content2 = ...
oczywiście jest mało przejrzyście dlatego sobie to później przepiszę (zdefiniuję przed pętlą), ale bardzo precyzyjnie mnie naprowadziliście
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.