OVH Cloud OVH Cloud

push perl

18 réponses
Avatar
lolodev
bj

j'ai un code existant qui effetue une requ=EAte puis met les resultats
en liste et cr=E9=E9 un select/option html:
my @categories;
my @categoriesid;
my $data;

my $db_query =3D "SELECT catName,catNum FROM Categories ORDER by
catName";
$dbh=3D$db->prepare($db_query);
$dbh->execute();

while (($data,$numid)=3D$dbh->fetchrow_array()) {
push (@categories, $data);
}
my $categorylist;
my $i;
my $j;
my @categories_to_print;
my $category;
my $thename;

$categorylist =3D '<SELECT NAME=3D"category" CLASS=3D"forms">';
$categorylist .=3D '<OPTION VALUE=3D"">Toutes les
cat=E9gories</OPTION>';
foreach $category (@categories) {
if ($category =3D~ /^([^:]+):/) {
$category =3D $1;
}
push (@categories_to_print, $category) unless
$categories_to_print[$#categories_to_print] eq $category;
}


for ($i=3D0; $i<=3D(int($#categories_to_print)); $i++) {
for ($j=3D$i; $j<=3D$#categories_to_print;
$j+=3D(int($#categories_to_print)+1)) {
$thename =3D &shortcat($categories_to_print[$j]);

$categorylist .=3D "<OPTION
VALUE=3D\"$thename\">$thename</OPTION>";

}

}
$categorylist .=3D '</SELECT>';

Je cherche d=E9sesp=E9rement =E0 introduire l'id catNum =E0 la place du
libell=E9 catname dans l'attribut VALUE de OPTION ...???

merci
bonne journ=E9e

10 réponses

1 2
Avatar
Jacques Caron
Salut,

On Fri, 21 Oct 2005 08:59:17 +0200, lolodev
wrote:

Je cherche désespérement à introduire l'id catNum à la place du
libellé catname dans l'attribut VALUE de OPTION ...???


Les parties importantes:

# On prend toute la liste d'un coup, on option une ref à un tableau de
refs de hash
my $categories = $dbh->selectall_arrayref($db_query,{Slice=>{}}) || [];
# On fait tout d'un coup
$categorylist .= join "",map
{qq[<OPTION VALUE="$_->{catNum}">$_->{catName}</OPTION>]}
values map
{$_->{catName} =~ /^([^:]+):/?($1 => {catName=> $1,
catNum=>$_->{catNum}}):($_->{catName} => $_)}
@$categories;

Pas testé, mais on ne doit pas être très loin... J'ai pas forcément
compris la logique des deux boucles $i et $j imbriquées à la fin, ceci dit.

Jacques.
--
Oxado http://www.oxado.com/

Avatar
lolodev
merci mais oupsss!!

qu'est ce que je galére ...
y a une erreur dans
$categorylist .= join "",map
{qq[<OPTION VALUE="$_->{catNum}">$_->{catName}</OPTION>]}
values map
{$_->{catName} =~ /^([^:]+):/?($1 => {catName=> $1,
catNum=>$_->{catNum}}):($_->{catName} => $_)}
@$categories;

mais ...
Avatar
lolodev
Can't declare array dereference in my at
/home/eupholis_v2/cgi-bin/search.pl lin
e 370, near "$categories;"
Type of arg 1 to values must be hash (not map) at /home/eupholis_v2/cgi-bin/sear
ch.pl line 394, near "$categories;"
Execution of /home/eupholis_v2/cgi-bin/search.pl aborted due to compilation erro
rs.


Avatar
lolodev
Can't declare array dereference in my at
/home/eupholis_v2/cgi-bin/search.pl line 370, near "$categories;"
Type of arg 1 to values must be hash (not map) at
/home/eupholis_v2/cgi-bin/search.pl line 394, near "$categories;"
Execution of /home/eupholis_v2/cgi-bin/search.pl aborted due to
compilation errors.
Avatar
Jacques Caron
Salut,

On Fri, 21 Oct 2005 11:00:38 +0200, lolodev
wrote:

y a une erreur dans
$categorylist .= join "",map
{qq[<OPTION VALUE="$_->{catNum}">$_->{catName}</OPTION>]}
values map
{$_->{catName} =~ /^([^:]+):/?($1 => {catName=> $1,
catNum=>$_->{catNum}}):($_->{catName} => $_)}
@$categories;



Alors (toujours pas testé, mais ça devrait mieux marcher, et au moins ça
découpe les différentes étapes, donc ça aide pour le débug):

my %cathash = map
{
$_->{catName} =~ /^([^:]+):/?
($1 => {catName=> $1, catNum=>$_->{catNum}}):
($_->{catName} => $_)
}
@$categories;

$categorylist .= join "",map
{
qq[<OPTION VALUE="$_->{catNum}">$_->{catName}</OPTION>]
}
values %cathash;

Sinon en une seule étape en ajoutant un %{{ ... }} autour du deuxième map
ça devrait le faire, mais ce n'est pas forcément super lisible.

Par contre pour l'autre erreur je ne vois pas vraiment, mais je ne sais
pas à quelle ligne de code ça correspond...

Jacques.
--
Oxado http://www.oxado.com/

Avatar
lolodev
YES ça marche super ! merci

histoire d'abuser ...
(j'ai du mal pour demarrer avec PERL)

j'essaie de reprendre ce code pour afficher catName sur 2 colonnes de
tableau html en fct de la moitié des elements retournés par %cathash
!?? non plus un select/option
ou dans ce code je peux recupérer le nombre d'elements et faire une
division / 2 ...

merci :))
Avatar
lolodev
où dois je mettre une commande sort() pour faire un tri alpha du
resultat ?
Avatar
Jacques Caron
Salut,
On Mon, 24 Oct 2005 17:50:37 +0200, lolodev
wrote:

j'essaie de reprendre ce code pour afficher catName sur 2 colonnes de
tableau html en fct de la moitié des elements retournés par %cathash
!?? non plus un select/option
ou dans ce code je peux recupérer le nombre d'elements et faire une
division / 2 ...


Tu veux faire deux colonnes de catnames, c'est ça?

A vue de nez:

my @catnames = map {$_->{catName}} values %cathash;
my $half;
{
use integer;
$half =(scalar @catnames + 1) / 2;
}
print join "",map
{"<TR><TD>$catnames[$_]</TD><TD>".($catnames[$_+$half]||"")."</TD></TR>"}
(0 .. ($half-1));

Pas testé...

Jacques.
--
Oxado http://www.oxado.com/

Avatar
Jacques Caron
On Mon, 24 Oct 2005 18:03:52 +0200, lolodev
wrote:

où dois je mettre une commande sort() pour faire un tri alpha du
resultat ?


Juste avant le values %cathash:

sort {$a->{catName} cmp $b->{catName}}

Jacques.
--
Oxado http://www.oxado.com/

Avatar
lolodev
ooppss

j'y suis presque ...
j'ai réussi à faire fcter ce code!!

sauf que je n'ai pas l'id catnum ...
dans chaque <td>, je souhaiterai <td><a
hrefÊtnum>cartname</a></td><td><a hrefÊtnum>catname</td>
avec la moitie de catname par colonne.
du coup je perds le lien tableau avec catnum ...

je ne sais pas comment vous remercier ...
1 2