hallo rolf,
ich habe alles aus der bib genommen und entsprechend die felder angepaßt.
der upload funktioniert und wird auch im verz. files gespeichert.
die zwischenspeicherung funktioniert auch.
lediglich die speicherung in der original-db funktioniert nicht.
nachfolgend die templates.
danke
tini
aufruftemplate:
===============
<perl>
$dborginal="/domain/upload/bilder";
# Die ID des Datensatzes zu dem das Bild gespeichert werden soll.
$dbid="$fotoid" if ($_get{dbid} eq "");
# Name des Dateifeldes der Originaldatenbank
$dbdf="$datei" if ($_get{dbdf} eq "");
# Name des Textfeldes in der Original Datenbank für den umgewandelten Dateinamen.
$dbnf="$titel" if ($_get{dbnf} eq "");
# Pfad des Templats mit dem Upload File
$src="/domain/upload/upload";
</perl>
<include src=$src>
<perl>
&upfile if ($cmd eq "upfile");
</perl>
=============================================================
upload-template:
================
<perl>
sub upfile {
# Datenbank zum Bild zwischenspeichern
$dbbild="/domain/upload/bild";
$up_schleife="&dborginal=$dborginal&dbid=$dbid&dbdf=$dbdf&dbnf=$dbnf";
$erlaubte_dateitypen = "gif|jpg|png|GIF|JPG|PNG";
$filemax="100000"; # entspricht 100 Kb
$vormax="500"; # entspricht 500 pixel
$f_link="http://www.domain/files";
$maxg=$filemax/1000; # Umrechnen der Byts in Kb
out "<div align=center>";
out "<table bgcolor='#000000' width='550' cellspacing='1' cellpadding='4' border='0'>";
out "<tr bgcolor='#e0e0e0'><td colspan=2 align='center'>";
out "<font face='Verdana, Arial' size='3' color='#000099'><b>FOTO UPLOAD</b></font>";
out "</td></tr>";
# Aufruf des Formulars wenn neues Foto oder anderes Foto gewünscht
# Wenn ein anderes Bild gewünscht wird erst das alte Bild löschen
if ($_put{up_Id} ne "")
{
mod "Id==$_put{up_Id}",["bild","","_filec_bild","1"],"$dbbild";
del "Id==$_put{up_Id}",$dbbild;
}
# dann das Formular zu upload ausgeben.
&formularfile();
}
# ---- Ende neues / anders Bild -------------- #
# ---- Wenn ein Bild gewählt und überprüft wurde zum Orginal Datensatz hinzufügen.
if ($up_cmd eq putbild)
{
get "Id==!$_put{up_Id}",$dbbild;
mod "Id==!$dbid",["$dbdf","$bild","_filec_bild","2","$dbnf","$bild_name"],"$dborginal";
del "Id==$_put{up_Id}",$dbbild;
# ---- Meldung ausgeben. Wer möchte kann hier auch noch ne Mail verschicken ---- #
out "<tr bgcolor='#f4f4f4'><td align='center' colspan='2'>";
out "<b>Ihr Foto wurde gespeichert und ist nun verfügbar.<br>Vielen Dank!</b>";
out "</td></tr>";
}
# ---- Ende Eintrag Orginal Datenbank ---- #
# ---- Wenn das Formular abgschickt wurde Datei speichen/überprüfen und Meldung ausgeben.
if ($up_cmd eq vorschau)
# Überprüfen und Umwandeln von Sonderzeichen
$bild1 =~ s/(\W)/sprintf("%%%02X",ord($1))/ge;
$bild1 =~ s/%2E/./g;
# Zwichenspeichern der Datei
put ["bild", $_put{up_bild}, "bild_name", $bild1],"$dbbild";
get "bild_name==!$bild1",$dbbild;
# Überprüfen ob es eine zugelassene Dateiendung ist, wenn nicht Datei und Eintrag in db löschen.
if($bild !~ /.($erlaubte_dateitypen)/)
{
out "<tr bgcolor='#f4f4f4'><td align='center' colspan='2'>";
out "<font color='#cc0000'>Sie haben eine ungültige Datei ausgewählt.</br>";
out "Bitte wählen Sie ein Foto im Format $erlaubte_dateitypen aus.</font>";
out "</tr></td>";
mod "Id==$Id",["bild","","_filec_bild","1"],"$dbbild";
del "Id==$Id","$dbbild";
&formularfile();
} else {
# Wenn Dateiendung richtig, dann Datei hohlen und größe in Kb errechnen
$x=get "$f_link/$bild_name";
$dateig=length($x)/1000;
$dateigaus=sprintf('%.2f',$dateig); # auf 2 nachkommastellen
# Wenn die Datei die max. Dateigröße überschreitet, Datei und Eintrag in db löschen.
if (length($x) > $filemax)
{
out "<tr bgcolor='#f4f4f4'><td align='center' colspan='2'>";
out "<font color='#cc0000'>Das von ihnen gewählte Foto hatt $dateigaus Kb und ist somit zu groß.</br>";
out "Es können nur Fotos gespeichert werden die max. $maxg Kb nicht überschreiten.</font>";
mod "Id==$Id",["bild","","_filec_bild","1"],"$dbbild";
del "Id==$Id",$dbbild;
out "</td></tr>";
&formularfile();
} else {
# Wenn Dateigröße und Endung Ok, dann Bild als Vorschau mit breite, höhe und Größe in Kb ausgeben
$name1="$bild_name";
@name = split(/\./,$name1);
if ($name[1] eq "gif" or $name[1] eq "GIF")
{
my($w,$h)=&gifsize($x);
$wout="</td></tr><tr bgcolor='#f4f4f4'><td align='left' colspan='2'>Breite: <b>$w</b> - Höhe: <b>$h</b>";
$w_out=$w;
$h_out=$h;
} elsif ($name[1] eq "jpg" or $name[1] eq "JPG") {
my($w,$h)=&jpegsize($x);
$wout="</td></tr><tr bgcolor='#f4f4f4'><td align='left' colspan='2'>Breite: <b>$w</b> - Höhe: <b>$h</b>";
$w_out=$w;
$h_out=$h;
} elsif ($name[1] eq "png" or $name[1] eq "PNG") {
my($w,$h)=&pngsize($x);
$wout="</td></tr><tr bgcolor='#f4f4f4'><td align='left' colspan='2'>Breite: <b>$w</b> - Höhe: <b>$h</b>";
$w_out=$w;
$h_out=$h;
} else {
out "";
}
if ($w_out > $vormax) {
$h_out=$h_out/$w_out*$vormax;
$w_out=$vormax;
}
out "<tr bgcolor='#f4f4f4'><td align='left' colspan=2>";
out "Foto Name: <b>$bild</b>";
out "</td></tr><tr bgcolor='#f4f4f4'><td align='center' colspan=2>";
out "<img src='$f_link/$bild_name' width=$w_out height=$h_out alt='Vorschaubild $bild Breite $w_out Höhe $h_out'>";
out "</td></tr><tr bgcolor='#f4f4f4'><td align='left' colspan='2'>";
out "<b>Fotoeigenschaften:</b>";
out "$wout";
out "</td></tr><tr bgcolor='#f4f4f4'><td align='left' colspan='2'>";
out "Dateigrösse: <b>$dateigaus Kb</b>";
out "</td></tr>";
out "<FORM name='bn' ACTION='http://www.domain/baseportal.pl?htx=$htx&cmd=upfile$up_schleife' METHOD='post' ENCTYPE='multipart/form-data'>";
out "<INPUT TYPE='hidden' NAME='htx:=' value='$htx'>";
out "<INPUT TYPE='hidden' NAME='up_Id:=' value='$Id'>";
out "<tr bgcolor='#f4f4f4'><td align='center' walign='center' nowrap>";
out "<INPUT TYPE='submit' NAME='Submit' VALUE='Ein anderes Foto wählen'></form>";
out "</td>";
out "<FORM name='bs' ACTION='http://www.domain/baseportal.pl?htx=$htx&cmd=upfile$up_schleife' METHOD='post' ENCTYPE='multipart/form-data'>";
out "<INPUT TYPE='hidden' NAME='up_cmd:=' value='putbild'>";
out "<INPUT TYPE='hidden' NAME='htx:=' value='$htx'>";
out "<INPUT TYPE='hidden' NAME='up_Id:=' value='$Id'>";
out "<input type='hidden' name='_filec_bild=' value=2>";
out "<td align='center' walign='center' nowrap>";
out "<INPUT TYPE='submit' NAME='Submit' VALUE='Dieses Foto speichern'></form>";
out "</td></tr>";
}
}
# Hier die subs zum errechenen der Breite und Höhe
sub formularfile {
out <<EOF;
<BODY>
<FORM ACTION="http://www.domain/baseportal.pl?cmd=upfile&htx=$htx$up_schleife" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="hidden" NAME="up_cmd:=" value="vorschau">
<INPUT TYPE="hidden" NAME="htx:=" value="$htx">
<input type="hidden" name="_filec_bild=" value=2>
<tr bgcolor="#f4f4f4">
<td><font face="Verdana, Arial" size="2"><b>Foto auswählen</b></font></td>
<td><INPUT TYPE="file" NAME="up_bild:=">
</td></tr><tr bgcolor="#f4f4f4">
<td colspan=2 align="center"><font face="Verdana, Arial" size="1">Es können nur Fotos im Format $erlaubte_dateitypen<br>mit einer max. Größe von $maxg Kb gespeichert werden.</font>
</td></tr><tr bgcolor="#f4f4f4">
<td colspan="2" align="center">
<INPUT TYPE="submit" NAME="Submit" VALUE="Foto Vorschau">
</td></tr>
</FORM>
</BODY>
EOF
}
sub gifsize {
my ($GIF)=@_;
my ($type,$a,$b,$c,$d,$s,$width,$height) ;
$type=substr($GIF,0,6);
if(!($type =~ m/GIF8[7,9]a/) || (length($s=substr($GIF, 6, 4))!=4) ){
return;
}
($a,$b,$c,$d)=unpack("C"x4,$s);
$width= $b<<8|$a;
$height= $d<<8|$c;
return ($width,$height);
}
sub jpegsize {
my ($JPEG)=@ _ ;
my ($count)=2 ;
my ($length)=length($JPEG) ;
my ($ch)="" ;
my ($c1,$c2,$a,$b,$c,$d,$width,$height) ;
while (($ch ne "\xda") && ($count<$length)) {
while (($ch ne "\xff") && ($count < $length)) {
$ch=substr($JPEG,$count,1);
$count++;
}
while (($ch eq "\xff") && ($count<$length)) {
$ch=substr($JPEG,$count,1);
$count++;
}
if ((ord($ch) >= 0xC0) && (ord($ch) <= 0xC3)) {
$count+=3;
($a,$b,$c,$d)=unpack("C"x4,substr($JPEG,$count,4));
$width=$c<<8|$d;
$height=$a<<8|$b;
return($width,$height);
} else {
($c1,$c2)= unpack("C"x2,substr($JPEG,$count,2));
$count += $c1<<8|$c2;
}
}
}
sub pngsize {
my $Buffer = shift;
my ($width,$height) = ( undef, undef );
if ($Buffer =~ /IHDR(.{8})/) {
my $PNG = $1;
($width,$height) = unpack( "NN", $PNG );
}
return ($width,$height);
}
}
out "</table></div>";
}
</perl>