Jutta Rosenbach: CGI: Daten in Datei schreiben, nicht am Ende sondern am ANFANG?

Beitrag lesen

Hallo Ihr lieben Tüftlerinnen und Tüftler,

heute nacht wurde ich freundlicherweise nochmal im Chat ermutigt, nun doch auch die Skript-Passagen hinzustellen, da ich nicht weiß, wie ich die Hilfen von Stefan und Frank umsetzen kann.

Der Chat besteht u.a. aus einer message.htm (in die dann die CGI's dynamisch was reinschreiben).  Nach jedem Refresch, also alle paar Sekunden müssen MSI-Nutzer sonst von Hand nach unten scrollen, wenn es nicht zu schaffen ist, neue Nachrichten immer oben erscheinen zu lassen.

Das Skript, das fürs Einloggen und die normalen Nachrichten zuständig ist, enthält solche Sachen wie:

read in the form data

&get\_form\_data;  

read in the old message file

open (HTMLOLD, "$file");  
@lines=<HTMLOLD>;  
close(HTMLOLD);  

open (NEW, ">$file");  
print NEW "HIER ENSTEHT DER HTML-DATEI\_KOPF\n";  
for ($i = 2; $i < 16; $i++)  
{  

print NEW "$lines[$i]";
}
print NEW "<b>$formdata{'username'}</B>";

if ($formdata{'message'} eq "Betritt den Chat")  
{  

print NEW ": ";
  print NEW "<i>Betritt den Chat</i>";
}
else
{
print NEW ": ";
print NEW ""$formdata{'message'}"";
}
print NEW "\n<p>\n";
close(NEW);

########################################

Add new Chatter

open (CHATTER, ">>$chatfile");  
print CHATTER " - $formdata{'username'}";  
close (CHATTER);  

########################################

initialize the message form after logon

print "HIER WIRD DIE EINGABEMASKE ZUM CHATTEN GEBASTELT. DIE MAN BRAUCHT, NACHDEM MAN SICH ANGEMELDET HAT\n";  
exit 0;  

########################################

subs

sub get_form_data {
$buffer = "";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$buffer);
foreach $pair (@pairs)
{
  @a = split(/=/,$pair);
  $name=$a[0];
  $value=$a[1];
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/~!/ ~!/g;
  $value =~ s/+/ /g;
  # $value =~ s/</&lt;/g;  # html tag removal (optional)
  # $value =~ s/>/&gt;/g;  # html tag removal (optional)
  $value =~ s/\r//g;
  push (@data,$name);
  push (@data, $value);
}
%formdata=@data;
%formdata;
}

Das Skript fürs Ausloggen sieht ähnlich aus.

Über Hilfe würde ich mich sehr freuen
Viele Grüße
Jutta