Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: WebStyleBoard. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Donnerstag, 29. Januar 2004, 16:32

Problem mit CGI-Script

Ich nutze das Script "zitate.pl" von xwolf.de. Leider fügt das Script den Zitaten unverständlicherweise Leerzeichen an, siehe hier: sv-einigkeit.de.

Die Vorlage für die Ausgabe der Zitate habe ich auf folgendes Format angepasst:

Quellcode

1
2
3
4
5
6
7
print(&PrintHeader);
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
   print "&bdquo;$text[$i]&ldquo;";
  }
  print "<span>$author</span>";
  print "</cite>\n";
Im Original lauten diese Zeilen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print(&PrintHeader);
  print "<html><head><title>Spruch des Tages</title></head><body>\n";
  print "<h2>Spruch des Tages</h2>\n";
  print "<p><br>\n";
  print "<table align=middle width="95%" border=1>\n";
  print "<tr><td align=center width="100%"><br>\n";
  for ($i=0;$i<$l;$i++) {
   print "$text[$i]\n";
  }
  print "<br><br></td></tr>\n";
  print "<td align=right><p>\n";
  print "$author\n";
  print "</td></table>\n";
  print "<p>\n";
  print "</body></html>\n";
Woher kommen die Leerzeichen innerhalb der Anführungszeichen? Die Textdatei mit den Zitaten hat folgenden Aufbau:

Quellcode

1
2
* Entweder man lebt, oder man ist konsequent.
- Erich Kästner
Kann dieses Problem jemand von euch nachvollziehen? :(

2

Donnerstag, 29. Januar 2004, 16:38

Wahrscheinlich enthält $text[$i] das Leerzeichen, gibt es in Perl sowas wie [phpnet]stripslashes[/phpnet]? Wenn ja, dass wende die Funktion mal drauf an.
Signatur von »Darii« Against TCPA - TCPA heißt Freiheit verlieren
D.A.R.I.I.: Digital Artificial Replicant Intended for Infiltration

3

Donnerstag, 29. Januar 2004, 16:43

Meine Kenntnisse reichen gerade einmal die Ausgabe des Scripts in den HTML-Teilen anzupassen am eigentlichen Script pfusche ich nicht rum ... ;)

BTW: Kennt jemand ein Script, das pro Tag nur ein Zitat anzeigt? Sozusagen ein wirklicher "Spruch des Tages" und nicht ein "Spruch des Seitenaufrufs". Die Zitate sollten aus einer Textdatei ausgelesen werden.

4

Freitag, 30. Januar 2004, 16:54

Hab' mir heute noch einige Scripte angesehen und mir gefällt das Script von xwolf immer noch am besten. Wie könnte ich diese störenden Leerzeichen wegbekommen? Vielleicht kann sich das mal einer anschauen ... :)

Quellcode

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#!/usr/bin/perl
##############################################################################
# COPYRIGHT NOTICE                                                           #
# Copyright 1997 Wolfgang Wiese     All Rights Reserved.                     #
#       EMail: [EMAIL]xwolf@xwolf.com[/EMAIL]                                               #
#       URL  : [URL]http://www.xwolf.com[/URL]                                          #
#                                                                            #
# zitate.pl may be used and modified free of charge by anyone so long as     #
# this copyright notice and the comments above remain intact.  By using this #
# code you agree to indemnify Wolfgang Wiese from any liability that         #  
# might arise from it's use.                                                 #  
#                                                                            #
# Selling the code for this program without prior written consent is         #
# expressly forbidden.  In other words, please ask first before you try and  #
# make money off of my program.                                              #
#                                                                            #
# Obtain permission before redistributing this software over the Internet or #
# in any other medium.	In all cases copyright and header must remain intact.#
##############################################################################
# Last Modified on:	$Date: 2003/03/28 23:53:54 $
# By:			$Author: xwolf $
# Version:		$Revision: 1.1 $ 
##############################################################################
use lib '/home/earolusr/public_html/cgi-bin/web';
use web;

$zitate_file = 'versteckt';
	# This file contains the phraes which have to be displayed.
	# (Yes, it could als be advertisement.)
	# Syntax of this file: 
	#   Line n:   '* Text'
	#   Line n+1: '- Authorname'
	# Text can contain HTML-Tags.
