webew
Войти » Регистрация
 
PHP

как запретить запись?

22 марта 2012, 10:27
Автор: viderga
заселяем человека в номер.как избежать повторного заселения в тот же номер, чтоб номер комнаты не отображался с даты и времени заселения по время и дату выселения?
листинг получения таблицы с номерами комнат:
<?php
include "conf.php";
$q = $_POST['klass'];
$w = $_POST['mesta'];
 $querys = ('SELECT *
 FROM number, mesta, klass
 WHERE number.id_mesta=mesta.id_mesta and number.id_klass=klass.id_klass and
 number.id_mesta="'
.$w.'" and number.id_klass="'.$q.'"');
$querys = mysql_query($querys) or die(mysql_error());
echo "<table border=\"1\" width=\"70%\" bgcolor=\"lavenderblush\">";
echo "<tr><td><B>номер комнаты</B></td><td><B>класс</B></td><td><B>количество мест</B></td>";
while ($myrow = mysql_fetch_array($querys)){
$id_mesta=$myrow['id_mesta'];
$id_klass=$myrow['id_klass'];
$id_number=$myrow['id_number'];
$number=$myrow['number'];
$klass=$myrow['klass'];
$mesta=$myrow['mesta'];
echo "<tr>";
echo "<td>$number</td>";
echo "<td>$klass</td>";
echo "<td>$mesta</td>";
echo "<form action=gosti.php method=post>";
echo "<td><input type=submit value=Оформить></td>";
echo "<input name=id type=hidden value=$id_number>";
echo "<input name=iklass type=hidden value=$id_klass>";
echo "<input name=imesta type=hidden value=$id_mesta>";
echo "<input name=nu type=hidden value=$number>";
echo "<input name=kl type=hidden value=$klass>";
echo "<input name=me type=hidden value=$mesta></form>";
echo "</tr>";
}
echo "</table>";
?>
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

1234ru

Нужно знать, какие комнаты свободны, т.е. где в данный момент НЕТ человека.
Из вашего кода не ясно, где хранится инфорация о текущем состоянии заселенности комнат.
То, что не убивает нас, делает нас инвалидами.
22.03.2012, 17:50
Ответить
NO USERPIC

viderga

есть таблица uchet, в которую заносятся id используемых номеров с датой и временем начала и конца использования.. http://webew.ru/f/MoHL0M7O.png
22.03.2012, 18:01
Ответить
NO USERPIC

viderga

неужели и на этом сайте никто ничего не знает.. задал всего 2 вопроса и не могу получить маленького ответа...
22.03.2012, 21:24
Ответить

1234ru

Вы делаете преждевременные выводы.
На этом сайте есть некоторые, кто знает достаточно много. Просто мы не любим отвечать стремглав, как только появился вопрос. Не на пожаре.

Все же непонятно, где хранятся id номеров.
Предположим, что в number.id

Самое простое - это добавить в ваш запрос условие:
SELECT *
FROM number,
     mesta,
     klass
 WHERE number.id_mesta=mesta.id_mesta
   AND number.id_klass=klass.id_klass
   AND number.id_mesta="'.$w.'"
   AND number.id_klass="'.$q.'"
   -- ниже - новое условие
   AND number.id NOT IN (
    SELECT number_id
    FROM uchet
    WHERE
            NOW()
            BETWEEN
            ADDTIME(CONCAT(data_zas, ' 00:00:00'), time_zas)
            AND
            ADDTIME(CONCAT(data_v, ' 00:00:00'), time_v)
   )


Условие получилось столь сложным из-за того, что время и дата хранятся в разных колонках.
Обычно для этой цели используют тип TIMESTAMP.
То, что не убивает нас, делает нас инвалидами.
22.03.2012, 23:13
Ответить
NO USERPIC

viderga

как я поняла, TIMESTAMP позволяет писать дату и время в одну ячейку и есть 7 вариантов формата вывода...
а как будет выглядеть запрос если использовать TIMESTAMP формата YYMMDDHHMM в DATA_ZAS и DATA_V?
id_number хранятся в таблице number
23.03.2012, 11:39
Ответить

1234ru

Цитата:
TIMESTAMP позволяет писать дату и время в одну ячейку и есть 7 вариантов формата вывода...


TIMESTAMP - это специальное поле, которое хранит информацию о времени в виде количества секунд, прошедшего с 12 часов дня 1 января 1970 года до данного момента.
То есть, это числовое поле, которое просто специальным образом обрабатывается MySQL и потому результат его представляется в виде даты.

Вариантов ввода существует два - '2012-03-23 10:39:00' (строкой) и 20120323103900 (строкой или числом).
Плюс можно указывать только дату - например, '2012-03-23' или 20120323.
При использовании встроенных функций MySQL типа NOW() или DATE() беспокоиться о формате не нужно - можно смело писать SET column = NOW() и т.п.

Вывод настраивается с помощью функции DATE_FORMAT(). Например,
SELECT DATE_FORMAT( NOW(), '%d.%m.%y, %H:%i' );
даст
24.03.12, 01:52

Можно даже получать даты с русскоязычными названиями месяца. На первый взгляд, это не очень просто, но если интересно - посмотрите здесь.


Цитата:
а как будет выглядеть запрос если использовать TIMESTAMP формата YYMMDDHHMM в DATA_ZAS и DATA_V?
id_number хранятся в таблице number


Нельзя YYMMDDHHMM; нужно либо YYMMDD (только дата), либо YYMMDDHHMMSS (полностью дата и время).

Выглядеть будет так (id на number_id заменил):

SELECT *
FROM number,
     mesta,
     klass
WHERE number.id_mesta=mesta.id_mesta
   AND number.id_klass=klass.id_klass
   AND number.id_mesta="'.$w.'"
   AND number.id_klass="'.$q.'"
   AND number.number_id NOT IN (
    SELECT number_id
    FROM uchet
    WHERE YYMMDDHHMMSS BETWEEN DATA_ZAS AND DATA_V
   )



Кстати. Имена колонок в MySQL регистронезависимые, поэтому попытка иметь в одной и той же таблице data_zas и
DATA_ZAS вызовет конфликт, так что надо либо новые колонки назвать как-то по-другому, либо старые переименовать.
То, что не убивает нас, делает нас инвалидами.
24.03.2012, 02:05
Ответить
NO USERPIC

viderga

в случае:
$querys = ('SELECT *
 FROM number, mesta, klass
 WHERE number.id_mesta=mesta.id_mesta AND number.id_klass=klass.id_klass AND
 number.id_mesta="'
.$w.'" AND number.id_klass="'.$q.'"
 AND number.id_number NOT IN ( SELECT id_number FROM uchet
 WHERE YYMMDDHHMMSS BETWEEN data_zas AND data_v)'
);

ошибка: Unknown column 'YYMMDDHHMMSS' in 'where clause'

если заменить YYMMDDHHMMSS например на data_v, то работает как обычно.. пробовала изменить на format(YYMMDDHHMMSS), ошибка You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') BETWEEN data_zas AND data_v)' и подобные ей частенько появлялись когда пыталась подобрать другие варианты..

24.03.2012, 12:59
Ответить
NO USERPIC

viderga

нашла письмо, все ясно
27.03.2012, 09:52
Ответить

1234ru

Нет, не забыли. Вам письмо должно было почту прийти.

Попробуйте YYMM... заменить на NOW()
То, что не убивает нас, делает нас инвалидами.
27.03.2012, 13:15
Ответить
NO USERPIC

viderga

спасибочки все работает^_^
27.03.2012, 14:03
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2024 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: