Avatar billede JJ77 Juniormester
30. december 2005 - 23:13 Der er 24 kommentarer og
1 løsning

Slette annonce automatisk efter 10, 20 ell. 30 dage

Er her nogen som ved hvordan man kan få en annonce til at slette sig selv ud fra et valg i en radiobutton. Alle data ang. annoncen ligger i én tabel. Jeg har set nedenstående(det første af nedenstående) i et andet spørgsmål, men ved ikke om det er noget ala det som skal bruges. Når man opretter en annonce skal man vælge om annoncen skal vises i 10, 20 eller 30 dage, hvorefter den skal slette sig selv automatisk. Det er vel også noget med at der skal oprettes et felt i databasen som indeholder en dato. vær venligst lidt pædagogisk i jeres forklaringer da jeg er lidt ny inden for php;)

//Set i andet spørgsmål på exp.
<input name="1mdr" type="radio" value="radiobutton">1 måned<br>
<input name="2mdr" type="radio" value="radiobutton">2 måneder<br>
<input name="3mdr" type="radio" value="radiobutton">3 måneder<br>
<?
if($_POST["1mdr"]){
$dato_30dage = date('d/m/Y H:i:s', strtotime('+1 month'));
}
if($_POST["2mdr"]){
$dato_60dage = date('d/m/Y H:i:s', strtotime('+2 month'));
}
if($_POST["3mdr"]){
$dato_90dage = date('d/m/Y H:i:s', strtotime('+3 month'));
}




//kode fra mit eget script
if(!empty($_POST['produkt']))
{
    //Forbind til database...
    $userId = mysql_real_escape_string($_POST['userId']);
    $kategori = mysql_real_escape_string($_POST['kategori']);
    $produkt = mysql_real_escape_string($_POST['produkt']);
    $supplerendeTekst = mysql_real_escape_string($_POST['supplerendeTekst']);
    $pris = mysql_real_escape_string($_POST['pris']);
    //$billede = mysql_real_escape_string($_POST['billede']);
    $loebetidForAnnonce = mysql_real_escape_string($_POST['loebetidForAnnonce']);
    $tlf1 = mysql_real_escape_string($_POST['tlf1']);
    $tlf2 = mysql_real_escape_string($_POST['tlf2']);
    $email = mysql_real_escape_string($_POST['email']);
    $dinBy = mysql_real_escape_string($_POST['dinBy']);
   
    mysql_query("INSERT INTO salgAfProdukt(Id,userId,kategori,produkt,supplerendeTekst,pris,loebetidForAnnonce,tlf1,tlf2,email,dinBy) VALUES('','".$userId."','".$kategori."','".$produkt."','".$supplerendeTekst."','".$pris."','".$loebetidForAnnonce."','".$tlf1."','".$tlf2."','".$email."','".$dinBy."')");
   
 
    if(mysql_affected_rows()>0)
    {
        echo "Felt indsat<br>";
    }
    else
    {
        echo "Fejl: " . mysql_error() . "<br>";
    }
}



<tr>
                           
<td width="200">L&oslash;betid for annoncen</td>
                           
<td>
10 dage<input type="radio" name="loebetidForAnnonce" value="10" checked border="0">
                           
20 dage<input type="radio" name="loebetidForAnnonce" value="20" border="0">
                           
30 dage<input type="radio" name="loebetidForAnnonce" value="30" border="0">
                           
</td>
                                        </tr>
Avatar billede jaw Nybegynder
30. december 2005 - 23:16 #1
Sålænge du ikke indsætter et tidspunktet for, hvornår annoncen er træt i kraft, så er der jo intet at regne x-antal dage ud fra...!
Avatar billede JJ77 Juniormester
30. december 2005 - 23:23 #2
nej det ka du jo have ret i;)annoncen skal bare træde i kraft når den bliver oprettet
Avatar billede jaw Nybegynder
30. december 2005 - 23:24 #3
Jeg vil mene, at du bare oprettet et felt med typen DATETIME i din tabel.

Så kan du måske:
DELETE FROM tabel WHERE DATE_ADD(datofelt, INTERVAL `loebetidForAnnonce` DAY) < NOW()
Jeg er dog ikke sikker på, at man kan smide et feltnavn der.
Avatar billede JJ77 Juniormester
30. december 2005 - 23:25 #4
men kan man ikke få den til at indsætte nuværende dato + 10,20 ell. 30 dage. og så et eller andet stykke kode, som så sletter den når den når udløbsdato.. eller noget i den stil.
Avatar billede JJ77 Juniormester
30. december 2005 - 23:28 #5
har nu oprettet et felt udloebsDato.. så er jeg nået så langt;)
Avatar billede jaw Nybegynder
30. december 2005 - 23:28 #6
Det var måske en smart idé. Så opret feltet, som du kalder "dato" med typen DATETIME.

Din insert skal så være:
mysql_query("INSERT INTO salgAfProduk(Id,userId,kategori,produkt,supplerendeTekst,pris,loebetidForAnnonce,tlf1,tlf2,email,dinBy, dato) VALUES('','".$userId."','".$kategori."','".$produkt."','".$supplerendeTekst."','".$pris."','".$loebetidForAnnonce."','".$tlf1."','".$tlf2."','".$email."','".$dinBy."', DATE_ADD(NOW(), INTERVAL ".$loebetidForAnnonce." DAY)')");
Avatar billede jaw Nybegynder
30. december 2005 - 23:29 #7
Ok, så udskift "dato" med "udloebsDato" i det jeg lige skrev :)
Avatar billede JJ77 Juniormester
30. december 2005 - 23:30 #8
men jeg kan se at den ikke selv skriver en dato når jeg opretter en annonce.
Avatar billede JJ77 Juniormester
30. december 2005 - 23:32 #9
prøver lige dit forslag
Avatar billede JJ77 Juniormester
30. december 2005 - 23:42 #10
hvordan er det lige jeg skal sætte det ind.. bare fordi du havde skrevet det til sidst.. kan det ikke bare stå i feltet "loebetidForAnnonce"?

mysql_query("INSERT INTO salgAfProdukt(Id,userId,kategori,produkt,supplerendeTekst,pris,loebetidForAnnonce,tlf1,tlf2,email,dinBy) VALUES('','".$userId."','".$kategori."','".$produkt."','".$supplerendeTekst."','".$pris."','".$loebetidForAnnonce."','".$tlf1."','".$tlf2."','".$email."','".$dinBy."')");
Avatar billede jaw Nybegynder
30. december 2005 - 23:45 #11
Tjoh, det kan det vel godt, men så bør du ændre typen af loebetidForAnnonce til DATETIME, og så skal du alligevel skrive det jeg havde til sidst, altså det vil så blive: DATE_ADD(NOW(), INTERVAL ".$loebetidForAnnonce." DAY) i stedet for $loebetidForAnnonce.

Er du med? :)
Avatar billede JJ77 Juniormester
30. december 2005 - 23:45 #12
hov der mangler vist lidt.. hmmm prøver lige igen
mysql_query("INSERT INTO salgAfProdukt(Id,userId,kategori,produkt,supplerendeTekst,pris,loebetidForAnnonce,tlf1,tlf2,email,dinBy) VALUES('','".$userId."','".$kategori."','".$produkt."','".$supplerendeTekst."','".$pris."','".$loebetidForAnnonce."','".$tlf1."','".$tlf2."','".$email."','".$dinBy."')");
Avatar billede JJ77 Juniormester
30. december 2005 - 23:50 #13
ok.. er lige lidt forvirret... hvordan får man sit valg 10, 20 ell 30 til at hænge sammen med den dato som bliver sat ind, og er det smartest at have på et felt som hedder loebetidForAnnonce og et udloebsDato?
nu ser det sådan her ud:

mysql_query("INSERT INTO salgAfProdukt(Id,userId,kategori,produkt,supplerendeTekst,pris,loebetidForAnnonce,tlf1,tlf2,email,dinBy) VALUES('','".$userId."','".$kategori."','".$produkt."','".$supplerendeTekst."','".$pris."'
,'".$loebetidForAnnonce."','".$tlf1."','".$tlf2."','".$email."','".$dinBy."')");
Avatar billede jaw Nybegynder
30. december 2005 - 23:54 #14
Det er lige meget hvad du kalder den, bare den er af typen DATETIME. Så hvis du vil bruge loebetidForAnnonce, så vil jeg mene det skal være:

