Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mailing zmienna
Aquarius
post 27.07.2012, 09:02:26
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 18.10.2008

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


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

Ten post edytował Aquarius 27.07.2012, 09:04:12
Go to the top of the page
+Quote Post
markonix
post 27.07.2012, 09:28:59
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.

Ten post edytował markonix 27.07.2012, 09:33:05


--------------------
Go to the top of the page
+Quote Post
ADeM
post 27.07.2012, 09:29:34
Post #3





Grupa: Zarejestrowani
Postów: 455
Pomógł: 69
Dołączył: 23.10.2004
Skąd: Oświęcim

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


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ę ;-)

Ten post edytował ADeM 27.07.2012, 09:30:04


--------------------
Go to the top of the page
+Quote Post
lukaskolista
post 27.07.2012, 09:32:12
Post #4





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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?
Go to the top of the page
+Quote Post
Aquarius
post 27.07.2012, 09:52:08
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 18.10.2008

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


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
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 22.05.2024 - 15:28