Помогите разобраться!

Тема в разделе "Perl программирование", создана пользователем sergeyda, 7 фев 2010.

  1. sergeyda

    sergeyda Гость

    Я пытаюсь загрузить данные из формы. Там такая задача: к основной записи "приклеиваются" несколько (заранее неизвестно, сколько) других записей. Они все (и основная и дополнительные) выводятся в форме и задается вопрос: "оставить запись "прикрепленной" или нет. Соответственно - чекбокс сделан на каждой дополнительной записи. NAME сделан плавающим ( $bm = "block".$i; NAME = \"$bm\"), в VALUE - id прикрепленного блока. После нажатия кнопки "Сохранить", Мне при помощи вот такой примерно фигни: $info = checkValue($Q::$bm); надо вытащить ид прикрепленного материала. А не получается!

    Как сделать, чтобы все-таки заработало?

    Да. Забыл сказать (хотя, наверное, и так понятно) - я очень любитель и с терминологией у меня напряг. Вы уж меня простите.

    Вот кусок, который загружает данные:
    Код (PHP):
    my $bm = '';
    $queryS = "SELECT id, type, title, body, blockImage from Materials WHERE idExb=$Id ORDER BY id ASC";
    $qS = &executeQuery($dbh, $queryS);
    while ($refS = $qS->fetch()) {
    $bm = "block".$i;
    $info .= "<table border=0 CELLPADDING=\"5\" CELLSPACING=\"5\" width=\"100%\"><tr><td><img src=\"/img/programs/$$refS[4]\" border=0></td><td CLASS=\"grey8\" ><p align=\"left\"><font size=2><b>$$refS[2]</b></font><br>$$refS[3]<br><p align=\"right\"><b>Оставить текстовый блок прикрепленным к выставке? </b><INPUT TYPE=\"checkbox\" NAME=\"$bm\" VALUE=\"$$refS[0]\" checked></td></tr></table>";
    $i++;
    }
    if ($info) {
    print "<TR><TD VALIGN=\"middle\" CLASS=\"grey8\" colspan=\"2\"><INPUT TYPE=\"hidden\" NAME=\"qtymat\" VALUE=\"$i\">$info</td></tr>";
    print "<TR><TD VALIGN=\"middle\" BGCOLOR=\"#E5E5E5\" CLASS=\"grey8\" ALIGN=\"right\"><B>Прикрепить еще блок материалов?</B></TD><TD VALIGN=\"middle\" BGCOLOR=\"#E5E5E5\" CLASS=\"grey8\" ALIGN=\"left\"><INPUT TYPE=\"checkbox\" NAME=\"blocks\" VALUE=\"1\" checked></TD></TR>";
    }
    Вот кусок, который их должен вытащить из буфера:

    Код (PHP):
    if ($qtymat ne 0) {
    for ($i=0; $i<$qtymat; $i++) {
    $b = "block".$i;
    $info = ($Q::{$b});
    if ($info) {
    $materials .= "$info,";
    }
    }
    Но он не вытаскивает! Он пишет: *Q::block0,*Q::block1,*Q::block2,
     
  2. sergeyda

    sergeyda Гость

    Все. разобрался.

    Код (PHP):
    if ($qtymat ne 0) {
    $info = &readFromForm();
    if ($info) {
    $materials = $info;
    }
    }
    а подпрограмма вот:

    Код (PHP):
    sub readFromForm {
    my %FORM;

    use CGI qw/:standard/;
    my $info = '';
    my $info1 = '';
    my $q = new CGI;
    if ($q) {
    foreach my $key (keys %$q) {
    if ($key =~ /^\.\w+/) {
    next;
    }
    if ($key =~ /keywords/) {
    next;
    }
    if ($key =~ /\.x$/i) {
    next;
    }
    if ($key =~ /\.y$/i) {
    next;
    }
    if ($key =~ /^x$/i) {
    next;
    }
    if ($key =~ /^y$/i) {
    next;
    }
    if ($key !~ /block\d+/) {
    next;
    }
    if ($key =~ /block\d+/) {
    my $value = $q->{$key};
    my $ref = ref($value);
    if ($ref eq "ARRAY") {
    $FORM{$key} = join(" ", @$value);
    }
    elsif ($ref eq "HASH") {
    my @values;
    foreach my $foo (keys %$value) {
    push (@values, $value->{$foo});
    }
    $FORM{$key} = join(" ", @$values);
    }
    else {
    $FORM{$key} = $value;
    }
    $info .= "$FORM{$key},";

    }
    }
    }

    return $info;
    }
     
Загрузка...

Поделиться этой страницей