mysql_query("INSERT INTO salgAfProdukt(Id,userId,kategori,produkt,supplerendeTekst,pris,loebetidForAnnonce,tlf1,tlf2,email,dinBy) VALUES('','".$userId."','".$kategori."','".$produkt."','".$supplerendeTekst."','".$pris."'
, DATE_ADD(NOW(), INTERVAL ".$loebetidForAnnonce." DAY) ,'".$tlf1."','".$tlf2."','".$email."','".$dinBy."')");
Avatar billede JJ77 Juniormester
30. december 2005 - 23:59 #15
det var satans.. Det virker sq.. Det må jeg nok sige. DU kan jo trylle;)
Men hvordan i alverden får man den så til at slette sig selv igen når den når udløbsdato?
Avatar billede jaw Nybegynder
31. december 2005 - 00:04 #16
Hehe, naah ikke trylle, men "practice makes perfect", selvom der stadig er lang vej...

Sletningen kan du ikke bare sådan lige gøre. Det kræver nemlig, at der køres et script for at slette. Den kan ikke bare slette uden at den bliver bedt om det.

Men du bør så kunne slette, ved at bruge:
mysql_query("DELETE FROM tabelnavn WHERE loebetidForAnnonce < NOW()");
Avatar billede JJ77 Juniormester
31. december 2005 - 00:05 #17
Ja.. den var straks værre.. ik ;)men der må sq da være en slags "selfDestruction" funktion, eller noget i den stil.. hehe
Avatar billede JJ77 Juniormester
31. december 2005 - 00:10 #18
bare lidt ærgeligt hvis man skal ind og trykke på en knap hver dag, for at slette udløbne annoncer.. kan du følge mig;)
Kan man ikke lave en function som iværksætter sig selv hver dag på et klokkeslæt, som så kører mysql_query("DELETE FROM tabelnavn WHERE loebetidForAnnonce < NOW()");
Avatar billede jaw Nybegynder
31. december 2005 - 00:10 #19
Niks. Da php er server-side så skal det aktiveres på den ene eller anden måde. Der er flere måder at gøre det på.

Du kan sætte delen øverst i filen, så den sletter evt. gamle annoncer inden den henter dem frem og viser dem, eller du kan bruge f.eks. http://www.cron-jobs.de/ der kan køre scriptet for dig med jævne mellemrum.
Avatar billede JJ77 Juniormester
31. december 2005 - 00:15 #20
hmmm.. vil det sige at hver gang  en person opretter en annonce, så kører den et script som sletter gamle annoncer?  og kan det komme til at belaste databasen meget?
Avatar billede jaw Nybegynder
31. december 2005 - 00:17 #21
Sådan kan du godt gøre det, men skal det ikke vises til nogen? Så ville jeg nærmere smide det ind når de bliver vist end når de bliver oprettet. Og det belaster ikke, medmindre vi virkelig snakker om mange annoncer hver dag.
Avatar billede JJ77 Juniormester
31. december 2005 - 00:21 #22
ok... tror bare at der vil blive vist flere annoncer end der vil blive oprettet.. mere derfor jeg tænkte sådan.. Men du ved nok bedre end jeg;
Avatar billede JJ77 Juniormester
31. december 2005 - 00:23 #23
men du skal ihvertfald have 1 mill. gange tak for hjælpen. du sparker sq røv;) og smider du ikke lige et svar så du kan få dine velfortjente points
Avatar billede jaw Nybegynder
31. december 2005 - 00:23 #24
Netop. Pointen er jo, at du skal slette dem når de vises, ellers vil de jo blive vist, selvom de faktisk er udløbet, hvis der nu går et par dage imellem at der bliver oprettet nye.
Avatar billede jaw Nybegynder
31. december 2005 - 00:24 #25
Det gør jeg da bestemt gerne, hvis du mener vi har nået dertil hvor du ville :) Ellers må du sige til, hvis du løber ind i problemer med det senere...
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