Помогите найти баг

trashworm

Новичок
Приветствую, есть скрипты телефонной книги. Принцип следующий: в mysql это две таблицы со значениями:
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>
 
Последнее редактирование:

akd

dive now, work later
Команда форума
ну хз, я лично в этом гавнокоде готово покопаться баксов за 200-250.
 

trashworm

Новичок
тогда я бы не на форум писал, ища помощи, а сразу на фриланс. Мне просто интересно, почему не отрабатывает этот запрос
$comp = $mysql->Query("select count(`id`) as `count` from `$bi` where (`workphone`='".$phone."') AND `parent_id`=0 ");
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну так выведи текст запроса на экран и кинь в mysql консоль
 
Последнее редактирование:

vasinsky

Новичок
$comp = $mysql->Query("select count(`id`) as `count` from `$bi` where (`workphone`='".$phone."') AND `parent_id`=0 ");
этот запрос на сколько я понимаю -0 вообще - тупо считает кол-во свободных номеров

а вот это
//выбираем из БД все номера
$data = $mysql->Query("SELECT number FROM `$telbi`");
как раз то что выводится на страницу
его и правьте
 
Сверху