11. marts 2006 - 12:46Der 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.
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.
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..
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;
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?
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"; }
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
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..
$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.
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"; }
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.
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
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.