[erledigt]Probleme File Upload, Formularwert leer
Eingetragen von Naerk (13)
am 18.10.2009 - 18:08 Uhr in
am 18.10.2009 - 18:08 Uhr in
Hallo,
entwickle derzeitig ein eigenes Drupal Modul, wo man mittels eines Formulares ein File hochladen kann. Der Code hierfür ist grundsätzlich klar. Mein Problem besteht nun darin, dass der Wert des Formular Feldes für das File nach dem abschicken leer ist. Verstehe einfach nicht wo mein Fehler liegt.
Nach der Auswahl eines Files und dem Abschicken des Forms ist die Ausgabe von $form_state:
Array
(
[storage] =>
[submitted] => 1
[values] => Array
(
[test] => dfgdfg
[upload] =>
[op] => Datei hochladen
[submit] => Datei hochladen
...
Nachfolgend der Code:
function test_file() {
return drupal_get_form('test_form');
}
function test_form_submit($form, &$form_state) {
echo "<pre>";print_R($form_state);echo "</pre>";
}
function test_form_validate($form, &$form_state) {
echo "<pre>";print_R($form_state);echo "</pre>";
}
function test_form() {
$form['#attributes']['enctype'] = 'multipart/form-data';
$form['test'] = array(
'#type' => 'textfield',
'#title' => t('test'),
'#required' => TRUE
);
$form['upload'] = array(
'#type' => 'file',
'#title' => t('Datei auswaehlen'),
'#required' => TRUE
);
$form['submit'] = array('#type' => 'submit', '#value' => t('Datei hochladen'));
return $form;
}
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich frage mich gerade, wieso
am 19.10.2009 - 08:40 Uhr
Ich frage mich gerade, wieso du ein eigenes Upload Modul schreiben möchtest. Dies ist schon im Kern von Drupal enthalten und müsste nur noch aktiviert werden.. Dies kannst du auf der Modulübersichtsseite mit 2 Klicks aktivieren ;)..
Pfad zur Modulseite:
admin/build/modules
upload
am 19.10.2009 - 08:38 Uhr
Hallo.
Du möchtest das (Kern-)Modul upload nachbauen? Hm.
Notfalls kannst Du in gerade erwähntem Modul nachschauen, wie das dort gelöst ist.
Stefan
--
sei nett zu Deinem Themer
Hallo, danke für die
am 19.10.2009 - 08:47 Uhr
Hallo,
danke für die Hinweise. Habe auch dort schon in dem Modul geschaut. Ich baue ein eigenes Upload Modul, da dies aufgrund der Projektanforderungen erforderlich ist.
Aber nochmal zu meinem Problem. Mein Code generiert ein Formular, was auch den richtigen "enctype" hat. Fülle ich nun die beiden Formularfelder aus, so kommt der Wert des Textfeldes an, der des Upload Feldes ist aber leer. Das verstehe ich nicht... Ist ein Fehler in dem Code?
Zitat: Du möchtest das
am 19.10.2009 - 09:37 Uhr
Du möchtest das (Kern-)Modul upload nachbauen? Hm.
Wenn ich mich recht ertsinne ist das Upload-Modul dafür vorgesehen Dateien an Nodes anzuhängen. Man müsste also für jeden Upload ein Node erstellen um etwas hochzuladen. Ich wage zu behaupten, dass es Situationen gibt, in denen man etwas hochladen möchte, ohne einen Node zu erstellen. aber egal, back to Topic ...
Das Formular sieht eigentlich richtig aus. Ich würd mal die Submit-Funktion vervollständigen und gucken, ob die Datei hochgeladen wird, also ungefähr so:
<?php
if($file = file_save_upload('upload', $validators = array(),
$upload_path, $replace = FILE_EXISTS_RENAME))
{
file_set_status($file, FILE_STATUS_PERMANENT);
drupal_set_message("Upload erfolgreich");
} else
{
drupal_set_message("Fehler beim Upload", 'error');
}
?>
Ich möchte eine Datei gar
am 19.10.2009 - 09:52 Uhr
Ich möchte eine Datei gar nicht an ein Node anhängen. Diese soll einfach hochgeladen und der Pfad in einer seperaten Datenbank Tabelle abgelegt werden. Deswegen verwende ich auch nicht das Upload Modul.
Das Vervollständigen des Formulares löst mein Problem leider nicht. Der Vorgang geht nicht weiter als test_form_validate(), da (siehe Array) das Feld "upload" leer ist und somit die Validierung dieses required Fields fehlschlägt.
hmmm das einzige was ich in
am 19.10.2009 - 10:15 Uhr
hmmm das einzige was ich in meinem Upload-Modul anders hab als du ist, dass ich statt
<?php
$form['#attributes']['enctype'] = 'multipart/form-data';
?>
einen Array übergebe, nämlich so
<?php
$form['#attributes'] = array('enctype' => "multipart/form-data");
?>
aber daran kanns ja eigentlich nicht liegen. Is ja beides prinzipiell das selbe.
$_FILES
am 19.10.2009 - 10:35 Uhr
Hochgeladene Dateien werden nicht in
$form
oder$form_state
gespeichert, sondern in der globalen Variable$_FILES
.Siehe dazu auch die Umsetzung in den Funktionen upload_node_form_submit und file_save_upload.
hth,
Stefan
--
sei nett zu Deinem Themer
klingt logisch. Danke für
am 19.10.2009 - 10:44 Uhr
klingt logisch. Danke für die Hilfe, jetzt funktioniert es.