Проблем с датата и изтриване

IzKuFeLiQqQqQ

Registered
здравейте имам този код за добаване на инфо в бд или по точно на банери
<form method="post">
<select name="b_place">
<option value="1">Място 1 PXхPX</option>
<option value="2">Място 2 PXхPX</option>
<option value="3">Място 3 PXхPX</option>
<option value="4">Място 4 PXхPX</option>
</select> <br>
Рекламодател <a href="../profile.php?id=<? echo $u_id; ?>"><? echo $u_name; ?></a> <br>
Линк към банера <br> <input type='text' name='b_img' size="40"/> <br>
Линк към сайта <br> <input type='text' name='b_link' size="40"/> <br>
<input type="submit" name="submit" value="добави">
</form>
<?php
if(isset($_POST['submit'])) {
$b_img = htmlspecialchars($_POST['b_img']);
$b_place = htmlspecialchars($_POST['b_place']);
$b_link = htmlspecialchars($_POST['b_link']);
$b_date = date('d.m.y / H:i');
$b_exdate = date('d.m.y / H:i',strtotime("+30 days"));

if($u_id) {
$query = mysql_query("INSERT INTO `banners` (`b_place`,`b_u_id`,`b_link`,`b_date`,`b_exdate`,`b_img`) VALUES ('$b_place','$u_id','$b_link','$b_date','$b_exdate','$b_img')")or die(mysql_error().__LINE__);
}
else{$query = mysql_query("INSERT INTO `banners` (`b_place`,`b_u_id`,`b_link`,`b_date`,`b_exdate`,`b_img`) VALUES ('$b_place','$my_id','$b_link','$b_date','$b_exdate','$b_img')")or die(mysql_error().__LINE__);
}}
дата се записва така
b_date---15.12.10 / 22:43
b_exdate---14.01.11 / 22:43
и този код който трие изтеклите които са след exdate
$ban = mysql_query("SELECT * FROM `banners` ") or die(mysql_error());
while ($za = mysql_fetch_array($ban)) {
$krai = $za['b_exdate'];
$time = date("d.m.y / H:i");
$id = $za['b_id'];
if ($time > $krai){
$ba = mysql_query("DELETE FROM `banners` WHERE `b_id`='$id' ");
}
}

проблема е че приема exdate за по малко от date защото exdate вече е в 2011... година има ли начин да се оправи тоест дори и date да е 2010 a exdate да е 2011 си трие само изтеклите ?
 
Проблема всъщност е, че с така написан код, сравняваш два текста, а не сравняваш дати:

b_date---15.12.10 / 22:43
b_exdate---14.01.11 / 22:4

и подреждането, съвсем логично, е такова:
14.01.11 / 22:4
15.12.10 / 22:43

Полетата в таблицата, където съхраняваш датите, вместо от тип varchar, ги направи date или datetime като в този случай кода ще се промени малко:

Код:
$b_date = date('Y-m-d H:i:s');

$b_exdate = date('Y-m-d H:i:s', strtotime("+30 days"));

А пък кода за изтриване, вместо да взимаш всичките, да им сравняваш датата, да триеш при съвпадение и т.н., се свежда до един-единствен ред:

Код:
$ba = mysql_query("DELETE FROM `banners` WHERE `b_exdate` <= NOW() ");

Ако тези дати ги показваш някъде и се притесняваш, че няма да изглеждат хубаво, спокойно - може да си ги форматираш или с DATE_FORMAT функцията на MySQL или с РНР date() функцията като първо минеш през strtotime()
 
Може да си направиш отделно поле в базата данни което да вкараш годината/месеца/деня тоест:

Код:
2010/11/05

и чрез explode да си ги разделиш

Код:
$exp = explode('/', $row['pole']);
и сега си правиш проверката:

Код:
$y = date("Y");
$m = date("m");
$d = date("d");

if($y < $exp['0'] & $m < $exp['1'] & $d < $exp['2']) {
    //query
}
 
на мен ми доди идея ще го направя по начина на exec но тъй като ми трябва моя формат на датата ще направя ново поле в бд... утре ще пробвам и ще пиша :)
 

Back
Горе