Avatar billede JJ77 Juniormester
11. marts 2006 - 12:46 Der er 24 kommentarer og
1 løsning

sende en mail hvis en annonce er ved at udløbe

Er det muligt at sende en mail til nogle brugere hvis deres annonce er ved at udløbe? jeg har nogle tabeller hvor der står en udløbsdato på en annonce, og jeg ville gerne have mulighed for at sende en mail til brugeren hvis der fx er 5 dage til annoncen udløber.
Avatar billede moocher Nybegynder
11. marts 2006 - 13:58 #1
tja noget i stil af

lav et udtræk med where (udløb - nu) < antal tid inden... og derefter bruge phps mail funktion...

Du skal dog nok overveje at lave en ekstra ting til at markere at der er blevet sendt en mail, så du ikke sender den næste gang funktionen kører
Avatar billede jakobdo Ekspert
11. marts 2006 - 15:11 #2
Montana: Som moocher er inde på, så lav det med SQL, og sæt f.eks. scriptet til at blive kørt en gang dagligt (via Cronjob).
sql'en kunne ligne:

$query = mysql_query("SELECT email FROM tabel WHERE DATEDIFF(udløbsdato,NOW()) = 5");
Avatar billede JJ77 Juniormester
12. marts 2006 - 20:51 #3
ok... jeg ku ikke lokker jer til at uddybe scriptet en anelse:)... og hvad er det med det der Cronjob, hvordan virker det?
Avatar billede jakobdo Ekspert
12. marts 2006 - 20:53 #4
Cronjob er for linux/unix, hvad windows jobstyring er på en windows maskine.
En måde at få job/scripts til at blive kørt hver mandag, hver time, eller lign.
Avatar billede JJ77 Juniormester
13. marts 2006 - 21:40 #5
Ok.. lyder faktisk meget spændende :) med hensyn til sådan en mailscript, har i så ikke lidt kode? .. og hvordan får man gang i det der cronjob? Ku være super cool hvis man kunne indbygge nogle funktioner som blev kørt om natten fx.. oprydning i database osv..
Avatar billede jakobdo Ekspert
13. marts 2006 - 21:43 #6
Hvad gemmer du f.eks. på en annonce?
Avatar billede JJ77 Juniormester
14. marts 2006 - 15:33 #7
Her er de to tabeller.. Først selve annoncetabellen, hvor udløbsdatoen står, og så brugerens data hvor hans email står. Annoncetabellens `userId` hænger sammen med tabellen userProfiles `userId`


CREATE TABLE `salgAfProdukt` (
  `Id` int(12) NOT NULL auto_increment,
  `userId` int(12) NOT NULL default '0',
  `gruppe` varchar(65) NOT NULL default '',
  `kategori` varchar(65) NOT NULL default '',
  `produkt` varchar(65) NOT NULL default '',
  `supplerendeTekst` longtext NOT NULL,
  `pris` int(6) NOT NULL default '0',
  `loebetidForAnnonce` datetime NOT NULL default '0000-00-00 00:00:00',
  `tlf1` varchar(20) NOT NULL default '',
  `tlf2` varchar(20) NOT NULL default '',
  `email` varchar(65) NOT NULL default '',
  `postNr` int(8) NOT NULL default '0',
  `checkbox` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`Id`)
) TYPE=MyISAM AUTO_INCREMENT=95 ;


CREATE TABLE `userProfile` (
  `userId` int(11) NOT NULL default '0',
  `userFirstName` varchar(64) NOT NULL default '',
  `userEmail` varchar(64) NOT NULL default '',
  `userLastName` varchar(64) NOT NULL default '',
  `userAddr1` varchar(64) NOT NULL default '',
  `userCity` varchar(64) NOT NULL default '',
  `userTel` varchar(15) NOT NULL default '',
  `userHomeTel` varchar(15) NOT NULL default '',
  `userWeb` varchar(128) NOT NULL default '',
  `userValidationKey` varchar(32) NOT NULL default '',
  `userIP` varchar(32) NOT NULL default '',
  `userSignUp` datetime NOT NULL default '0000-00-00 00:00:00',
  `userValidated` tinyint(1) NOT NULL default '0',
  `userNewsLetter` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`userId`)
) TYPE=MyISAM;
Avatar billede jakobdo Ekspert
14. marts 2006 - 17:34 #8
SQL'en kunne muligvis være noget i stil med:
SELECT u.userEmail FROM salgAfProdukt AS s INNER JOIN userProfile AS u ON u.userId = s.userId WHERE DATEDIFF(s.udloebsdato,NOW()) = 5

Men du har kun feltet: loebetidForAnnonce, betyder dette felt hvornår den løber til?
Eller hvor lang tid den løber?
For du har nemlig ikke noget oprettelses dato?
Avatar billede JJ77 Juniormester
14. marts 2006 - 22:00 #9
Det er en udløbsdato... syret sql-sætning:)
Kan man få den til at sende en meddelelse automatisk brugerne?
Avatar billede jakobdo Ekspert
15. marts 2006 - 07:14 #10
Det er jo her du skal bruge CRONJOB som så evt køres hver dag.
Forkortet version af script:

