Sziasztok!
fejlesztek saját modult, amibe kellene validate-t fvényt írnom, ami leellenőrzi, h a feltöltendő file kiterjesztése pdf, vagy txt, ellenben hibát ír ki
van egy olyan fvény h 'file_validate_extensions'
a kódom
function infocsop_application_fer_form(&$form_state){ $form['#attributes']['enctype'] = 'multipart/form-data'; $form['document_upload'] = array( '#type' => 'file', '#title' => t('File'), '#required' => FALSE, '#description' => t('Click "Browse" to select a file to upload. The maximum file size per upload is %size MB.', array('%size' => round(file_upload_max_size()/(1024*1024), 0))), '#weight' => -5, ); $form["submit"] = array( "#type" => "submit", "#value" => t("Submit"), "#validate" => array("infocsop_application_fer_validate"), "#submit" => array("infocsop_application_fer_submit"), ); return $form; } function infocsop_application_fer_validate($form, &$form_state){ if (isset($form['document_upload'])) { $validators = array( 'file_validate_extensions' => array('txt') ); $file = file_save_upload('document_upload', $validators); if (!$file) form_set_error('upload', 'You must select a valid file to upload.'); else { $form_state['values']['title'] = $file->filename; $form_state['values']['myfile'] = $file; } } } function infocsop_application_fer_submit($form, &$form_state){ $file_meret_kep = $_FILES["files"]["size"]["document_upload"]; if($file_meret_kep!=0){ $utvonal_kep=file_directory_path()."/persons"; //feltöltendő file neve $nev_kep = $_FILES["files"]["name"]["document_upload"]; $tmp_name_kep = $_FILES["files"]["tmp_name"]["document_upload"]; //és utána elmentem az általam megadott könyvtárba if (file_check_directory($utvonal_kep, FILE_CREATE_DIRECTORY)) { $file_kep = file_save_upload("document_upload", NULL, $utvonal_kep); /*VALÓBAN FEL LETT - E TÖLTVE A FILE*/ } drupal_set_message("A ". "$nev_kep"." file was uploaded."); } } nem ír ki hibát akkor, ha nem a megfelelő típusú file-t töltöm fel minden tartalom típust feltölt valaki tudna nekem segíteni a kódban?
Drupal verzió:
Fórum:
És milyen hibaüzenet ír ki ?
És milyen hibaüzenet ír ki ?
...mit tudok: http://web.termuves.hu
üzi
üzenetet nem ír ki pont ez a baj h nem jelez semmilyen típusnál, mindet engedi feltölteni még jpeg-et is.
mini
Nekem lenne tippem
Ha megnézed a file_save_upload függvény paraméterezését, a $validators tömb felépítése úgy néz ki, hogy a kulcsok a függvénynevek, és az értékei pedig tömbök, amik a függvény paramétereit tartalmazzák. A file_validate_extensions függvény pedig két paramétert vár, az első a fájl objektum, a második pedig egy string, ami szóközzel elválasztva tartalmazza a megengedett kiterjesztéseket. Te pedig kihagytad a fájl objektumot.
Szóval szerintem így helyes:
Ez tényleg csak tipp, nem vagyok benne biztos, de egy próbát megér. :)
beírtam ami javasoltál
beírtam amit javasoltál a de nem jártam sikerrel, köszike azért
file_validate_extensions függvényt is akartam használni, de mivel objektumot vár, nem tudom hogyan is kell akkor átadni a paraméterbe a formot??
azért tovább próbálkozok
mini
fájl objektum
Szerintem ezzel van a baj, hogy amit én írtam első paraméternek, az nem fájl objektum.
ijj
ijj az meglehet, igen objektumot vár, csak abban egyenlőre nem vagyok jártas miként lehetne
egy objektumot gyártani a form elemből
tovább keresgélek
próbáltam egy olyat csinálni, h . alapján szétszedtem a file nevét egy tömbbe, és a legultsó tömb elemre szabadítok rá feltételt h txt vagy pdf de mindenféleképpen a drupal fvényt szeretném használni, majd beírok amint tudok értelmeset, de ha valaki tud segíteni szerintem ez sok mindenki számára hasznos lehet a jövőben
mini
uber usernél nincs validálás
Van egy tippem, hogy működik a kódod, csak nem látod, mert uber user esetén nem fut le az ellenőrzés. Jelentkezz ki és próbáld ki úgy.
persze
neked is köszönöm, ki fogom próbálni csak most azon vagyok h konkrétan a file_validate_extension fvényt használjam, nem pedig a file_save_upload fvényt
de nem tudom hogyan kellene a file form-ból objekumot gyártani:(
de nem adom fel
mini
akkor szerintem butaságot szeretnél
A
file_save_upload()
használata a helyes út. Ez egyben elvégzi a validálást és a feltöltést is, valamint létrehozza a$file
objektumot is, amivel a továbbiakban azt csinálsz, amit akarsz. Azinfocsop_application_fer_validate()
függvény is teljesen szükségtelen. Ahook_validate()
node és nem file validálásra van. Asubmit()
hurkodban végrehajthatod az egész műveletet.update: látom, az nem hook_validate() akart lenni, ettől függetlenül nem kell :)
kirpróbáltam
szuper ezer hála, nagyon köszönöm
De az a helyzet, h az űrlapomnak sok eleme van név, cím stb, és amikor rossz kiterjesztésű file-t próbál feltölteni valaki --> hiba esetén a form újra fog töltődni, és ez eddig beírt adatok is el fognak tűnni, jó session változóval meg lehet oldani, de ezért is akartam használni a file_validate_extensions fvényt a validate-ban, vagyis h ne kerüljön át a vezérlés a submitra ha nem jó a file kiterjesztése, de akkor finomítok ezen a megoldáson
mini
ideiglenes változó
Jó lenne tudni, hogy mi lesz ezeknek az adatoknak a sorsa.
Egy lehetséges megoldás, hogy ideiglenes változóba mented a bevitt adatokat a variable_set() használatával. Az űrlapodban pedig beállítod az alapértelmezett értékeket a variable_get() segítségével, majd az űrlap sikeres elküldésével törlöd ezeket a variable_del() meghívásával.
Persze, ha most node objektumokról beszélünk, akkor máris nem ez a jó megoldás, de jelen pillanatban nem tudjuk mi lesz az elküldött űrlap sorsa.
adatbázis
olyan űrlapról lenne szó, ahol jelentkezni lehet bizonyos kurzusra,
kért adatok, melyek adatbázisba mennek:
név, ország, cím, születési dátum, város, cím
mindenkinek kötelező magáról egy önéletrajzot, ami pedig a sites/default/files egyik alkönyvtárában fog majd csücsülni, mégpedig az adott ember elsődleges kulcsával megegyező nevű/számú alkönyvtárban, vagyis a file-t nem adatbázisban tárolom
és azért kell session, mert az adatokat -- név, cím stb. meg kellene őrizni, h ne kelljen újra beírnia ha csak a file kiterjesztése nem jó
olyan megoldást akarok:
kitölti az adatokat -- ezeket validate fvénnyel leellenőrzöm
file kiterjesztés ellenőrzése submit fvényen belül történik
vagyis ha nem megfelelő a kiterjesztés akkor vissza kiadok egy üzit, ugyanakkor a form elemek és a file feltöltése előtt már felvitt adatok ne tűnjenek el (bár mentésük az adatbázisba csak akkor történik meg ha minden érték még a file típus is megfelelő)
submit fvényem:
letárolom a session változókba a form értékeket
utána megvizsgálom a file kiterjesztést -- ha jó akkor mentem a file-t és az adatokat az adatbázisba és a session változók értékeit törlöm
-- avagy ha nem jó a kiterjesztés, akkor újra visszaadom a formot, h újra tudjon file-t csatolni, de felvitt értékek (cím, név stb.)
már azért ki legyenek töltve
ezt szeretném ill fogom
ha van ötleted?
mini
ötletnek lásd az előző hozzászólásom
Azzal a megoldással egészen addig elérhető marad a bevitt adat, amíg nem törlöd. Inkább arra lettem volna kíváncsi, hogy a saját modulodon belül megvalósítasz-e egy jelentkező tartalom típust, aztán a jelentkezésekkel ilyen-olyan műveleteket hajtasz-e végre az oldalon belül. Ha csak egy adatbázisba be akarod tolni az adatokat, akkor jó lehet a fentebb vázolt megoldás, de ha node objektumokról beszélünk, akkor máshogy csinálnám.
nem
nem lesz saját node típus
mini
én nem értem, hogy minek a bűvészkedés
filefield modul miért nem jó arra, hogy feltöltést adj a tartalom típusodhoz? még csak nem is a modulod hozta létre a tartalom típust. simán a cckval egy filefield mező miért nem jó? mindent tud amit akarsz, célkönyvtárat, még file átnevezési szabályt is megadhatsz ha fielfeild_path is van és korlátozhatod a feltölthető fileok típusát is. ő meg validál, másol, átnevez, végzi a dolgát.
-
clear: both;
saját form
mert saját modul keretében hozok létre saját formot, és nem lesz saját tartalom típusom de ezt írtam fent, és nem szoktam bűvészkedni :)
mini