03. september 2003 - 20:45Der er
26 kommentarer og 2 løsninger
Sende emai til en $brugernummer fra en database
Jeg skal sette opp et cgi som søger i en enkel database efter brugernummer som skrives ind i form_skriv_ind_nummer.html. Databasen skal ha kun to felt: nummer og email. Hvis den finder bruger så sender den en print "tekst" til email som står i databasen. Skal bruge $mailprog = '/sendmail' der.
Kan jeg lave denne databasen som en *.txt fil som cgi kan lese/hente emailadressen ifra? Er det noen som kan hjelpe?
Hvis du ikke skal redigere ret meget i din database, så kan du godt. Jeg ville selv gøre det i mysql, men hvis du ikke gider sætte dig ind i mysql, så kan du godt gøre det i en txt-fil.
Så kan du fx. gemme dataen sådan: 1,blah@blah.com 2,blah@hotmail.com 3,someone@hotmail.com ... og så videre, med ny linie efter hver adresse.
I dit script kan du så: åbne filen, læse den ind i et array, lave en foreach $line(@file), split'e ved kommaet (,), og så checke om det før kommaet er lig med det tal du har tastet ind i form'en, og hvis det er, så sende dit brev til email adressen.
Du kommer så til at kører hele databasen igennem hver gang du skal sende en mail, men det går så hurtigt at det lægger du ikke mærke til.
dinox -> Tak for din svar, mfalck -> velkommen Jeg ska ta den txt varianten og prøve på, da den skal ikke oppdateres ved bruk av Perl. Kan jere hjelpe meg i gang med den CGI søgebiten i txt filen? Den skal søge i:
my $formnum = param('nummer'); #for at få dit nummer fra html-formen. Jeg regner med at nummer-field'et i formen hedder "nummer"
my $fh = new FileHandle ("< test_bruger.txt"); my @ary;
while (<$fh>) { @ary=split /,/; # her splitter du, så $ary[0] er det før kommaet, og $ary[1] er det efter kommaet, altså adresserne if($ary[0]==$formnum){ # du manglede bare denne IF-sætning open(NEWSLETTER, "|/usr/sbin/sendmail -t") or die "Sendmail Offline: $!\n"; print NEWSLETTER "From: YourName <yourname\@emailadress.dk>\n"; print NEWSLETTER "To: <$ary[1]>\n"; print NEWSLETTER "Subject: Flere nyheder!! \n"; print NEWSLETTER "Og her skriver du dit indhold"; close (NEWSLETTER) or warn "sendmail didn't close nicely"; } }
mfalck -> Vi er veldig nær her :) Jeg har problem med 'if else' der. Den skriver også for hver =! $ary, se ned ->:
use CGI ":all"; use FileHandle;
my $formnum = param('nummer'); #for at få dit nummer fra html-formen. Jeg regner med at nummer-field'et i formen hedder "nummer"
my $fh = new FileHandle ("< test_bruger.txt"); my @ary;
while (<$fh>) { @ary=split /,/; # her splitter du, så $ary[0] er det før kommaet, og $ary[1] er det efter kommaet, altså adresserne if($ary[0]==$formnum){ # du manglede bare denne IF-sætning print "<$ary[1]>" } # open(NEWSLETTER, "|/usr/sbin/sendmail -t") or die "Sendmail Offline: $!\n"; # print NEWSLETTER "From: YourName <yourname\@emailadress.dk>\n"; # print NEWSLETTER "To: <$ary[1]>\n"; # print NEWSLETTER "Subject: Flere nyheder!! \n"; # print NEWSLETTER "Og her skriver du dit indhold"; # close (NEWSLETTER) or warn "sendmail didn't close nicely"; else { print "forkert kode ! " } # kan ikke ha den her, den leser hver @ary }
dinox -> mange tak for hjelpen, men ... hvis ## else{ print "forkert kode ! "; ## ligger i while (<$fh>) sow ... den printer for hver linie fra -> test_bruger.txt
jeg får som output: forkert kode ! blah@hotmail.com hvis koden er korrekt eller: forkert kode ! forkert kode ! hvis den er forkert.
hvis det er meget vigtigt for dig så kan du gøre sådan: my $success; while (<$fh>){ @ary=split /,/; if($ary[0]==$formnum){ $success="den fundne email adresse er: $ary[1]"; } } unless($success){ $success="Der kunne desværre ikke findes nogen adresse på dette nummer!"; }
Jeg har satt opp 'MAIL' biten og her har et lite problem med: ## print NEWSLETTER "To: <$ary[1]>\n"; # den blir forkert ## problemmet ligger i '\' før @. Output blir her: To: <blah@hotmail.com > # med '>' nede
når jeg bruger: print NEWSLETTER "To: <mig\@mig.com>\n"; # alt går bra
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.