Thread Arrayelemente einzeln mit Schleife auslesen (14 answers)
Opened by funeddy at 2020-10-04 13:40

haj
 2020-10-05 08:55
#192549 #192549
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Hallo Funeddy,

Da fallen mir schon ein paar Dinge auf in Deinem Code.

2020-10-04T12:58:13 funeddy
Code (perl): (dl )
foreach (@array) { ... }

In dieser Konstruktion wird die Variable $_ nacheinander mit Werten aus Deinem @array versorgt. Die Zeile am Ende der Schleife
Code (perl): (dl )
$_=$counter++;
bewirkt also ziemlich sicher nicht das, was Du willst: Sie ändert die Werte in Deinem Array, in diesem Fall mit fortlaufenden Nummern. Ich weiß nicht, mit welchen Werten @array am Anfang versorgt ist, aber nach dem Durchlauf der Schleife sind es die Zahlen von 0 aufwärts, bis zur um eins verminderten Anzahl der Elemente in @array.

2020-10-04T12:58:13 funeddy
Code (perl): (dl )
1
2
3
4
5
6
my $queryextstatus = "SELECT value_text FROM dynamic_field_value
WHERE object_id = $_
AND field_id = 80";

my $sth = $dbh->prepare($queryextstatus);
        $sth->execute();

Auch wenn es in Deinem Fall nicht dringend erforderlich sein sollte: Gewöhne Dir bitte gleich an, SQL-Abfragen mit Platzhaltern zu machen. SQL Injection ist die häufigste Sicherheitslücke in Programmen. Der Code wird dadurch nicht einmal länger:
Code (perl): (dl )
1
2
3
4
5
6
my $queryextstatus = "SELECT value_text FROM dynamic_field_value
WHERE object_id = ?
AND field_id = 80";

my $sth = $dbh->prepare($queryextstatus);
        $sth->execute($_);



2020-10-04T12:58:13 funeddy
Code (perl): (dl )
1
2
3
while ( @row = $sth->fetchrow_array ){
    $ticketextstatus = " @row";
}

Hier läufst Du durch eine Schleife und überschreibst jedesmal die gleiche Variable $ticketextstatus. Wenn Du nur ein Ergebnis erwartest, brauchst Du keine Schleife, und wenn Du mehrere erwartest, dann ist das mit Sicherheit falsch.

2020-10-04T12:58:13 funeddy
Code (perl): (dl )
1
2
3
open (DATEI, ">>status.txt" ) or die $!;
   print DATEI $ticketextstatus;
close (DATEI);
Da gibt es erst mal eine "modische" Anmerkung: So wie Du das schreibst, ist es zwar korrekt und kommt vermutlich immer noch in Perl-Kursen und -Büchern vor, aber heutzutage trennt man besser den Dateinamen vom Zugriffsmodus und verwendet lexikalische Variablen anstelle der GROSSBUCHSTABIGEN:
Code (perl): (dl )
1
2
3
open (my $fh, ">>", "status.txt" ) or die $!;
   print $fh $ticketextstatus;
close ($fh);

Außerdem gibst Du den Wert ohne Zeilenende aus, Deine Werte aus der Datenbank stehen also alle direkt hintereinander in einer Zeile.

2020-10-04T12:58:13 funeddy
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
my @array;
my $a;
push (@array, @daten);
print "Anzahl: ".scalar(@array)."\n";
for $a(@array){

}

print $array[$counter] . "\n";

Der Teil ab hier sieht ziemlich unfertig aus? Den kommentiere ich mal noch nicht.
(Editiert wg. Hinweis von Bianca - danke!)
Last edited: 2020-10-05 09:12:43 +0200 (CEST)

View full thread Arrayelemente einzeln mit Schleife auslesen