Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генерация таблицы, согласно заданным условиям 
:(
    Опции темы
Dam0n
  Дата 25.6.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



Здравствуйте.

Суть задачки в следующем. В результате выборки из БД
Код

my $sql = "SELECT id, fio, name FROM users";
my $sth = $dbh->prepare($sql);$sth->execute();
my ($id, $fio, $name);
while ( my $ref = $sth->fetchrow_hashref() ) {
    $id = $ref->{'id'};
    $fio = $ref->{'fio'};
    $name = $ref->{'name'};
}

получаю три строки:
$id| $fio    | $name
1  | Иванов  | Иван
3  | Сидоров | Степан
5  | Петров  | Павел


Необходимо сгенерировать пустую таблицу на 10 строк, например таким образом:
Код

print qq~
<table border="1" cellpadding="0" cellspacing="0" width="400">
    <tr>
        <td>N п\п</td>
        <td>Фамилия</td>
        <td>Имя</td>
    </tr>~;

for(my $i=1;$i<=10;$i++) {
print qq~
    <tr>
        <td>$i</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
    </tr>~;
}

print qq~
</table>~;

и вставить в таблицу на свое место данные, которые были выбраны из БД. 

В итоге должна получиться вот такая табличка:
N 
п\п! Фамилия ! Имя
---+---------+-----
1  + Иванов  ! Иван
---+---------+-----
2  +         +
---+---------+-----
3  ! Сидоров ! Степан
---+---------+-----
4  +         +
---+---------+-----
5  ! Петров  ! Павел
---+---------+-----
6  +         +
---+---------+-----
7  +         +
---+---------+-----
8  +         +
---+---------+-----
9  +         +
---+---------+-----
10 +         +
---+---------+-----

Планирую сравнивать $i из цикла с $id из while и вставлять это в создаваемую таблицу.  Например:
Код

if ($i == $id) {
print qq~
    <tr>
        <td>$id</td>
        <td>$fio</td>
        <td>$name</td>
    </tr>~;
}
но ничего не получается. По-этому решил обратиться к тебе, О всезнающий All smile

Заранее спасибо!

PM MAIL   Вверх
ginnie
Дата 25.6.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Dam0n, я бы данные из БД сохранял в хэш с ключем id записи. В цикле генерации строк проверял наличие данных в хэше и выводил.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Dam0n
Дата 25.6.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



можно примерчик для визуала?
PM MAIL   Вверх
ginnie
Дата 25.6.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Пример даю фрагментами:

Код

my %users;
while ( my $ref = $sth->fetchrow_hashref() ) {
    $users{$ref->{id}} = [@{$ref}{'id','fio','name'}];
}


Код

for(my $i=1;$i<=10;$i++) {
my ($surname, $name) = exists $users{$i} ? $users{$i}[1,2] : ('&nbsp')x2;
print qq~
    <tr>
        <td>$i</td>
        <td>$surname</td>
        <td>$name</td>
    </tr>~;
}


Это сообщение отредактировал(а) ginnie - 25.6.2010, 15:36


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Dam0n
Дата 25.6.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



ОК.. спасибо ...  попробую
о результатах обязательно сообщу
PM MAIL   Вверх
Dam0n
Дата 28.6.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



ginnie, спасибо за подсказку ... все работает, но только если 
Код

my ($surname, $name) = exists $users{$i} ? $users{$i}[1,2] : ('&nbsp')x2;

то перл ругается "<!-- warning: Use of uninitialized value in concatenation (.) or string at D:/www/wwwroot/cgi­bin/test3.pl line 68. -->" на $name
Пришлось сделать в две строки
Код

my ($surname) = exists $users{$i} ? $users{$i}[1] : ('&nbsp')x2;
my ($name) = exists $users{$i} ? $users{$i}[2] : ('&nbsp')x2;


А есть еще какие-то варианты реализации данной задачки?
PM MAIL   Вверх
ginnie
Дата 28.6.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Dam0n, я привел ошибочный код, правильно будет так: 

Код

my ($surname, $name) = exists $users{$i} ? @{$users{$i}}[1,2] : ('&nbsp')x2;


то, что Вы написали тоже не совсем правильно, хотя и работает.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Dam0n
Дата 28.6.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



спасибо! все получилось
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.