select в даден интервал от време

vasilev

Registered
здравейте ,

правя проверка при избран час и интервал дали в дадения час има запазена услуга в базата . в таблицата полетата са ми datetime тоест и двете са ми с еднакви stamp-и . едното е за пример - "2011-12-30 03:11:00" другото - 0000-00-00 00:35:00 . Опитвам се с ajax да направя селект в базата като идеята ми е при избран час и интервал , то да каже дали има запазен час около този който съм избрал .

Код:
$starttime = trim(strtolower($_POST['starttime']));
$starttime = mysql_escape_string($starttime);
$selecteduser = trim(strtolower($_POST['selecteduser']));
$selecteduser = mysql_escape_string($selecteduser);
$interval = trim(strtolower($_POST['interval']));
$interval = mysql_escape_string($interval);


$query = "Select * from events where date = '$starttime' and approved = 'yes' and user = '$selecteduser' LIMIT 1";
$result = $connector->query($query);
$num = mysql_num_rows($result);

echo $num;

в базата има час в 3:11:00 от горният пример който ще продължи 35 мин . аз съм избрал 3:40:00 .. би трябвало да върне че е заето .

може ли да ми съдействате .
 
Пробвай така:
PHP:
$selecteduser = trim(strtolower(addslashes($_POST['selecteduser'])));
$starttime = strtotime(trim(strtolower(addslashes($_POST['starttime']))));
$interval = strtotime(trim(strtolower(addslashes($_POST['interval']))));
$endtime = $interval+$starttime;

$query = "Select * from events where date > $starttime and date < $endtime and approved = 'yes' and user = '$selecteduser' LIMIT 1";
$result = $connector->query($query);
$num = mysql_num_rows($result);

echo $num;

и нещо извън контекста: когато escape-ваш инфо от потребителя това трябва да е ПЪРВОТО действие с променливите - иначе няма смисъл.
 
аз опитах по хиляда начина :) и се нервирах вече ..
така както си го дал нещо не става .
така опитвам :

Код:
$starttime = trim(strtolower($_POST['starttime']));
$starttime = mysql_escape_string($starttime);
$selecteduser = trim(strtolower($_POST['selecteduser']));
$selecteduser = mysql_escape_string($selecteduser);
$interval = trim(strtolower($_POST['interval']));
$interval = mysql_escape_string($interval);
$endtime = $interval+$starttime;

$query = "Select * from events where date < '$starttime' and date > '$endtime' and approved = 'yes' and user = '$selecteduser' LIMIT 1";

засича само едното условие - > endtime
това което подавам е - starttime - ден и час който искам да проверя дали .. го има в интервала date - от базата - date+interval , interval - интервал .
 
Какво всъщност искаш да ти върне заявката - записите в интервала ли ?
Какво имаш в тези променливи:
$_POST['starttime']
$_POST['interval']
 
тя заявката връща или 0 или 1 .
идеята е да върне 0 . Ако върне 1 то изкарва предупреждение:

Код:
if(response == 1){
  $('#min,#date,#hour').css('border', '3px #C33 solid');  
  $('#tick').hide();
  $('#cross').fadeIn();
  alert("Избраният час е зает, моля изберете друг!");
  }else{
  $('#min,#date,#hour').css('border', '3px #090 solid');
  $('#cross').hide();
  $('#tick').fadeIn();
       }
}
});

$_POST['starttime'] - "2012-01-19 02:10:00"
$_POST['interval'] - "0000-00-00 00:20:00"

до сега беше - select .. where date=starttime , само че за всяка услуга си има време за изпълнение :)
 
Трудно се правят сметки с невалидни дати (0000-00-00) :)

Опитай така и би трябвало да стане, обаче метода ти на указване на интервал изобщо не готин:

PHP:
$selecteduser = trim(strtolower(addslashes($_POST['selecteduser'])));
$starttime = strtotime(addslashes($_POST['starttime']));
$interval = addslashes($_POST['interval']));
$endtime = strtotime(str_replace('0000-00-00',date('Y-m-d',strtotime($starttime)),$interval);

$query = "Select * from events where date >= $starttime and date <= $endtime and approved = 'yes' and user = '$selecteduser' LIMIT 1";

$result = $connector->query($query);
$num = mysql_num_rows($result);

echo $num;
 
така стана :

Код:
$starttime = trim(strtolower($_POST['starttime']));
$starttime = mysql_escape_string($starttime);
$selecteduser = trim(strtolower($_POST['selecteduser']));
$selecteduser = mysql_escape_string($selecteduser);
$interval = trim(strtolower($_POST['interval']));
$interval = mysql_escape_string($interval);

$h =  strtotime($interval);
$event_length = date("i", $h);
$timestamp = strtotime("$starttime");
$etime = strtotime("-$event_length minutes", $timestamp);
$etime = strtotime("+$event_length minutes", $timestamp);
$next_time = date('Y-m-d H:i:s', $etime);
$prev_time = date('Y-m-d H:i:s', $ptime);



$query = "Select * from events where date >= '$next_time' and date <= '$starttime' and approved = 'yes' and user = '$selecteduser' LIMIT 1";

давам ти точка защото участва и за да затворим проблема :)
 

Back
Горе