##############################################################################
# Main program starts after this point. Change only if you know what to do.
##############################################################################
%in = ReadParse;

$seperator = $in{'seperator'};
$table = $in{'table'};

if (!($seperator)) {
  if ($table) {
    $seperator='<br><br></td></tr><td align=right><p>';
  } else {
    $seperator='<P>';
  }
} 

$picture = Check_Name($in{'picture'});
$output  = Check_Name($in{'output'});

if ($output =~ /illegal/i) {$output='';}

# Notice: If output is left out, the data will be displayed in a new HTML-document,
# the cgi will produce. Otherwise, the text will be written in the file in output.


$number_zitate= &Get_Number;
if ($number_zitate==0) { Fehlermeldung("No phrases found!");}

$number_zitate=int((rand(($web::sek*$web::tag*$web::minute)*($web::stunde+1)) % $number_zitate))+1;


 &Get_Zitat($number_zitate);

if ($output) {
 $i=0;
 open (f2,"<$output") || Fehlermeldung("Cannot open output file $output!");
  while(<f2>) {
   chop($_);
   $outline[$i]=$_;
   $i++;
  }
 close f2;
 # Now I that read the full html-file, i can begin to edit it.
 $found=0;$new=0;
 for ($t=0;$t<$i;$t++) {
  if ($outline[$t] eq '<!-- BEGIN ZITAT -->') {
   $inline[$new]=$outline[$t];
   $new++;
   $found=1;
  }
  if ($outline[$t] eq '<!-- END ZITAT -->') {
   $found=0;
  }
  if ($found==1) { 
   if ($table eq 'on') {
    $inline[$new]='<table align=middle width="95%" border=1><tr><td align=center width="100%"><br>';
    $new++;  
   }
   for ($s=0;$s<$l;$s++) { 
    $inline[$new]=$text[$s];
    $new++;
   } 
   $new++;
   $inline[$new]=$seperator;$new++; 
   $inline[$new]=$author;   $new++;
   if ($table eq 'on') {
    $inline[$new]='</td></table>';
    $new++;
   }
   $found=2;
  } elsif ($found==0) {
   $inline[$new]=$outline[$t];
   $new++;
  }
 }
 if (($picture) && (not ($picture =~ /illegal/))) {
   open(f1,">$output") || Fehlermeldung("Cannot write into output-file $output!");
    for ($i=0;$i<$new;$i++) {
      print f1 "$inline[$i]\n";
    }   
   close f1;
   print "Pragma: no-cache\n";
   print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n";
   print "Content-type: image/gif\n\n";
   # Display the picture
   open (DATA, "$picture");
    while (<DATA>) {
         print $_;
    }
   close (DATA);
 } else {
   print(&PrintHeader);
   for ($i=0;$i<$new;$i++) {
     print "$inline[$i]\n";
   }
 } 
} else {
  print(&PrintHeader);
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
   print "&bdquo;$text[$i]&ldquo;";
  }
  print "<span>$author</span>";
  print "</cite>\n";
}
exit(0);

############################## Now the subroutines #######################
sub Get_Zitat {
 local($number) = @_;
 $i=0;
 $found=1;
 $l=0;
 $ready=1;
 
 open(f1,"<$zitate_file") || Fehlermeldung("Could not open phrases-file $zitate_file!");
  while(<f1>) {
   chop($_);
   if (($found) && ($ready)) {
     if (substr($_,0,1) eq '*') {$i++;}
   } else {
    if ($ready) {
     if (substr($_,0,1) eq '-') {
      $author=substr($_,1);
      $ready=0;
     } else {
      $text[$l]=$_;
      $l++;
     }
    } 
   }
   if ($i == $number) {
    $found=0;
    $i=-1;
    $text[$l]=substr($_,1);
    $l++;
   }
  }
 close f1;  
}
##############################################################################
sub Get_Number {
 # This sub returns the number of zitat-entries
 my $max_zitat =0;
 open(f1,"<$zitate_file") || Fehlermeldung('Could not open zitate-file!');
  while(<f1>) {
   chop($_);
   if (substr($_,0,1) eq '*') {$max_zitat++;}
  }
 close f1;
 return $max_zitat;
}
##############################################################################
# EOF
##############################################################################

5

Samstag, 31. Januar 2004, 18:37

