Heidi: Formular aus DB füllen -- Use of uninitialized value ..

Hallo Zusammen,

ich bin Perl-Neuling und habe folgendes Problem:

Ich habe probeweise ein Formualrfeld erzeugt und möchte diesesmit Daten aus einer Tabelle füllen.
Der 1. Tabelleneintrag wird mir im DropDown-Feld dargestellt.
Für jeden weiteren Tabelleneintrag erhalte ich folgende Fehlermeldung
'Use of uninitialized value in concatenation (.) or string at ./test.pl line 67.'
und in meinem DropDown-Feld erscheint pro weiterem Tabelleneintrag eine 'leerer WErt'.

Dies ist Zeile 67:
print "<option value=$zaehler> $typ[$zaehler]";

Die Code um Zeile 67:
print "<FORM name=Formular1>";
print "<FONT size=3>Testauswahlfeld:</FONT>";
print "<SELECT>";

my $zaehler=0;
while (my @test=$sth-> fetchrow_array())
{
    print "<option value=$zaehler> $test[$zaehler]";
    $zaehler+=1;
}
print "</option>";
print "</select>";
print "</form>";

Die bereits im Forum vorhandenen Diskussionen zu meiner Fehlermeldung,
konnten mir leider nichtweiterhelfen,
daher hoffe ich hier auf Tipps.

Danke!

Heidi

  1. und in meinem DropDown-Feld erscheint pro weiterem Tabelleneintrag eine 'leerer WErt'.

    Dies ist Zeile 67:
    print "<option value=$zaehler> $typ[$zaehler]";

    Die Code um Zeile 67:
    print "<FORM name=Formular1>";
    print "<FONT size=3>Testauswahlfeld:</FONT>";
    print "<SELECT>";

    my $zaehler=0;
    while (my @test=$sth-> fetchrow_array())
    {
        print "<option value=$zaehler> $test[$zaehler]";
        $zaehler+=1;
    }

    Dir ist klar was du da machst?
    scheint mir nicht so. wie wär's, wenn du dir mal die Werte ausgibst, mit denen du da arbeitest?

    use Data::Dumper;

    my $zaehler=0;
    while (my @test=$sth-> fetchrow_array())
    {
    print "Zähler: $zaehler - Test=". Dumper @test;

    print "<option value=$zaehler> $test[$zaehler]";
    $zaehler+=1;

    das kan man vereinfachen:
    $zaehler++;

    }

    Struppi.

    1. Danke, für die Antwort.

      War wirklich etwas seltsam.
      So funktionierts jetzt:

      print "<FORM name=Formular1>";
       print "<FONT size=3>Testauswahlfeld:</FONT>";
       print "<SELECT>";

      my $zaehler=0;
       while (my $test=$sth-> fetchrow_array())
       {
           print "<option value=$zaehler> $test";
           $zaehler+=1;
      }

  2. Hi,

    my $zaehler=0;
    while (my @test=$sth-> fetchrow_array())
    {
        print "<option value=$zaehler> $test[$zaehler]";
        $zaehler+=1;
    }

    fetchrow_array liefert dir ein Array mit allen Werten eines bestimmten Datensatzes. Du darfst also nicht weiterzählen, sondern musst jedes Mal das gleiche Element nehmen

    while (@test=$sth->fetchrow_array(){
        print "<option value='$zaehler'>$test[0]</option>";
        #Anführungszeichen bei value= nicht vergessen
        #$test[0] gibt dir das erste Feld zurück

    $zaehler++; #Siehe perldoc perlop
    }

    Du kannst auch anstatt fetchrow_array auch fetchrow_hashref verwenden, das ermöglicht dir den Zugriff auf die Felder über deren Namen:

    while ($haschref=$sth->fetchrow_hashref(){
        print "<option value='$zaehler'>$haschref->{'namedesfeldes'}</option>";
        $zaehler++; #Siehe perldoc perlop
    }

    HTH

    wunderwarzenschwein

    --
    ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)
    1. Vielen Dank für die Antwort, hat mir sehr weitergeholfen, hatte die Funktion fetchrow_array falsch verstanden.

      Danke!!