Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]141[/thread]

Problem mit Scrollscript: Zeigt nur letzten Eintrag an



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Tom
 2004-01-11 20:58
#846 #846
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Das Array im Titel sollte eigentlich nicht dort hin ;)

Ich habe da ein Scrollscript das mir die Einträge von heute anzeigen soll, aber es zeigt immer nur den letzten Eintrag des Arrays an.

Hier mal ein Teil vom Code

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
if (-e $filetoopen) {
open(FILE, "$filetoopen");
@events = <FILE>;
close(FILE);
..
..
..
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>$lang{header} $wday $lang{the} $ev_day.$ev_month.$ev_year</title>\n";
print "</head>\n";


@sortevents = sort{ $a <=> $b }@events;
$id = -1;

$a = nein;

foreach (@sortevents) {

($beginn, $name, $veranstalter, $titel, $ort, $location, $am, $art, $mail, $url, $sonstiges) = split(/\|/,$_);

$id++;


if ($a eq nein) {
print "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"1\" border=\"0\" class=\"forumline\">
<tr>
<td class=\"catHead\" height=\"25\"><span class=\"genmed\"><b>Events</b></span></td>
</tr>
<tr>
<td class=\"row1\" align=\"left\"><span class=\"gensmall\">
<marquee id=\"recent_topics\" behavior=\"scroll\" direction=\"up\" height=\"200\" scrolldelay=\"100\" scrollamount=\"2\">
<!-- BEGIN recent_topic_row -->
&raquo; <a href=\"$urlcgi/" . "event.cgi?ev_day=$ev_day\&ev_month=$ev_month\&ev_year=$ev_year\" onMouseOver=\"document.all.recent_topics.stop()\" onMouseOut=\"document.all.recent_topics.start()\" target=\" _blank\">$titel</a><br />
by $veranstalter<br /><br />
<!-- END recent_topic_row -->
</marquee>
</span></td>
</tr>
</table>
<br>
";
$a = ja;
};
};


exit;
};


Das ganze ist ja logisch da es den letzten Eintrag des Arrays @sortevents in die Variablen schreibt und dann ausgibt, aber wie kann ich das machen dass es alle Einträge hintereinander schreibt.

Beispiel wie es aussehen sollte. (Links unten bei Aktuelle Beiträge)

So siehts im moment aus
Klick\n\n

<!--EDIT|Tom|1073847741-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
[E|B]
 2004-01-11 21:42
#847 #847
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Na den Code kannst du aber schöner schreiben! :D
Wenn du in der if-Bedingung in der Schleife den Wert von $a auf "Ja" setzt und danach prüfst, ob die Variable auch den Wert "Nein" hat, kann das natürlich nicht gehen!
Hier mal ein etwas schönerer Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if(-e("$filetoopen")){
open(FILE, "$filetoopen");
my @events = <FILE>;
close(FILE);
# ..
# ..
# ..

print "Content-type: text/html\n\n";
print "here's all the HTML stuff;

my $id = -1;
foreach (sort{ $a <=> $b } @events) {
($beginn, $name, $veranstalter, $titel, $ort, $location, $am, $art, $mail, $url, $sonstiges) = split(/\|/, $_);
$id++;
if($a eq nein){
print "here's HTML stuff, too";
# $a = ja;
# Wenn du hier auf "ja" setzt wird der HTML Code nicht mehr ausgegeben!
}
}
}

exit;
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
KKO
 2004-01-11 21:45
#848 #848
User since
2003-11-05
124 Artikel
BenutzerIn

user image
hierzu schon mal großes ? $a = nein; $a = ja;
dann setzt du innerhalb dieser bedingung
if ($a eq nein) { ..... $a = ja}
also trifft nein nie nicht mehr zu
Gruß
KKO
Strat
 2004-01-11 22:05