Hi.
Ich würde mir das gerne mal komplett angucken und zwar mit der Zitatedatei.
Schicke mir doch mal bitte alle Dateien an webmaster@mamo-net.de und ich gucks mir mal an... :) Ich konnte unten auf die Schnelle nichts finden.
MfG MaMo

6

Samstag, 31. Januar 2004, 21:52

Welche lehrzeichen meinst du denn genau?

Habs mal bei mir installiert, so siehts aus: http://www.mamo-net.de/cgi-bin/zitate.pl
Sind sie da noch da?

MfG MaMo

7

Samstag, 31. Januar 2004, 22:03

Nein, bei dir werden keine Leerzeichen angezeigt. Bei mir leider immer noch: http://www.sv-einigkeit.de/cgi-bin/zitate/zitate.pl (innerhalb der Anführungszeichen und vor dem Namen).

?(

Quellcode

1
2
3
<cite>&bdquo; Jetzt sind die guten alten Zeiten, nach denen wir uns in zehn Jahren zurücksehnen.
&ldquo;<span> Sir Peter Ustinov
</span></cite>

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DukeXP« (31. Januar 2004, 22:05)


8

Samstag, 31. Januar 2004, 22:13

Hi.

Also das ganze geheimnis besteht darin das du in der Datenbank mit den Zitaten anstatt

* Zitat
- Autor

dieses schreiben musst:

*Zitat
-Autor

Also einfach in der Datenbank hinter * und - keine Leerzeichen machen.

MfG MaMo

9

Samstag, 31. Januar 2004, 22:40

Da ist aber immer noch ein Leerzeichen übrig:

Quellcode

1
2
3
<cite>&bdquo;Was bei der Jugend wie Grausamkeit aussieht, ist meistens Ehrlichkeit.
&ldquo;<span>Jean Cocteau
</span></cite> 
... vor &ldquo - dort ist im Quelltext auch seltsamerweise ein Zeilenumbruch zu finden.

Um Fehler auszuschließen habe ich den HTML-Teil im Script jetzt mal komplett in eine Zeile geschrieben:

Quellcode

1
print "<cite>&bdquo;$text[$i]&ldquo;<span>$author</span></cite>";

10

Sonntag, 1. Februar 2004, 16:17

Hi.

Also bei mir war keiner mehr?!

Aber kannstes mal damit versuchen:

Anstatt:

PHP-Quelltext

1
2
3
  for ($i=0;$i<$l;$i++) {
   print "&bdquo;$text[$i]&ldquo;";
  }

dieses:

PHP-Quelltext

1
2
3
4
  for ($i=0;$i<$l;$i++) {
   chomp $text[$i];
   print "&bdquo;$text[$i]&ldquo;";
  }


MfG MaMo

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MaMo« (1. Februar 2004, 16:21)


11

Sonntag, 1. Februar 2004, 16:24

Das Leerzeichen / der Zeilenumbruch im Quelltext ist immer noch vorhanden:

Quellcode

1
2
&bdquo;Was bei der Jugend wie Grausamkeit aussieht, ist meistens Ehrlichkeit.
&ldquo; 
Warum fügt das Script hinter den Variablen jeweils einen Zeilenumbruch ein?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DukeXP« (1. Februar 2004, 16:25)


12

Sonntag, 1. Februar 2004, 17:47

Hi.

Hast ne Mail (der Forum hat den Code kaputt gemacht).

MfG MaMo

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MaMo« (1. Februar 2004, 17:50)


13

Sonntag, 1. Februar 2004, 20:27

Böses Forum! Vielen Dank für deine Mail, der Quelltext enthält jetzt nach dem Zitat keinen Umbruch mehr. Nach dem Autor ist aber immer noch ein Umbruch im Quelltext zu finden. Könnte man den auch noch irgendwie wegbekommen?

Momentan sieht's so aus:

Quellcode

1
2
<cite>&bdquo;In der Politik geht es nicht darum, recht zu haben, sondern recht zu behalten.&ldquo;<span>Konrad Adenauer
</span></cite> 

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DukeXP« (1. Februar 2004, 20:29)


14

Montag, 2. Februar 2004, 18:15

Hi.
Anstatt diesem

PHP-Quelltext

1
2
3
4
5
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
   print "&bdquo;$text[$i]&ldquo;";
  }
  print "<span>$author</span>";