<?php
//connect til mysql
$query = mysql_query("SELECT u.userEmail FROM salgAfProdukt AS s INNER JOIN userProfile AS u ON u.userId = s.userId WHERE DATEDIFF(s.loebetidForAnnonce,NOW()) = 5");
if(mysql_num_rows($query)>0)
{
while($row = mysql_fetch_assoc($query))
{
mail($row['email'],"Din annonce udløber","Dette er beskeden");
//Husk extra headers i mailfunktionen.
}
}
else
{
echo "Ingen annoncer udløber om 5 dage";
}
Avatar billede JJ77 Juniormester
15. marts 2006 - 17:48 #11
ok.. men det vil sige at ovenstående script henter alle emails og automatisk sender en mail til dem.
synes stadig det er en syret sql-sætning :) kan dårligt/ikke forstå den.. lol
Avatar billede JJ77 Juniormester
15. marts 2006 - 17:50 #12
og kan man forretsten også få den til at hente produkt fra 'salgAfProdukt' og tilføje det til mailen:) så en bruger ved hvad det er for en annonce som er ved at udløbe..
Avatar billede jakobdo Ekspert
15. marts 2006 - 18:13 #13
Produkt kan godt tilføjes, så bliver det:

$query = mysql_query("SELECT u.userEmail, s.produkt FROM salgAfProdukt AS s INNER JOIN userProfile AS u ON u.userId = s.userId WHERE DATEDIFF(s.loebetidForAnnonce,NOW()) = 5");

Og den er altså ikke så syret.

SELECT <-- HELT STANDARD
u.userEmail, <-- Hvad skal vi hente?
s.produkt <-- Hvad skal vi hente?
FROM salgAfProdukt AS s <-- Hvorfra
INNER JOIN userProfile AS u ON u.userId = s.userId <-- Vi joiner resultatet med userProfil hvor userid = userid.
WHERE DATEDIFF(s.loebetidForAnnonce,NOW()) = 5"); <-- datediff er en mysql funktion.

Du kan lære en del på siden: http://www.w3schools.com/sql/default.asp
og brug også mysql documentation.
Avatar billede JJ77 Juniormester
15. marts 2006 - 19:24 #14
Det nu mere u. og s. og AS s og AS u og dem der forvirrer mig.. :)
Avatar billede jakobdo Ekspert
15. marts 2006 - 19:25 #15
Det er bare forkortelse.
salgAfProdukt AS s betyder jeg kan bruge s som salgAfProdukt.
OG for at få id i salgAfProdukt kan jeg bare bruge: s.id
Avatar billede JJ77 Juniormester
22. marts 2006 - 17:40 #16
Vil det sige at nedenstående script hvis det bliver aktiveret, automatisk sender en besked til brugere hvis deres annonce er ved at udløbe? .. og hvad menes der med //Husk extra headers i mailfunktionen?
Jeg kan desværre ikke køre Cronjob på min webserver, så kan man give den en form for trigger som aktiveres 1 gang om dagen?

<?php
//connect til mysql
$query = mysql_query("SELECT u.userEmail, s.produkt FROM salgAfProdukt AS s INNER JOIN userProfile AS u ON u.userId = s.userId WHERE DATEDIFF(s.loebetidForAnnonce,NOW()) = 5");
if(mysql_num_rows($query)>0)
{
while($row = mysql_fetch_assoc($query))
{
mail($row['email'],"Din annonce udløber","Dette er beskeden");
//Husk extra headers i mailfunktionen.
}
}
else
{
echo "Ingen annoncer udløber om 5 dage";
}
Avatar billede jakobdo Ekspert
22. marts 2006 - 18:08 #17
Om kodne direkte virker i dit tilfælde må du jo evt lige teste.
Mail funktionen kan du se nærmere beskrevet her: http://dk2.php.net/manual/en/function.mail.php
Det med ekstra headers kan du se: Example 2. Sending mail with extra headers.
Avatar billede JJ77 Juniormester
23. marts 2006 - 20:57 #18
hmm. der kommer en fejlmeddelelse
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Avatar billede jakobdo Ekspert
23. marts 2006 - 21:02 #19
Smid lige or die(mysql_error()); efter mysql_query(....);
Avatar billede JJ77 Juniormester
23. marts 2006 - 21:08 #20
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(s.loebetidForAnnonce,NOW()) = 5' at line 2
Avatar billede JJ77 Juniormester
23. marts 2006 - 21:11 #21
loebetidForAnnonce indeholder udløbsdatoen.. ved ikke om den oplysning hjælper:)
Avatar billede jakobdo Ekspert
23. marts 2006 - 21:15 #22
Fang mig lige på msn jacob.
Avatar billede JJ77 Juniormester
23. marts 2006 - 23:44 #23
det bare super.. smider du ikke lige et svar.. takker :)
Avatar billede jakobdo Ekspert
24. marts 2006 - 08:13 #24
Svar!
Avatar billede jakobdo Ekspert
26. marts 2006 - 00:27 #25
takker for point...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester