wieder mal CGI und fileupload (teilweise klappt das schon aber im moment steh ic
Manuel Burghammer
- perl
tagchen,
ich hab noch ein kleines problemchen in PERL:
ich uebergebe ein (text)file an ein perl-script per
<input type="file" name="Datei" size="30">
<input type="submit" value="Upload starten">
<input type="Hidden" name="exec" value="upload">
<input type="Hidden" name="serv" value="write">
<input type="Hidden" name="session" value="1234567890ab">
dann lese ich ueber
$file=new CGI(\*STDIN);
die datei ein.......jetzt hab ich aber folgendes problem:
wie kann ich die ausgegebenen daten so zerlegen das ich die 'hidden' felder einzetln lesen kann???
mit $file->param('exec'); usw. klappt das nicht und bei einem $file->param(); krieg ich nur die textdatei und die hidden-files zusammengehaengt :o(
ich hab in der doku und auch im archiv nach laengerer recherche nix gefunden.....weiss jemand rat ???
thx4hlp
Hallo !
$file=new CGI(\*STDIN); # ?????
Versuch es einfach so :
$cgi = new CGI;
$file= $cgi->param("Datei");
$exec= $cgi->param("exec");
usw.
Nicht getestet, sollte aber klappen.
Gruß,
Kerki
tagchen,
danke, aber das klappt auch nicht....das problem ist ja das die variablennamen nirgends erscheinen :o(
und die doku gibt auch nix her dementsprechend....
Hallo!
Hmmm. ?
Wie sieht denn das zugehörige <Form>-Tag überhaupt aus ?
So wäre es schon nicht schlecht :
<form action="/cgi-bin/upload.pl" method=post enctype="multipart/form-data">
siehe <../../tchg.htm#a1>
Gruß,
kerki
hallo,
folgendes steht in meiner html-seite:
<form name="Upload" action="/cgi-bin/upload.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="Datei" size="30">
<input type="submit" value="Upload starten">
<input type="Hidden" name="exec" value="upload">
<input type="Hidden" name="serv" value="write">
<input type="Hidden" name="session" value="1234567890ab">
</form>
(den o.g. beitrag hab ich gelesen und so funktioniert das auch, nur mit dem CGI modul nicht)
so sieht das test-script aus:
#!/usr/bin/perl -w
use CGI;
$file = new CGI(\*STDIN);
print $file->header();
@names = $file->param(); # das hab ich aus der doku
print "<br><br>x-x-x-x-x--------"; # nur um optisch zu sehen wo das script grad ist
print $file->param("Datei"); # eben das funktioniert nicht :o(
print "<br><br>"; # dient wieder nur der uebersichtlichkeit
print @names; # hier gibt er mir schon alles aus, aber bei $name[x] halt jede zeile einzeln
print "<br><br>";
for ($count=0; $count<=20; $count++) {
print "<br><br>$names[$count] -- $count\n"; # hier hab ich nur versucht festzustellen wie die ausgabe aussieht
}
und eben das einzige problem das ich hab: wie kann ich die parameter (exec, datei, serv und session) EINZELN auswerten bzw lesen ??
ich muss irgendwie die session mit uebergeben weil die ganze benutzerfuehrung und das login mit session und ner mySQl datenbank funktionieren
hallo,
also ich hab mir mal das CGI-Modul angesehen. (Version 2.66)
Soweit ich das gesehen habe, wird 'multipart/formdata' nur behandelt, wenn bei 'new' _kein_ Filehandle oder Querystring übergeben wird.
So gesehen müßte es heißen:
----------- Start of script --------------------
use CGI;
$file = new CGI(); #ohne STDIN
print $file->header();
$filename = $file->param("Datei");
print "Dateiname = $filename\n";
print "<br><br>Start Dateiinhalt--------<br><pre>"; # nur um optisch zu sehen wo das script grad ist
print while(<$filename>);
print "</pre><br>ende Dateiinhalt-------<br>"; # dient wieder nur der uebersichtlichkeit
print "<br><br>Hier noch die Variablen in einer Liste:<br>";
@names = $file->param(); # das hab ich aus der doku
foreach my $name (@names)
{
print $name . '=' . $file->param($name) . "<BR>\n";
}
----------- End of script --------------------
hab ausprobiert, es funktioniert.
Das mit dem STDIN ist eigentlich nur zu testzwecken, wenn Du Dein script auf der shell ( od. Eingabeaufforderung) startest. Da kannst Du ddann auch interaktiv Parameter übergeben, ohne eine Webserver zu gebrauchen.
Außerdem gibts noch eine Möglichkeit, das ganze Query zwischenzuspeichern und dann wieder zu laden, das ist aber etwas für ganz spezielle Anwendungen.
Grüße
Klaus
hallo klaus,
is echt genial....genau so brauchte ich das.......
jetzt muss ich nur noch das teil analysieren und schaun wo ich den denkfehler hatte.....
danke dir :o))
hallo Maonuel,
jetzt muss ich nur noch das teil analysieren und schaun wo ich den denkfehler hatte.....
in der Zeile
$file = new CGI;
Klaus