versuchs mal damit:

PHP-Quelltext

1
2
3
4
5
6
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
   print "&bdquo;$text[$i]&ldquo;";
  }
 chomp $author;
  print "<span>$author</span>";


wenn das nicht geht, dann sag Bescheid und du bekommst wieder eine Mail ;)

MfG MaMo

15

Montag, 2. Februar 2004, 22:51

Jetzt sind wieder beide Umbrüche im Quelltext ... ?(

16

Dienstag, 3. Februar 2004, 16:18

Hi.
Klar, weil wahrscheinlich der Code aus der Email da jetzt nichtmehr drin steht oder? Der muss natürllich mit rein. ich gehe bei neuen Codes die ich poste immer vom Original aus, nicht vom veränderten.
MfG MaMo

17

Dienstag, 3. Februar 2004, 16:26

Wenn ich die Änderung an der Original-Datei vornehme gibt's einen Serverfehler.

Momentan sieht's so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
} else {
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
   print "&bdquo;$text[$i]&ldquo;";
  }
 chomp $author;
  print "<span>$author</span>"; 

  print "</cite>\n";
}
exit(0);


Mit dem Code aus der E-Mail sieht's so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
} else {
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
$text[$i] =~ s/^\s{0,}(.+?)\s{0,}$/$1/g;
   print "&bdquo;$text[$i]&ldquo;";
  }
 chomp $author;
  print "<span>$author</span>"; 
  print "</cite>\n";
}
exit(0);


Ich hab' keine Ahnung, was ich da eigentlich mache ... :(

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DukeXP« (3. Februar 2004, 16:31)


18

Dienstag, 3. Februar 2004, 16:56

Zitat


Wenn ich die Änderung an der Original-Datei vornehme gibt's einen Serverfehler.
Richtige CHMODs?

Zitat


Mit dem Code aus der E-Mail sieht's so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
} else {
  print "<cite>";
  for ($i=0;$i<$l;$i++) {
$text[$i] =~ s/^\s{0,}(.+?)\s{0,}$/$1/g;
   print "&bdquo;$text[$i]&ldquo;";
  }
 chomp $author;
  print "<span>$author</span>"; 
  print "</cite>\n";
}
exit(0);


Hmm... so sollte es hinterher auch in der editierten Originaldatei aussehen.
Setze zur Fehleranalyse mal unter "#!/usr/bin/perl" dieses:

PHP-Quelltext

1
2
# Fehler an den Browser ausgeben
use CGI::Carp qw(fatalsToBrowser);

Ausserdem veruche es mal anstatt mit chomp mit chop.
Dann sag mal Bescheid was dann kommt.

Zitat

Ich hab' keine Ahnung, was ich da eigentlich mache ... :(

Wenns richtig läuft erkläre ich es ok?
Chomp ist im Grunde fürs enbtfernen des Zeilenendes gedacht (\n).
der andere Code löscht alle Leerzeichn am Anfang und am Ende des Strings.

MfG MaMo

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MaMo« (3. Februar 2004, 16:57)


19

Dienstag, 3. Februar 2004, 18:59

"chop" hatte keine Wirkung, auch die Fehlermeldung wurde nicht im Browser ausgegeben, im Errorlog findet sich aber folgende Meldung: [Tue Feb 3 18:57:24 2004] [error] [client 212.144.168.171] malformed header from script. Bad header=<cite>„Lasst jedermann d: /home/earolusr/public_html/cgi-bin/zitate/zitate.pl

Edit: CHMOD passt (755)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DukeXP« (3. Februar 2004, 19:01)


20

Dienstag, 3. Februar 2004, 19:17

Hi.
Gucke mal ob in dem Script in der Näche der Änderungen sowas wie print "Content-type: text/html\n\n"; steht ansonsten schreibe das mal über

print "<cite>";
for ($i=0;$i<$l;$i++) {

PS:
1. Sag mal bitte die genaue URL zum Script (nicht .shtml)
2. Was ist eigentlich an den " " bzw. den Zeilenumbrüchen so schlimm?
3. Wenn du mir kurz FTP Acces o.ä. geben würdest, könnte ich dir das auch kurz zusammenbauen ;)

MfG MaMo

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MaMo« (3. Februar 2004, 19:21)