dobra: suchen/ersetzen in Schleife

Hallo,

Mein Problem:
Der Mailtext ($kdmailtext) wird aus einer .cfg Datei ausgelesen, die mail-Adresse, Anrede, Name usw. aus der DB.
Im Mailtext sollen jetzt -ANREDE- und -NAME- durch die Variablen aus der DB ersetzt werden.

Mein Versuch (gekürzte Form)

		my $sql2 = qq |SELECT ANREDE, NAME FROM $dbtableuser WHERE GESENDET = 0  |;  
		my $read = ssp::readSQLData($sql2, "anrede", "name" );  
		if ($read > 0) {  
			for (my $i = 0; $i < $read; $i++) {					  
			my $anrede = main::qform(ssp::get_var_db ("anrede",$i));  
			my $name = main::qform(ssp::get_var_db ("name",$i));  
					  
			$kdmailtext =~ s/-ANREDE-/$anrede/g;  
			$kdmailtext =~ s/-NAME-/$name/g;  
			  
				require HTML::Entities;  
				$decodedtext  = HTML::Entities::decode($kdmailtext);  
				$decodedbetreff  = HTML::Entities::decode($betreff);  
				$decodedfrom  = HTML::Entities::decode($from);  
  
						my $prog = ssp::get_mailprog(); # Pfad zum Mailprogramm  
						open(MAIL,"|$prog -t");  
						print MAIL "From: $decodedfrom \n";  
						print MAIL "To: $sendmail\n";  
						print MAIL "Subject: $decodedbetreff\n\n";  
						print MAIL "$decodedtext";  
						close(MAIL);  
						  
				print "OK, Mail an $sendmail/$anrede $name versandt...<br>";  
								  
				my $sqlg = qq|UPDATE $dbtableuser SET GESENDET = "$jetzt" WHERE EMAIL = '$sendmail' AND ORDERNR = '$ordernr'|;  
				    ssp::exec_sql($sqlg, 1);  
			}  
		}

Die Mails werden korrekt an die richtigen Adressen versendet und
print "OK, Mail an $sendmail/$anrede $name versandt...<br>";
gibt auch die richtigen Daten aus.

In ALLEN Mails wird aber -ANREDE- und -NAME- immer nur durch den ERSTEN gefundenen DB-Eintrag ersetzt.

Was mache ich falsch?

lg
dobra

  1. Hi,

    for (my $i = 0; $i < $read; $i++) {
    my $anrede = main::qform(ssp::get_var_db ("anrede",$i));
    my $name = main::qform(ssp::get_var_db ("name",$i));

    $kdmailtext =~ s/-ANREDE-/$anrede/g;
    $kdmailtext =~ s/-NAME-/$name/g;

    Ab dem ersten Schleifendurchlauf ist in $kdmailtext weder "-ANREDE-" noch "-NAME-" vorhanden, die sind ja durch die konkreten Werte ersetzt.

    Beim zweiten/dritten/... Schleifendurchlauf gibt es in $kdmailtext also nichts mehr, was durch die neuen Werte ersetzt werden könnte.

    Du müßtest am Schleifenanfang den $kdmailtext wieder auf den ursprünglichen Wert (den $kdmailtext vor der Schleife hatte) zurücksetzen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hallo Andreas,

      Du müßtest am Schleifenanfang den $kdmailtext wieder auf den ursprünglichen Wert (den $kdmailtext vor der Schleife hatte) zurücksetzen.

      Vielen Dank!
      DAS war mein Fehler ....
      jetzt funktioniert's :D

      lg
      dobra

  2. Hallo,

    Der Mailtext ($kdmailtext) wird aus einer .cfg Datei ausgelesen, die mail-Adresse, Anrede, Name usw. aus der DB.
    Im Mailtext sollen jetzt -ANREDE- und -NAME- durch die Variablen aus der DB ersetzt werden.

    Ich würde das so machen:

      
    package Letter;  
      
    sub new{  
     my $class = shift;  
     my $vars  = shift;  
      
     my $letter = qq(  
      $vars->{Anrede},  
      
      $vars->{Text}  
      
      Mit freundlichen Grüßen  
      ...  
     );  
      
     return bless {LETTER => $letter}, $class;  
    }  
      
    my $let = Letter->new({Anrede => $anrede, Text => $text});  
    $let->send(); # Funktion ist noch zu schreiben  
      
    
    

    Schöne Pfingsten,
    Horst Heiligengeist