[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: переформировка значений в дате
Oliver Varnce
Подскажите пожалуйста, товарищи знатоки такое:

Через jquery.callendar я сделал ввод даты удобнее. тоесть в форму input вводится такое dd/mm/yyyy такое же отправляется в запрос поиска. Все знают что база данных SQL хранит дату в таком формате yyyy-mm-dd как мне переставить дату и год метами и поставить другой разделитель?





Спустя 42 минуты, 20 секунд (30.06.2011 - 10:40) Invis1ble написал(а):
Oliver Varnce
Есть два варианта:
1. Сформировать дату в нужном формате на уровне php, примерно так:
list($day, $month, $year) = explode('/', $date);

далее подставляешь в запрос:
... WHERE `date` = '" . $year . '-' . $month . '-' . $day . "'

или
... WHERE `date` = '" . sprintf('%s-%s-%s', $year, $month, $day) . "'

2. Форматирование средствами SQL:
... WHERE `date` = STR_TO_DATE('" . $date . "', '%Y/%m/%d')

Я бы выбрал второй вариант.

PS. Хотел предложить 3-й вариант, но оказалось, он не работает:
$date = date('d/m/Y');

$dateObj = new DateTime($date);
echo $dateObj->format('Y-m-d');

видимо баг php - не может обработать строку со слешами, вылетает исключение. То же самое в процедурном стиле:
$date = date('d/m/Y');

$dateObj = date_create($date);
echo date_format($dateObj, 'Y-m-d');

короче баг при парсинге и конструировании объекта.

Спустя 3 часа, 20 минут, 54 секунды (30.06.2011 - 14:01) Oliver Varnce написал(а):
оу, чето не получается((

вот код куда оно отправляет переменную date1:

case 'date1' :
$date = $_POST[$date1];

$query_filter_array[] = '`'.$key. '` >= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;


тоесть это условие, если с поста пришло чтото с ключем date1тогда подставляем этот кусок в весь запрос, короче говоря оно формирует потом ...WHERE .... AND date1>= (значение) AND .....

Спустя 7 минут, 55 секунд (30.06.2011 - 14:09) Invis1ble написал(а):
Oliver Varnce
Что не получается? Покажи код, где ты применил мои советы и укажи какие именно ошибки появляются (если таковые имеются).
Кстати, вот готовое решение для переформатирования.

Спустя 3 часа, 44 минуты, 2 секунды (30.06.2011 - 17:53) Oliver Varnce написал(а):
подскажите, а как мне вписать даную функцию в код предоставленный выше?

вот код всего поисковичка:

<?
//ini_set('display_errors',1);
//error_reporting(E_ALL);

require_once '_init.php';

//создаем массив полей, которые могут использоваться в запросе
$row = array('real_code'=>NULL,
'id_realty_category'=>NULL,
'region'=>NULL,
'street'=>NULL,
'price1'=>NULL,
'price2'=>NULL,
'rooms1'=>NULL,
'rooms2'=>NULL,
'floor1'=>NULL,
'floor2'=>NULL,
'date1'=>NULL,
'date2'=>NULL);


$query_filter = '';
$query_filter_array = array();


$date1 = $_POST['date1'];
$date2 = $_POST['date2'];



function dateFormat1($date1, $format) {
return ($timestamp = strtotime(str_replace('/', '.', $date1)))
?
strftime($format, $timestamp) : false;
}
function dateFormat2($date2, $format) {
return ($timestamp = strtotime(str_replace('/', '.', $date2)))
?
strftime($format, $timestamp) : false;
}

// проверяем отправили ли форму
//смотрим что у нас пришло с поста

if ($_POST['submit'])
{
foreach($row as $key=>$value)
{
if(!array_key_exists($key, $_POST) || empty($_POST[$key]))
continue;
switch($key)
{
case 'price1' :
$query_filter_array[] = '`'.$key. '` >= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'price2' :
$query_filter_array[] = '`'.$key. '` <= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'rooms1' :
$query_filter_array[] = '`'.$key. '` >= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'rooms2' :
$query_filter_array[] = '`'.$key. '` <= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'floor1' :
$query_filter_array[] = '`'.$key. '` >= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'floor2' :
$query_filter_array[] = '`'.$key. '` <= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'date1' :
$query_filter_array[] = '`'.$key. '` >= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
case 'date2' :
$query_filter_array[] = '`'.$key. '` <= \''.mysql_real_escape_string($_POST[$key]).'\'';
break;
default :
$query_filter_array[] = '`'.$key. '` LIKE \''.mysql_real_escape_string($_POST[$key]).'\'';
}
}

}


//проверяем было ли что-то заполнено
//если да то разбираем массив

if(!empty($query_filter_array)){
$query_filter = " WHERE ".implode(' AND ', $query_filter_array);
}

$tQuery ='SELECT * FROM `realty`';

$query = $tQuery.$query_filter;
//echo $query;

//собираем весь запрос и выполняем

$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$logo = '<img src="/uploads/realty/';


$href='<a href="/'.$LANG.'/'.$row['id_realty'].'/">';

if ($result)
{
if (mysql_num_rows($result))
{

$content .= '<div class="searchresult">';
$content .= '<table border= 1><th class="rImage"> </th>
<th nowrap="nowrap">Комн.</th>
<th nowrap="nowrap">Адрес</th>
<th nowrap="nowrap">Эт.</th>
<th nowrap="nowrap">Площадь<small>м<sup>2</sup></small></th>
<th class="rPrice" nowrap="nowrap">Ціна, у.о.</th>
<th nowrap="nowrap"> </th>'
;
while ($row = mysql_fetch_assoc($result))
{

$content .= '<tr>'
. '<td>'.$logo. $row['logo'].'">' .'</td>'
.'<td>'. $row['rooms1'] .'</td>'
. '<td><b>'. $row['region'].'</b>,<br>' . $row ['street']
.
'<td>'. $row['floor'] .'</td>'
.'<td>'. $row['area'] .'</td>'
.'<td>'. $row['price1'] .'</td>'
.'<td>'. '<a href="/'.$LANG.'/realty/'.$row['id_realty'].'/">Подробнее</a>' .'</td>'
. '</tr><tr> </tr>';
}
$content .= '</table>';
$content .= '</div>';
$content .= '</a>';
} else $content .= 'Ничего не найдено';




?>

Спустя 4 часа, 25 минут, 28 секунд (30.06.2011 - 22:18) perovo_mike написал(а):
Привет! Не могу закончить инсталяцию доски объвлений. Все работает, все хорошо - не могу сделать русский язык видимый... Вставил МЕТА charset=windows-1251
но вместо текста видны только ???????? вопросы. Помогите, не знаю, что делать

Спустя 6 минут, 43 секунды (30.06.2011 - 22:25) Invis1ble написал(а):
perovo_mike
Создай отдельную тему, а не пиши в чужой

Спустя 11 часов, 47 минут, 16 секунд (1.07.2011 - 10:12) Invis1ble написал(а):
Oliver Varnce
как-то так:
function dateFormat($date, $format) {
return ($timestamp = strtotime(str_replace('/', '.', $date)))
?
strftime($format, $timestamp) : false;
}

// тут остальной код

case 'date1' :
$query_filter_array[] = '`'.$key. '` >= \''.dateFormat($_POST[$key], '%Y-%m-%d').'\'';
break;
case 'date2' :
$query_filter_array[] = '`'.$key. '` <= \''.dateFormat($_POST[$key], '%Y-%m-%d').'\'';
break;

Спустя 9 минут, 50 секунд (1.07.2011 - 10:22) Oliver Varnce написал(а):
Неужели я так пробовал, только без %Y-%m-%d'... тупанул! работает, спасибо огромное. Invis1ble тебе + к карме)))

Спустя 4 минуты, 21 секунда (1.07.2011 - 10:27) Invis1ble написал(а):
Oliver Varnce
Цитата
Неужели я так пробовал, только без %Y-%m-%d'

Я ведь там в описании функции и примере использования показал, как задается выходной формат.
Пожалуйста.

Спустя 14 часов, 34 минуты, 35 секунд (2.07.2011 - 01:01) perovo_mike написал(а):
Спасибо за помощь! Очень волнительно было пообщаться... Рад что Твисту помог - он очень добрый малый тоже...

Спустя 7 минут, 38 секунд (2.07.2011 - 01:09) inpost написал(а):
perovo_mike
???

Спустя 2 минуты, 29 секунд (2.07.2011 - 01:11) kovaldm написал(а):
perovo_mike
Всегда пожалуйста.


_____________
мой хостинг - GlobalNET.com.ua
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.