Portál AbcLinuxu, 13. května 2025 15:45

Dotaz: Perl/CGI, while cyklus

20.1.2008 18:57 majky8
Perl/CGI, while cyklus
Přečteno: 397×
Odpovědět | Admin
Dobry den, predem se omlouvam za titulek ale nevim jak to vhodne pojmenovat :)

K problemu, nedavno jsem http://www.abclinuxu.cz/forum/show/202896 tady resil neco podobneho ale reseni se k tomuhle nehodi... Mam kod stranky psane v perlu a potreboval bych, aby aby mi while cyklus vytvarel kus kodu do bunky. Vypada to takhle:
sub articles {
	while ( $odpoved = $dotaz->fetchrow_hashref() ) {
	   $cgi->h2(
		$cgi->a({-href=>"$host/articles.pl?page=$odpoved->{'id'}"},
		"$odpoved->{'title'}",
	           ),
		),
		$cgi->h3(
	        "$odpoved->{'hlavicka'}",
			),
	    $cgi->a({-href=>"$host/articles.pl?page=$odpoved->{'id'}"},
		"Pokracovat>>",
	           ),
	}

}
(pripojeni a dotaz je jeste pred podprogramem, vcetne execute(); ) Problem je v tom, ze tahle konstrukce nevraci nic, ani chybovou hlasku. Pokud to vlozim primo do tela zpravy bez podprogramu, tak mi to zahlasi syntax error u while. Kdyz to podobne napisu do normalniho scriptu a ne CGI, spustim, tak jde vsechno v poradku. Googlil jsem celkem dlouho ale nic co by mi nejak pomohlo to vyresit. Ikdyz vim, ze jsem v tomhle docela lamka, tak i presto, nasla by se nejaka dobra duse co mi pomuze? :)
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.1.2008 20:29 mlz
Rozbalit Rozbalit vše Re: Perl/CGI, while cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
Řekl bych, že chybí na začátku print. A tiše předpokládám, že nechybí $cgi=new CGI :-)

Jo a předpokládám, že FETCH vrací nějaká data (ten cykl není prázdný)

Mýlím-li se, ten skript by měl se dát spouštět pomocí pouze perlu, argumenty ve tvaru PARAM=VALUE a zajímal by mne jeho výstup
21.1.2008 20:47 majky8
Rozbalit Rozbalit vše Re: Perl/CGI, while cyklus
$cgi=new CGI; ani print nechybi, na zacatku toho scriptu vsechno je, fetch vraci data z databaze, kdyz je posilam do souboru, tak to funguje, nefunguje ale vystup do kodu a nevim jak to zprovoznit... Kdyz to je jako podprogram, tak to nevyda vubec nic, stranka se sice zobrazi ale td nic neobsahuje, volani podprogramu:
...
$cgi->td({-valign=>"top",-width=>717,-height=>819,-align=>"left"},
	&articles,    
), 
...
kdyz misto &articles, vlozim while cyklus, tak to da SYNTAX ERROR na radku kde je while
21.1.2008 21:05 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: Perl/CGI, while cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
podle mne je problem v tom ze tam kam davas &articles by melo byt pole takze sub articles() by mel vracet pole.

tvoje nic nevraci takze se vyhodnoti jako td({...}, []}

ps: comp.perl.beginners je na tyhle dotazy urcite lepsi ...
22.1.2008 16:23 majky8
Rozbalit Rozbalit vše Re: Perl/CGI, while cyklus
jestli to dobre chapu tak jsem podle toho zkusil cely vystup co provadi while ulozit do pole a to vracet, jenomze to zase vraci jako normalni text a ne jako kus kodu stranky
22.1.2008 16:36 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Perl/CGI, while cyklus
Odpovědět | | Sbalit | Link | Blokovat | Admin
a)
sub ... {
  my @retval;

  while (...) {
    push @retval, $cgi->h2 (), $cgi->h3, ...;
  }

  return @retval;
}
b) použi HTML::Template / Template::Toolkit ; popr Catalyst na všetko dohromady
22.1.2008 16:50 majky8
Rozbalit Rozbalit vše Re: Perl/CGI, while cyklus
varianta a) mi pomohla, dekuji za snahu ;)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.