Hallo!
Ich habe mir gerade ein Formular mit der Funktion FORM($conf,$formData='') erstellt. Klappt auch alles super. Die eingegebenen Daten werden in die entsprechenden Datenbankfelder geschrieben. Das einzige was nicht funktioniert ist der Fileupload!!! Ich habe mir die API angeschaut, "gegooglet" und in diesem Forum nach einer Lösung gesucht, habe bisher nichts gefunden was mir weitergeholfen hat. Hier mein Code in Kurzfassung:
$form=array();
$form[]=array($this->pi_getLL('form_company'),
$this->prefixId.'[form][company]=input ,60', $this->pi_getLL('form_company_value'));
$form[]=array($this->pi_getLL('form_complogo'), $this->prefixId.'[form][complogo]=file , 100');
$form[]=array('',$this->prefixId.'[submit]=submit',$this->pi_getLL('form_submit'));
// Formularkonfiguration festlegen
$fconf=array('type'=>t3lib_div::getIndpEnv('REQUEST_URI'),
'layout'=>$formLayout,);
//Frontend-Benutzernamen holen
$this->piVars['form']['fe_user_name'] = $this->callCompanyName();
//Formular zeichnen
$content.=$this->cObj->wrap($this->cObj->FORM($fconf,$form),$formWrap);
debug($this->piVars);
if (is_array($this->piVars['form']) && $this->piVars['form']['company']) {
foreach($this->piVars['form'] as $a => $b){
$insertArr[$a]=htmlspecialchars($b);
}
$insertArr['crdate']=time();
$insertArr['tstamp']=time();
$insertArr['hidden']='1';
$insertArr['pid']=33; $GLOBALS['TYPO3_DB']->exec_INSERTquery('meineExtension_tabelle',$insertArr);
debug($insertArr);
}
debug($form);
return $this->pi_wrapInBaseClass($content);
Hat jemand ne Idee, warum das nicht klappt?
g rising
TheRisingSun schrieb
Hat jemand ne Idee, warum das nicht klappt?
Weil this->piVars $_GET & $_POST-vars enthält, nicht aber $_FILES.
Um deren Verarbeitung mußt du dich selber kümmern,
so einfach wie in deinem Code gehts leider nicht.
Folgend ein paar Schnipsel aus einer alten Extension von mir,
das Prinzip sollte erkennbar sein:
if ($_FILES AND !$_FILES['newimage']['error']) {
$newimageArray = $_FILES['newimage'];
} else {
$newimageArray = '' ;
}
if ($newimageArray) {
// wenn ein Bild hochgeladen werden soll
// Validate the user image
if ($newimageArray['name'] && $newimageArray['type'] && $newimageArray['tmp_name'] && $newimageArray['error'] == 0 && $newimageArray['size']) {
if (t3lib_div::validPathStr(t3lib_div::fixWindowsFilePath($newimageArray['tmp_name'])) && $newimageArray['size'] <= intval($this->maxImgSize)) $img[0] = true;
//$error = 'size'; // check file size and name -- finish adding these errors later
if (t3lib_div::validPathStr(t3lib_div::fixWindowsFilePath($newimageArray['tmp_name'])) && is_uploaded_file($newimageArray['tmp_name'])) $img[1] = true;
//$error = 'exist';// check if file exists
if ($newimageArray['type'] == "image/gif" OR $newimageArray['type'] == "image/png" OR $newimageArray['type'] == 'image/jpeg') $img[2] = true;
//$error = 'mime';
$extension = strtolower(substr(strrchr($newimageArray['name'], '.'), 1));
if (t3lib_div::inList($GLOBALS["TYPO3_CONF_VARS"]["GFX"]["imagefile_ext"], $extension) == true) $img[3] = true;
}
if (($img[0] == true) && ($img[1] == true) && ($img[2] == true) && ($img[3] == true)) $img_valid = true;
// if there's an valid image -- handle it.
if ($img_valid == true) {
// Update the Img file
$imgName = explode(".", $newimageArray['name']);
$hashed_name = md5($userdata['name'].$userdata['uid'].$imgName[0]).'.'.substr(strrchr($newimageArray['name'], '.'), 1);
$rel_path = $this->uploadPath.$hashed_name;
$uploadfile = t3lib_div::getFileAbsFileName($rel_path);
$tmp_file = t3lib_div::upload_to_tempfile($newimageArray['tmp_name']);
t3lib_div::upload_copy_move($tmp_file, $uploadfile);
// put the file name in the article array for storing it in the db:
$newarticleArray['image'] = $hashed_name;
if ($tmp_file) t3lib_div::unlink_tempfile($tmp_file);
} else {
if ($newimageArray['tmp_name']) unlink($newimageArray['tmp_name']);
$newarticleArray['image'] = '';
if($img[0] != true) $noValidArticle['image'] = $this->pi_getLL('noValidArticle_image')." ".$conf['NewMaxUploadSize']."kB";
}
}
Vielen Dank, das ist genau der Hinweis, den ich gebraucht habe. Deinen Code werde ich gleich mal studieren.
Also ich habe mir Deinen Code mal angesehen und das ganze auch ähnlich umgesetzt. Es funktioniert auch fast tadellos. Eine Sache aber geht nur, wenn ich korrigierend eingreife. Und zwar an dieser Stelle im Code:
$tmp_file = t3lib_div::upload_to_tempfile($newimageArray['tmp_name']);
Wenn ich $tmp_file mit debug() ausgebe erhalte ich folgendes:
D:/XAMPP/htdocs/t3_cms/cms2/typo3temp/\upl46.tmp
Durch den Backslash am Ende gibt die später benutzte Methode t3lib_div::unlink_tempfile() ein FALSE zurück.
Mit folgender Ergänzung klappt das unlinken:
$tmp_file = t3lib_div::upload_to_tempfile($newimageArray['tmp_name']);
$tmp_file = str_replace ('\\' , '' , $tmp_file );
Ergebnis: D:/XAMPP/htdocs/t3_cms/cms2/typo3temp/upl46.tmp
Ansonsten ein prima Codeschnipsel. Danke dafür und für die Aufklärung.
Durchs viele googlen und suchen im Forum bin ich jedoch auf die Extension julle_feedit gestossen, die insgesamt genau das macht was ich möchte. Leider klappts mit der Implementation bzw. dem Zusammenspiel mit meiner Extension noch nicht ganz, da keine Doku vorhanden ist aber das ist ein anderer Thread. ;-)
THX!