#849 #849
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
1. ja und nein besser als zeichenketten verwenden: "ja" und 'nein' oder so...
2. von woher kommt das $a in $a eq "ja"?
3. -e $datei ueberprueft, ob da irgendwas ist, also z.B. auch ein Verzeichnis. Da besser explizit auf eine Datei testen: -f $datei
4. Bei open immer eventuelle Fehler abfangen:
Code: (dl )
1
2
3
4
5
6
7
unless (open(FILE, $fileToOpen)) {
print "Error: couldn't read from '$fileToOpen': $!\n";
}
else {
...
close (FILE);
} # else

sonst stolpert man ueber oft schwer zu findende fehler...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Dubu
 2004-01-12 00:49
#850 #850
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
...und
5) bitte, bitte den Code "strict"- und "warnings"-fest machen;
6) die Variablen $a und $b vermeiden; wie du selber schon siehst: sie werden auch fuer sort() benutzt;
7) fuer lange Texte besser statt "..." lieber qq~...~ oder Here-Documents benutzen, dann sparst du dir das Quoten der Anfuehrungszeichen, es wird weniger fehleranfaellig und besser zu lesen.

:)
Tom
 2004-01-12 18:09
#851 #851
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Quote
Na den Code kannst du aber schöner schreiben!


Ja, natürlich kann ich das, habe es nur mal auf die schnelle gemacht um zusehen obs auch funktioniert.


Das $a = ja; hatte ich dafür gedacht dass die print-Anweisung nur beim erstenmal ausgeführt wird, sonst hatte ich mehrmals das Scrollfenster.

Quote
von woher kommt das $a in $a eq "ja"?


Das $a in der sort-Anweisung war schon vorher da, das andere hab ich reingestezt, hab aber nicht gesehen dass es $a schon gibt.\n\n

<!--EDIT|Tom|1073924013-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2004-01-12 20:33
#852 #852
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also ich habe mal den COde etwas überarbeitet, es ist jetz momentan so, dass es pro Eintrag in der Datei einmal das Scrollscript anzeigt, es sollte aber nur einmal mit allen Einträgen angezeigt werden.

Ich hoffe ihr habt ne Lösung für mich.

Hier der Code

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/perl 

use lib '$urlcgi';
use Kal;
use CGI::Carp "fatalsToBrowser";
use CGI qw(:all);
use warnings;
use strict;
use vars qw($Tag $Monat $Jahr $filetoopen @events @sortevents $urlcgi $titel $beginn $name $ort $veranstalter $location $am $art $mail $url $sonstiges);

require "data/info.cgi";
require "data/date.cgi";
require "data/lang.cgi";

my $ev_day = param('ev_day');
my $ev_month = param('ev_month');
my $ev_year = param('ev_year');


if ($ev_day eq "" || $ev_month eq "" || $ev_year eq "") {
if ($Monat < 10) {$Monat = "0" . $Monat};
chdir $Jahr;
chdir $Monat;
$filetoopen = "$Tag.$Monat.$Jahr.thd";
$ev_day = $Tag;
$ev_month = $Monat;
$ev_year = $Jahr;
}else{
chdir $ev_year;
chdir $ev_month;
$filetoopen = "$ev_day.$ev_month.$ev_year.thd";
};

if (-f $filetoopen) {
unless (open(FILE, $filetoopen)) {
print "Error: couldn't read from '$filetoopen': $!\n";
}else {
open(FILE, "$filetoopen");
@events = <FILE>;
close(FILE);
};


}else{
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Error</title>\n";
print "</head>\n";
print "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"1\" border=\"0\" class=\"forumline\">
<tr>
<td class=\"catHead\" height=\"25\"><span class=\"genmed\"><b>Events</b></span></td>
</tr>
<tr>
<td class=\"row1\" align=\"left\"><span class=\"gensmall\">
<marquee id=\"recent_topics\" behavior=\"scroll\" direction=\"up\" height=\"200\" scrolldelay=\"100\" scrollamount=\"2\">
<!-- BEGIN recent_topic_row -->
&raquo; <a href=\"$urlcgi/" . "event.cgi?ev_day=$ev_day\&ev_month=$ev_month\&ev_year=$ev_year\" onMouseOver=\"document.all.recent_topics.stop()\" onMouseOut=\"document.all.recent_topics.start()\" target=\" _blank\">Heute sind keine Events 1</a><br />
<!-- END recent_topic_row -->
</marquee>
</span></td>
</tr>
</table> \n";

exit;
};

