form type=file problem!
| Autor | Nachricht |
|---|---|
|
Verfasst am: 12. 04. 2009 [18:57]
|
|
|
sefer
Themenersteller
Dabei seit: 26.03.2007
Beiträge: 175
|
Hi, ich habe ein Formular mit dessen Hilfe ich eine Datei hochladen will. Das hat bis vor kurzem auch funktioniert, aber dann habe ich meinen ganzen Code in Klassen umgestellt und jetzt geht es nicht mehr, obwohl ich am Formular nichts großartiges verändert habe. Standardmäßig muss ja ein <form> tag folgendermassen aufgebaut sein, damit dateien überhaupt gesendet werden können: HTML <form enctype="multipart/form-data" action="aktions.php" method="post"> <input type="file" name="tx_sdt3sportsfeadmin_pi1[image]" /> <input type="submit" value="Eigenes Profil speichern" /> </form> Das Problem ist, wenn ich als type=file wähle, dann wird mir die entsprechende [image] variable nicht mitübermittelt. Mache ich aber type=text dann ist alles OK. Was mache ich hier falsch? Vielen Dank, sefer In Original sieht die Ausgabe dann so aus: HTML <form enctype="multipart/form-data" class="tx_sdt3sportsfeadmin_pi1_klasse_form" action="index.php?id=2001&no_cache=1&tx_sdt3sportsfeadmin_pi1[mode]=teams&tx_sdt3sportsfeadmin_pi1[action]=_profile_Own_Edit_2" method="post"> <table class="tx_sdt3sportsfeadmin_pi1_klasse_table" align="left" cellspacing="5" cellpadding="3"> <colgroup width="" span="3"></colgroup> <tr> <td> Foto hochladen: [Max.: 600kb] [jpg,gif,bmp,png] </td> <td> <input type="hidden" value="700000" name="MAX_FILE_SIZE" /> <input type="file" name="tx_sdt3sportsfeadmin_pi1[image]" /> </td> </tr> <tr> <td></td> <td> <input type="hidden" name="tx_sdt3sportsfeadmin_pi1[mode]" value="teams" /> <input type="hidden" name="tx_sdt3sportsfeadmin_pi1[action]" value="_profile_Own_Save_2" /> <input type="submit" value="Eigenes Profil speichern" /> <a href="javascript:history.back()">>> zurück ohne zu speichern <<</a> </td> </tr> </table> </form> Und dies ist der zugehörige Quellcode:[Wobai die PHP-Formatierung nicht richtig dargestellt wird] PHP <?php $content.='<form enctype="multipart/form-data" class="'.$this-">plugin->prefixId.'_klasse_form" action="'.$this->plugin->pi_linkTP_keepPIvars_url ($overrulePIvars=array(),$cache=0,$clearAnyway=0, $altPageId=$GLOBALS['TSFE']->id).'" method="post"> <table class="'.$this-">plugin->prefixId.'_klasse_table" align="left" cellspacing="5" cellpadding="3" > <colgroup width="" span="3"></colgroup> <tr> <td> Foto hochladen: [Max.: 600kb] [jpg,gif,bmp,png] </td> <td> <input type="hidden" value="700000" name="MAX_FILE_SIZE" /> <input type="file" name="'.$this-" />plugin->prefixId.'[image]" /> </td> </tr> <tr> <td></td> <td> <input type="hidden" name="'.$this-" />plugin->prefixId.'[mode]" value="teams" /> <input type="hidden" name="'.$this-" />plugin->prefixId.'[action]" value="_profile_Own_Save_2" /> <input type="submit" value="Eigenes Profil speichern" /> '.$this->zurueck(' zurück ohne zu speichern ').' </td> </tr> </table> </form>'; ?> Mein aktuelles Projekt www.AMAFU.de: >>Ein Fussballportal für den Amatuer Bereich<<
Hier mein Spielerprofil als Video: www.youtube.com/watch?v=LffIdi-NrIA Mein System:-->Debian: 4.0 --> Typo3: 4.1.2 (aus YAML Komplettpaket)--> PHP Version 5.2.0-8+etch7 -->MYSQL: 5.0.32-Debian_7etch1 |
|
Verfasst am: 14. 04. 2009 [13:29]
|
|
|
danton
Dabei seit: 21.09.2006
Beiträge: 148
|
Hi Schalte mal im Install-Tool -> displayErrors auf 1 um zu sehen ob ein Fehler entsteht. Ist das Verzeichnis vorhanden und die Berechtigungen stimmen? Ich habe dazu folgendes gefunden. Vielleicht hilft es ja. lists.netfielders.de/pipermail/typo3-german/2009-January/054322.html Du könntest auch noch in einer Ext schauen die das auch nutzt Gruß Danton |
|
Verfasst am: 15. 04. 2009 [08:46]
|
|
|
sefer
Themenersteller
Dabei seit: 26.03.2007
Beiträge: 175
|
Hi danton, zunächst danke für die Antwort. Die Berechtigung für den Ordner lautet www-data:www-data. Dies war vor meinen Änderungen auch so und da hat es ja auch funtkioniert. Das Schließ ich erstmal aus. Install-Tool -> displayErrors auf 1 Es wurde nichts ausgegeben. Es scheint keinen Fehler zu geben. Ich habe mit: t3lib_div::debug($this->plugin->conf, 'conf'); t3lib_div::debug($this->plugin->piVars, 'piVars'); die entsprechenden Arrays ausgegeben und unten ist die Normal-Ausgabe dazu. Eigentlich muss man nur eins beachten und zwar ganz unten muss nach "description" meine "image" variable erscheinen, aber die wird gar nicht erst mitgesendet. Und hier bin ich ratlos!!! Danke! Sefer HTML conf
-----------------------------------------------
includeLibs typo3conf/ext/sd_t3sports_fe_admin/pi1/class.tx_sdt3sportsfeadmin_pi1.php
userFunc tx_sdt3sportsfeadmin_pi1->main
storage.
club 0
profile 0
competition 0
team 0
group 0
saison 0
miscellaneous 0
test {$plugin.tx_sdt3sportsfeadmin_pi1.test}
folder.
path_uploads_profile uploads/tx_sdt3sportsfeadmin/
piVars
--------------------------------
mode validate
action _profile_Own_Save
username demo
email user@local.de
first_name Hayri
last_name tesf
nickname
height 0
position
gender 0
nationality
birthday_day
birthday_month
birthday_year
native_town
home_town
summary
description Mein aktuelles Projekt www.AMAFU.de: >>Ein Fussballportal für den Amatuer Bereich<<
Hier mein Spielerprofil als Video: www.youtube.com/watch?v=LffIdi-NrIA Mein System:-->Debian: 4.0 --> Typo3: 4.1.2 (aus YAML Komplettpaket)--> PHP Version 5.2.0-8+etch7 -->MYSQL: 5.0.32-Debian_7etch1 |
|
Verfasst am: 15. 04. 2009 [10:10]
|
|
|
danton
Dabei seit: 21.09.2006
Beiträge: 148
|
hi habe mal den googel bemüht. das prob gibts schon öfters. landet den die datei im ordner? ist die dateigröße(upload-file) zu groß? www.typo3forum.net/forum/typo3-4-x-backend/25118-mailform-dateitransfer-datei-email-beilage-zugef-gt.html blog.bluehands.de/blogs/index.php?blog=6&title=typo3_form_mail_attachment_max_size&more=1&c=1&tb=1&pb=1 https://www.typo3-jack.net/typo3-german-lists-netfielders-de/18084-typo3-german-file-upload-extension.html hast du ne dateiendung(upload-file) die typo3 per default nicht mag? schau dir doch mal folgende ext. an. typo3.org/extensions/repository/view/fileupload/current/ ansonsten wenn du schreibst es ging vorher schon dann muß es ein fehler bei dir sein oder das du ne andere/neue funktion nutzt die vielleicht anderst funzt. gruß danton |
|
Verfasst am: 15. 04. 2009 [11:47]
|
|
|
sefer
Themenersteller
Dabei seit: 26.03.2007
Beiträge: 175
|
Hi Danton, du hast mich auf einen bestimmten Trichter gebracht und nun hab ich es gefunden. Ich weiss nicht warum, aber die variable 'image' wird nicht in piVars angezeigt. Hierfür muss man immer in '$_FILES' nachgucken. Bei mir sieht dass dann so aus: $_FILES[$this->plugin->prefixId]['name']['image']. Erst durch: t3lib_div::debug($_FILES, '$_FILES'); Kann man sehen, ob die Datei hochgeladen wurde oder nicht. Die anderen Überprüfungen wegen: -mime -Dateigröße muss man dann entsprechend wie Danton es schreibt nochmal überprüfen und natürlich auch die Dateirechte im Verzeichnis!!! Fazit: bei Formularen, die Dateien hochladen sollen, dies immer so machen: <form enctype="multipart/form-data" action="aktions.php" method="post"> .. </form> und die übertragenen Daten per: t3lib_div::debug($_FILES, '$_FILES'); überprüfen! Vielen Dank, Sefer und dier falls es jemanden interessiert meine Funktion, auch wenn es etwas wirr ist: PHP <php?
function _profile_Own_Save_Image(){
//t3lib_div::debug($this->plugin->piVars, 'PI_VARS');
//t3lib_div::debug($_FILES, '$_FILES');
//t3lib_div::debug($this->plugin->conf, 'this->conf');
$FeUserId = $GLOBALS['TSFE']->fe_user->user['uid'];
// Remove avatar. This does not remove the actual image file, but sets the
// avatar field in the user record to empty.
if ($this->plugin->piVars['delete_image']) {
$updateArray['image'] = '';
$GLOBALS['TYPO3_DB']->exec_UPDATEquery('fe_users','uid='.$FeUserId,$updateArray);
//$this->remove_avatar($FeUserId);//dies ist in mm_forum_pi5
}
// Die erlaubten MIME-Typen
$mimes = array();
$mimes['image/pjpeg'] = ".jpg";
$mimes['image/jpeg'] = ".jpg";
$mimes['image/gif'] = ".gif";
$mimes['image/bmp'] = ".bmp";
$mimes['image/tiff'] = ".tif";
$mimes['image/png'] = ".png";
//$type wird nur gefüllt, wenn eine der oberen mime_typen hochgeladen wurde
$type=$mimes[$_FILES[$this->plugin->prefixId]['type']['image']];
//t3lib_div::debug($_FILES, '$_FILES');
//error=2 , wenn die datei zu groß ist!
if ($_FILES[$this->plugin->prefixId]['error']['image']=='2') $content.='<br>Die Datei ist zu groß, deshalb wurde sie nicht gespeichert!!!';
//Nur wenn eine Datei ausgewählt wurde [image] und diese den obigen mime-typen enstpricht[$type], dann wird die datei gespeichert
if ($_FILES[$this->plugin->prefixId]['name']['image']) {
if (!$type) $content.='<br>Der Mime-Type stimmt nicht!!!';
//$uploaddir = "uploads/tx_sdt3sportsfeadmin/";
$uploaddir = $this->plugin->conf['folder.']['path_uploads_profile'];
//echo $uploaddir.'<br>';
//Endung ermitteln
$file = 'fe_users.uid_'.$FeUserId.'_'.time().$type;
$uploadfile = $uploaddir.$file;
//echo $file.'<br>';
//echo $uploadfile;
//t3lib_div::debug($file, '$file');
//t3lib_div::debug($uploadfile, '$uploadfile');
//t3lib_div::debug($_FILES, '$_FILES');
//Die Funktion "move_uploaded_file" kopiert die hochgeladene Datei aus dem
//Standard Temp-Ordner an den gewünschten Platz "$uploadfile"
if (move_uploaded_file($_FILES[$this->plugin->prefixId]['tmp_name']['image'], $uploadfile)) {
//Dieses 'image' in $updateArray['image'] ist die Bezeichnung des Tabellenfeldes in fe_users
$updateArray['image'] = $file; //Alternativ: $updateArray = array('image' => $file);
$GLOBALS['TYPO3_DB']->exec_UPDATEquery('fe_users','uid='.$FeUserId,$updateArray);
$upload_ok = true;
//echo '<br>Dein Bild wurde gespeichert!';
} else {
$upload_ok = false;
//echo '<br>Dein Bild wurde NICHT gespeichert!';
}
}
return $content;
}
?> Mein aktuelles Projekt www.AMAFU.de: >>Ein Fussballportal für den Amatuer Bereich<<
Hier mein Spielerprofil als Video: www.youtube.com/watch?v=LffIdi-NrIA Mein System:-->Debian: 4.0 --> Typo3: 4.1.2 (aus YAML Komplettpaket)--> PHP Version 5.2.0-8+etch7 -->MYSQL: 5.0.32-Debian_7etch1 |



