trashworm
Новичок
Приветствую, есть скрипты телефонной книги. Принцип следующий: в mysql это две таблицы со значениями:
1. Имя, офис, оргинизация и пр.
2. Список телефонных номеров
Скриптом проверяется принадлежит ли номер телефона какой либо записи, и если не принадлежит - выводится в список доступных номеров.
Заказали на аутсорс одной компании сделать "историю", работу приняли, но через месяц обнаружили серьезный баг. По договору все подписали, так что мы сами себе буратины...
В итоге сравнив старый исходник с переделанным - было обнаружено, что добавилось поле `parent_id` int(11) NOT NULL,
И если это поле было равно нулю и номер не принадлежал никакой записи, то он должен был отображаться в списке свободных. Но этого не происходит =(
Вот формат записи проверки номера:
Может какая то ошибка в запросе? Можно ли как-то все исправить?
Возможна проблема кроется в этой строчке:
На всякий случай - вот модуль истории, которую написали.
1. Имя, офис, оргинизация и пр.
2. Список телефонных номеров

Код:
CREATE TABLE IF NOT EXISTS `teloffice` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`number` varchar(13) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=84 ;
INSERT INTO `teloffice` (`id`, `number`) VALUES
(60, '207330'),
(59, '207329'),
(58, '207328'),
(57, '207327'),
(56, '207326'),
(55, '207325'),
(54, '207324');
Код:
CREATE TABLE IF NOT EXISTS `phonetable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lastname` varchar(100) DEFAULT NULL,
`firstname` varchar(100) DEFAULT NULL,
`title` varchar(50) DEFAULT NULL,
`location` varchar(50) DEFAULT NULL,
`workphone` varchar(13) DEFAULT NULL,
`ex` varchar(4) DEFAULT NULL,
`fax` varchar(13) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
`vlan` varchar(20) DEFAULT NULL,
`n_rozet_tel` varchar(10) DEFAULT NULL,
`n_rozet_pc` varchar(10) DEFAULT NULL,
`n_port_sw` varchar(90) DEFAULT NULL,
`note` varchar(70) DEFAULT NULL,
`changed_at` datetime DEFAULT NULL,
`parent_id` int(11) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=111 ;
INSERT INTO `phonetable` (`id`, `lastname`, `firstname`, `title`, `location`, `workphone`, `ex`, `fax`, `email`, `vlan`, `n_rozet_tel`, `n_rozet_pc`, `n_port_sw`, `note`, `changed_at`, `parent_id`, `date`) VALUES
(7, 'тест (Цех)', 'Арефьев В.В.', '210, 197', 'Цех', '207300', 'вкл', '', '', NULL, NULL, NULL, NULL, NULL, NULL, 0, '0000-00-00')
Заказали на аутсорс одной компании сделать "историю", работу приняли, но через месяц обнаружили серьезный баг. По договору все подписали, так что мы сами себе буратины...
В итоге сравнив старый исходник с переделанным - было обнаружено, что добавилось поле `parent_id` int(11) NOT NULL,
И если это поле было равно нулю и номер не принадлежал никакой записи, то он должен был отображаться в списке свободных. Но этого не происходит =(
Вот формат записи проверки номера:
PHP:
$mysql = new Mysql();
$mysql->Connect();
//выбираем из БД все номера
$data = $mysql->Query("SELECT number FROM `$telbi`");
//проверяем, связаны ли номера с компаниями, и оставляем только свободные
$phone_mas = array();
for($i = 0; $i < mysql_num_rows($data); $i++)
{
$phone = trim(mysql_result($data, $i, "number"));
$comp = $mysql->Query("select count(`id`) as `count` from `$bi` where (`workphone`='".$phone."') AND `parent_id`=0 ");
$ph_count = mysql_result($comp, 0, "count");
if(!$ph_count)
{
$phone_mas[] = $phone;
}
}
//выводим на экран свобоные номера
$column_number = 1;
for($i = 0; $i < count($phone_mas); $i++)
{
if($column_number == 1)
{
echo "<tr>";
}
$phone = $phone_mas[$i];
print("
<td class=\"listhdrn\">
".$phone."
</td>
");
if($column_number == $column_count)
{
echo "</tr>";
$column_number = 1;
continue;
}
$column_number++;
}
if($column_number > 1)
{
while($column_number <= $column_count)
{
echo "<td></td>";
$column_number++;
}
echo "</tr>";
}
$mysql->Disconnect();
?>
Возможна проблема кроется в этой строчке:
Пробовал менять запрос - ничего не помогло.$comp = $mysql->Query("select count(`id`) as `count` from `$bi` where (`workphone`='".$phone."') AND `parent_id`=0 ");
На всякий случай - вот модуль истории, которую написали.
Код:
<?php
$limit = 20;
$start = isset($_GET['page']) && $_GET['page'] > 0 ? $limit*($_GET['page']--) : 0;
$mysql = new Mysql();
$mysql->Connect();
$where = "changed_at IS NOT NULL";
if(isset($_GET['y']) && isset($_GET['m']) && isset($_GET['d']))
{
$prev = date('Y-m-d', strtotime(sprintf('%s-%s-%s', $_GET['y'], $_GET['m'], $_GET['d'])) - DAY_PER_SECOND);
$next = date('Y-m-d', strtotime(sprintf('%s-%s-%s', $_GET['y'], $_GET['m'], $_GET['d'])) + DAY_PER_SECOND);
$where = sprintf("changed_at BETWEEN '%s' AND '%s'", $prev, $next);
}
elseif (isset($_GET['y']) && isset($_GET['m']))
{
$prev = date('Y-m-d', strtotime(sprintf('%s-%s-01', $_GET['y'], $_GET['m'])) - DAY_PER_SECOND);
$next = date('Y-m-d', strtotime(sprintf('%s-%s-%s', $_GET['y'], $_GET['m'], date("t", mktime(0,0,0,$_GET['m'], null ,$_GET['y'])))) + DAY_PER_SECOND);
$where = sprintf("changed_at BETWEEN '%s' AND '%s'", $prev, $next);
}
elseif (isset($_GET['search']) && !empty($_GET['value']))
{
$type = $_GET['search'] == 'phone' ? 'workphone' : 'location';
$where = sprintf("changed_at IS NOT NULL AND %s REGEXP '[^0-9]?%s[^0-9]?'", $type, $_GET['value']);
}
$query = sprintf("SELECT * FROM %s WHERE %s ORDER BY changed_at DESC LIMIT %d, %d;", $bi, $where, $start, $limit);
$set = $mysql->Query($query);
$res = $mysql->Query(sprintf("SELECT count(id) as cnt FROM %s WHERE %s", $bi, $where));
$count = mysql_fetch_assoc($res);
$pages = ceil($count['cnt']/$limit);
$mysql->Disconnect();
?>
<?php while ($row = mysql_fetch_array($set)):?>
<TR>
<TD class="listr"><?echo $row["lastname"]?></td>
<TD class="listr"><?echo $row["firstname"]?></td>
<TD class="listr"><?echo $row["title"]?></td>
<TD class="listr"><?echo $row["location"]?></td>
<TD class="listr"><?echo $row["workphone"]?></td>
<TD class="listr"><div class="status <?echo $row["ex"]?>"></div></td>
<TD class="listr"><?echo $row["email"]?> </td>
<TD class="listr"><?echo $row["n_rozet_tel"]?></td>
<TD class="listr"><?echo $row["n_port_sw"]?></td>
<TD class="listr"><?echo $row["note"]?> </td>
</TR>
<?php endwhile;?>
</table>
Последнее редактирование: