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

  • Автор темы sergeyda
  • Дата начала
S

sergeyda

#1
Я пытаюсь загрузить данные из формы. Там такая задача: к основной записи "приклеиваются" несколько (заранее неизвестно, сколько) других записей. Они все (и основная и дополнительные) выводятся в форме и задается вопрос: "оставить запись "прикрепленной" или нет. Соответственно - чекбокс сделан на каждой дополнительной записи. 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,
 
S

sergeyda

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

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;
}