if (@events == ""){
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Error</title>\n";
print "</head>\n";
print "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"1\" border=\"0\" class=\"forumline\">
<tr>
<td class=\"catHead\" height=\"25\"><span class=\"genmed\"><b>Events</b></span></td>
</tr>
<tr>
<td class=\"row1\" align=\"left\"><span class=\"gensmall\">
<marquee id=\"recent_topics\" behavior=\"scroll\" direction=\"up\" height=\"200\" scrolldelay=\"100\" scrollamount=\"2\">
<!-- BEGIN recent_topic_row -->
&raquo; <a href=\"$urlcgi/" . "event.cgi?ev_day=$ev_day\&ev_month=$ev_month\&ev_year=$ev_year\" onMouseOver=\"document.all.recent_topics.stop()\" onMouseOut=\"document.all.recent_topics.start()\" target=\" _blank\">Heute sind keine Events 2</a><br />
<!-- END recent_topic_row -->
</marquee>
</span></td>
</tr>
</table> \n";

exit;

}else{
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Titel</title>\n";
print "</head>\n";

@sortevents = sort{ $a <=> $b }@events;

foreach (@sortevents) {

($beginn, $name, $veranstalter, $titel, $ort, $location, $am, $art, $mail, $url, $sonstiges) = split(/\|/,$_);

print "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"1\" border=\"0\" class=\"forumline\">
<tr>
<td class=\"catHead\" height=\"25\"><span class=\"genmed\"><b>Events</b></span></td>
</tr>
<tr>
<td class=\"row1\" align=\"left\"><span class=\"gensmall\">
<marquee id=\"recent_topics\" behavior=\"scroll\" direction=\"up\" height=\"200\" scrolldelay=\"100\" scrollamount=\"2\">
<!-- BEGIN recent_topic_row -->
&raquo; <a href=\"$urlcgi/" . "event.cgi?ev_day=$ev_day\&ev_month=$ev_month\&ev_year=$ev_year\" onMouseOver=\"document.all.recent_topics.stop()\" onMouseOut=\"document.all.recent_topics.start()\" target=\" _blank\">$titel</a><br />
by $veranstalter<br /><br />
<!-- END recent_topic_row -->
</marquee>
</span></td>
</tr>
</table>
<br>
";
};


exit;
};


DANKE\n\n

<!--EDIT|Tom|1073932442-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Dubu
 2004-01-12 23:56
#853 #853
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Das ist ein Problem deiner Programmlogik. Du gibst fuer jedes Element in @sortevents eine komplette Tabelle mit einem <marquee> Element aus. Wahrscheinlich soll aber die Schleife innerhalb der Ausgabe dieses Elementes aufgerufen werden. Ich kenne mich mit diesem IE-Spezifikum nicht wirklich aus, nehme aber mal an, dass mehrere Links zwischen <marquee> und </marquee> sollen.

Uebrigens:
if (@events == ""){
Das ist keine sinnvolle Abfrage. Du pruefst, ob die Laenge des Arrays @events (das Array im skalaren Kontext, hier durch den Vergleich, ergibt seine Laenge) gleich dem Leerstring ist. Wahrscheinlich meinst du
if (@events == 0){
d.h. @events ist leer (enthaelt keine Elemente).
Tom
 2004-01-13 18:22
#854 #854
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wie kann ich es denn dann machen dass die ganzen Einträge von @sortevents angezeigt werden???

Danke

Tom\n\n

<!--EDIT|Tom|1074010999-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
[E|B]
 2004-01-13 18:35
#855 #855
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Code: (dl )
print @sortevents;
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-01-11 20:58.