Formular mit Text- und Datei-Inhalten
Andi
- php
0 Felix Riesterer0 andi
Hallo,
ich habe ein Formular gebaut, dessen Inhalte in eine mySQL-DB eingetragen werden sollen. Mit reinem Text klappt das alles auch sehr gut.
Nun soll aber auch eine Datei mit diem Formular hochgeladen werden. In der Endversion soll es dann so sein, dass mittels PHP die Datei in ein best. Verzeichnis kopiert und umbenannt wird und dieser neue Name in die DB eingetragen wird.
Es scheitert derzeit leider schon am upload. Da ich ja eine Datei hochladen will, habe ich im <form>-tag enctype auf "multipart/form-data" gesetzt.
Seit dem kommen die ganzen Text-Infos nicht mehr im Bearbeitungs-Skript an. Woran könnte das liegen? Hier mein skript:
<form action="entry.php?ref=post" enctype="multipart/form-data" method="post">
<table>
<tr><td>Titel:</td><td><input name="title" type="text" size="30" maxlength="30"></td></tr>
<tr><td>Autor:</td><td><input name="author" type="text" size="30" maxlength="40"></td></tr>
<tr><td>Datei:</td><td><input name="myfile" type="file" size="30" maxlength="100000""></td></tr>
<tr><td><input type="submit" value="Absenden"></td><td><input type="reset" value="Zurücksetzen"></td></tr>
</table>
</form>
Leider kommt von dem ganzen Text nix an, was IMO an dem multipart/form-data liegt.
Jemand eine Idee?
danke
andi
Lieber Andi,
<form action="entry.php?ref=post" enctype="multipart/form-data" method="post">
<table>
<tr><td>Titel:</td><td><input name="title" type="text" size="30" maxlength="30"></td></tr>
<tr><td>Autor:</td><td><input name="author" type="text" size="30" maxlength="40"></td></tr>
<tr><td>Datei:</td><td><input name="myfile" type="file" size="30" maxlength="100000""></td></tr><tr><td><input type="submit" value="Absenden"></td><td><input type="reset" value="Zurücksetzen"></td></tr>
</table>
</form>Leider kommt von dem ganzen Text nix an, was IMO an dem multipart/form-data liegt.
bitte sei doch so gut und probiere einmal folgendes:
echo "<pre>Server erhielt folgende Daten: \n";
echo 'GET: '.print_r($_GET, true);
echo 'POST: '.print_r($_POST, true);
echo 'FILES: '.print_r($_FILES, true);
echo "</pre>\n";
Lasse diesen Code ausführen, wenn Dein Formular vom Server beantwortet werden soll. Mit den Angaben wirst Du weiter kommen (müssen)!
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
danke für Deine Antwort
Lieber Andi,
<form action="entry.php?ref=post" enctype="multipart/form-data" method="post">
<table>
<tr><td>Titel:</td><td><input name="title" type="text" size="30" maxlength="30"></td></tr>
<tr><td>Autor:</td><td><input name="author" type="text" size="30" maxlength="40"></td></tr>
<tr><td>Datei:</td><td><input name="myfile" type="file" size="30" maxlength="100000""></td></tr><tr><td><input type="submit" value="Absenden"></td><td><input type="reset" value="Zurücksetzen"></td></tr>
</table>
</form>Leider kommt von dem ganzen Text nix an, was IMO an dem multipart/form-data liegt.
bitte sei doch so gut und probiere einmal folgendes:
echo "<pre>Server erhielt folgende Daten: \n";
echo 'GET: '.print_r($_GET, true);
echo 'POST: '.print_r($_POST, true);
echo 'FILES: '.print_r($_FILES, true);
echo "</pre>\n";
>
> Lasse diesen Code ausführen, wenn Dein Formular vom Server beantwortet werden soll. Mit den Angaben wirst Du weiter kommen (müssen)!
Ergebnis:
Server erhielt folgende Daten:
GET: Array
(
[ref] => post
)
POST: Array
(
)
FILES: Array
(
)
Das hilft mir nur leider so gar nicht weiter... :)
Lieber andi,
Ergebnis:
Server erhielt folgende Daten:
GET: Array
(
[ref] => post
)
POST: Array
(
)
FILES: Array
(
)
das überrascht mich! Ich habe mir zu Testzwecken extra eine Datei namens entry.php gebaut, die ich auf meinem lokalen Apachen ausgeführt habe. Hier der Code von "entry.php":
<?php
echo "<pre>Server erhielt folgende Daten: \n";
echo 'GET: '.print_r($_GET, true);
echo 'POST: '.print_r($_POST, true);
echo 'FILES: '.print_r($_FILES, true);
echo "</pre>\n";
?>
<html><head><title>Test-form</title></head><body>
<form action="entry.php?ref=post" enctype="multipart/form-data" method="post">
<table>
<tr><td>Titel:</td><td><input name="title" type="text" size="30" maxlength="30"></td></tr>
<tr><td>Autor:</td><td><input name="author" type="text" size="30" maxlength="40"></td></tr>
<tr><td>Datei:</td><td><input name="myfile" type="file" size="30" maxlength="100000""></td></tr>
<tr><td><input type="submit" value="Absenden"></td><td><input type="reset" value="Zurücksetzen"></td></tr>
</table>
</form>
</body></html>
Das Testen verlief auf Anhieb sehr erfolgreich, sodass ich Dein Ergebnis beim besten Willen nicht nachvollziehen kann. Welchen Browser hast Du eingesetzt? Wo kann man das mal selbst online testen?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo
Das Testen verlief auf Anhieb sehr erfolgreich, sodass ich Dein Ergebnis beim besten Willen nicht nachvollziehen kann. Welchen Browser hast Du eingesetzt? Wo kann man das mal selbst online testen?
Ich teste das Ganze lokal. Hab xampplite installiert.
in der php.ini ist register_globals = On falls das wichtig ist...
Was wird denn bei Dir ausgegeben?
gruß, andi
Ich teste das Ganze lokal. Hab xampplite installiert.
in der php.ini ist register_globals = On falls das wichtig ist...
Das sollte eigentlich alles kein Problem bereiten...
Was wird denn bei Dir ausgegeben?
Ok. Hier so eine Beispiel-Ausgabe:
Server erhielt folgende Daten:
GET: Array
(
[ref] => post
)
POST: Array
(
[title] => Test-Titel
[author] => Test-Autor
)
FILES: Array
(
[myfile] => Array
(
[name] => download.gif
[type] => image/gif
[tmp_name] => C:\WINDOWS\TEMP\php5.tmp
[error] => 0
[size] => 2679
)
)
Was erhälst Du, wenn Du nach der Zeile mit den FILES noch ein
echo 'SERVER. '.print_r($_SERVER, true);
hinzufügst?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Ich teste das Ganze lokal. Hab xampplite installiert.
in der php.ini ist register_globals = On falls das wichtig ist...Das sollte eigentlich alles kein Problem bereiten...
Was wird denn bei Dir ausgegeben?
Ok. Hier so eine Beispiel-Ausgabe:
Server erhielt folgende Daten:
GET: Array
(
[ref] => post
)
POST: Array
(
[title] => Test-Titel
[author] => Test-Autor
)
FILES: Array
(
[myfile] => Array
(
[name] => download.gif
[type] => image/gif
[tmp_name] => C:\WINDOWS\TEMP\php5.tmp
[error] => 0
[size] => 2679
))
>
> Was erhälst Du, wenn Du nach der Zeile mit den FILES noch ein
> `echo 'SERVER. '.print_r($_SERVER, true);`{:.language-php}
> hinzufügst?
>
> Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),
>
> Felix Riesterer.
Ich sehe gerade, dass der upload mit GIF oder JPG funktioniert. Nehm ich ein MP3-file geht es komischerweise nicht. Aber genau dafür brauch ich das skript. Woran könnte das liegen?
danke, andi
echo $begrüßung;
Ich sehe gerade, dass der upload mit GIF oder JPG funktioniert. Nehm ich ein MP3-file geht es komischerweise nicht. Aber genau dafür brauch ich das skript. Woran könnte das liegen?
Möglicherweise an der Dateigröße und der standardmäßig eingestellten Maximalgröße für POST-Daten oder File-Uploads oder beidem. Beachte bitte das Handbuch-Kapitel Handling file uploads.
echo "$verabschiedung $name";
echo $begrüßung;
Ich sehe gerade, dass der upload mit GIF oder JPG funktioniert. Nehm ich ein MP3-file geht es komischerweise nicht. Aber genau dafür brauch ich das skript. Woran könnte das liegen?
Möglicherweise an der Dateigröße und der standardmäßig eingestellten Maximalgröße für POST-Daten oder File-Uploads oder beidem. Beachte bitte das Handbuch-Kapitel Handling file uploads.
echo "$verabschiedung $name";
Hallo, super Tipp, danke!
Kleine mp3s funktonieren tatsächlich, sobald die Größe über 16MB liegt, klappt es nicht mehr.
Ich habe also die php.ini folgendermaßen editiert:
; Maximum size of POST data that PHP will accept.
post_max_size = 100M
(alt: 16M)
; Maximum allowed size for uploaded files.
upload_max_filesize = 90M
(alt: 16M)
memory_limit = 120M ; Maximum amount of memory a script may consume (8MB)
(alt: 16M)
Leider hat sich im Ergebnis nix geändert :( Sobald eine Datei über 16MB ist, klappts nicht mehr. Hab ich was übersehen?
Vielen Dank, Andi
Lieber Andi,
Ich habe also die php.ini folgendermaßen editiert:
hast Du diese php.ini auf Deinem lokalen Testsystem, oder auf Deinem Webserver online geändert? Wenn das Ganze einmal online gehen soll, dann hast Du eventuell keine Möglichkeit diesen Wert bei Deinem Webspace zu ändern...
memory_limit = 120M ; Maximum amount of memory a script may consume (8MB)
(alt: 16M)Leider hat sich im Ergebnis nix geändert :( Sobald eine Datei über 16MB ist, klappts nicht mehr. Hab ich was übersehen?
Vielleicht solltest Du auch noch die upload_max_filesize ändern...?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo
Ich habe also die php.ini folgendermaßen editiert:
hast Du diese php.ini auf Deinem lokalen Testsystem, oder auf Deinem Webserver online geändert? Wenn das Ganze einmal online gehen soll, dann hast Du eventuell keine Möglichkeit diesen Wert bei Deinem Webspace zu ändern...
Vielen Dank für den Tipp. Das skript soll allerdings lokal bleiben.
memory_limit = 120M ; Maximum amount of memory a script may consume (8MB)
(alt: 16M)Leider hat sich im Ergebnis nix geändert :( Sobald eine Datei über 16MB ist, klappts nicht mehr. Hab ich was übersehen?
Vielleicht solltest Du auch noch die upload_max_filesize ändern...?
öh, das hab ich ja!?
zitat aus vorherigem posting:
post_max_size = 100M
upload_max_filesize = 90M
memory_limit = 120M
Scheint nur nichts zu bewirken :-/
viele grüße
andi
Problem gelöst!!
Hallo,
ich hab gerade gemerkt, dass ich immer die falsche php.ini editiert habe. Und zwar die \xampplite\php\php.ini und nicht \xampplite\apache\bin
Sorry für die Verwirrung und vielen Dank für eure Unterstützung :-)
Schönes WE noch
Andi
echo $begrüßung;
ich hab gerade gemerkt, dass ich immer die falsche php.ini editiert habe. Und zwar die \xampplite\php\php.ini und nicht \xampplite\apache\bin
Die Ausgabe von phpinfo() führt im Kopf auf, welches die aktuelle(n) Konfigurationsdateien ist (bzw. sind), und kurz darunter die derzeit wirksamen Konfigurationseinstellungen.
echo "$verabschiedung $name";