Expira, Sterge anunt dupa numar de zile

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
evident
Mesaje:168

Expira, Sterge anunt dupa numar de zile

as vrea sa introduc in formularul de adaugare al anuntului o optiune de valabilitate anunt
de exempul o saptamana,30 de zile,3 luni,12 luni, un an.
cand o persoana introduce un anunt si pune de exemplu 30 de zile...anuntul sa ramana pe site 30 de zile iar dupa aceia sa se stearga automat din db sau nush, daca puteti sa imi dati o idee cum sa fac:)
Multumesc,

MarPlo Mesaje:4343
Salut
Se poate face asa, in tabelul MySQL se adauga inca o coloana de tip INT(11) in care se adauga Timestamp-ul (Timpul unix) cu data expirarii.
Din formularul HTML se preia numarul de zile, in PHP se transforma in secunde si se adauga la timpul curent, time(). Valoarea rezultata e Timestump-ul cu timpul la care expira, aceasta se adauga in tabel.
Pt. stergere, cand e afisat un anunt, se face inca un query cu DELETE, care sa stearga randurile ce au in coloana cu timpul de expirare valoarea mai mica decat timpul curent
Cam asa:

Cod: Selectaţi tot

// preia numarul de zile, il transforma in secunde si-l adauga la timpul curent
$sec_zile = $_POST['casuta_zile'] * 24*3600;
$expira = $sec_zile + time();

// Insert care adauga $expira in coloana din tabel
$sql = "INSERT INTO `tabel` (`expira`) VALUES ($expira)";

// Query pt stergere
$sql = "DELETE FROM `tabel` WHERE `expira`<". time();

evident Mesaje:168
Mam razgandit fata de prima idee
deci eu am in baza de date : data_adaugari de tip datetime
si as vrea sa mai fac :data_epirari tot de tip datetime
iar atunci cand un anunt este adaugat sa insereze si data_expirarii care sa fie de exemplu cate zile alege cel care adauga anuntul(fac un formular cu 3 selectii: 30 de zile,90 de zile,180 de zile)
Multumesc

MarPlo Mesaje:4343
Daca coloana cu data expirarii e de tip DATE sau DATETIME, se poate folosi functia MySQL DATE_ADD() ca sa adaugi in interval de timp, precum in exemplu de mai jos:

Cod: Selectaţi tot

$days = 30;         // contine nr. zile adaugate la data curenta
$sql = "INSERT INTO `tabel` (`col1`, `col2`, `expira`) VALUES ('$val1', '$val2', DATE_ADD(NOW(), INTERVAL $days DAY))";
 
Iar pt. stergere, merge instructiunea:

Cod: Selectaţi tot

$sql = "DELETE FROM `tabel` WHERE UNIX_TIMESTAMP(`expira`)<UNIX_TIMESTAMP()";

evident Mesaje:168
am gresit undeva aici:

Cod: Selectaţi tot

$sql="INSERT INTO anunturi (titluanunt, nume, categorie, sunteti, textanunt, pret, moneda, email, nrtel, judet, localitate, data_adaugari, expira)
      VALUES
      ('".$_POST['titluanunt']."','".$_POST['nume']."','".$_POST['categorie']."','".$_POST['sunteti']."','".$_POST['textanunt']."','".$_POST['pret']."','".$_POST['moneda']."','".$_POST['email']."','".$_POST['nrtel']."','".$_POST['judet']."','".$_POST['localitate']."',NOW(), DATE_ADD(NOW(), INTERVAL $days DAY))";
???
Multumesc.

keenbr Mesaje:44
E posibil sa ai unele erori si vulnerabilitati in site cu urmatoarea linie:

Cod: Selectaţi tot

('".$_POST['titluanunt']."','".$_POST['nume']."','".$_POST['categorie']."','".$_POST['sunteti']."','".$_POST['textanunt']."','".$_POST['pret']."','".$_POST['moneda']."','".$_POST['email']."','".$_POST['nrtel']."','".$_POST['judet']."','".$_POST['localitate']."',NOW(), DATE_ADD(NOW(), INTERVAL $days DAY))";
Te sfatuiesc sa faci dupa cum urmeaza... daca ai eroare, posteaza linia si ce eroare iti da

Cod: Selectaţi tot

function post($var)
{
if(isset($_POST["$var"]))
$var=$_POST["$var"];
else
$var=0;
return $var;
}

$titluanunt=post("titluanunt");
$nume=post("nume");
$categorie=post("categorie");
$sunteti=post("sunteti");
.....
mie lene sa le iau pe toate in parte... le iei tu... apoi

VALUES
('".$titluanunt."','".$nume."','".$categorie."','".$sunteti."'
......
Sper ca ai inteles ideea

evident Mesaje:168
Am lasat cum mi-a zis MarPlo si a mers....aveam o greseala de ')'
acum, stie cineva cum sa fac sa imi ia numarul de zile din formular si sa il insereze la expira

Cod: Selectaţi tot

<select name="days">
          <option value="30">30N</option>
          <option value="60">60</option>
          <option value="90">90</option>
      </select>
si $days=30
am incercat cu $days = $_POST['expira']; dar cred ca e prostie:D
Multumesc

MarPlo Mesaje:4343
In PHP, valoarea unui camp de formular se ia dupa numele lui, adica ce e trecut la name="...".
In cazul de sus:

Cod: Selectaţi tot

$days = $_POST['days'];       // deoarece in formular, acel camp are: name="days"
 

Subiecte similare