fájl feltöltése

nevergone képe

Sziasztok!

Van egy űrlapom az adminisztrációs oldalon, amely a következő:

  $form['filename'] = array(
    '#type' => 'file',
    '#title' => 'fájlnév',
    '#size' => 40,
  );

A megfelelő "submit()" függvényben szeretném elvégezni a feltöltést:

  $filename =  $form_values['clicked_button']['#post']['files']['filename'];
  file_save_upload ('filename', FALSE, file_directory_temp(), FILE_EXISTS_REPLACE);

A $filename csak egy előző kísérlet miatt maradt bent, egyelőre nem töröltem, mert még jól jöhet a megoldáshoz. Szóval ez nem működik, a file_save_upload () "0" értékkel tér vissza (ami hibát jelent), és a feltöltést sem végzi el.

Tudnátok esetleg abban segíteni, mi lehet a probléma? Próbáltam keresni a megoldást, jópár dolgot találtam is, de ez mégsem akarja az igazságot.

nevergone képe

Szóval találtam ezt: http://drupal.hu/node/563
Ez alapján írtam ezt:

$form['filename']['#attributes'] = array('enctype' => 'multipart/form-data');

Ami működik is, hiszen a HTML forrásban lesz ez:

<input type="file" name="files[filename]"  enctype="multipart/form-data" class="form-file" id="edit-filename" size="40" />

Ennek ellenére a helyzet változatlan, a feltöltés nem működik, a file_save_upload() visszatérési értéke FALSE, vagyis hiba van.
Valami egyéb ötlet?

Ui.: Most látom, hogy éjjeli kómás fejjel kimaradt: Drupal 6.x -ről van szó.

0
0
nevergone képe

Szóval említettem, hogy van egy ilyen:

$form['filename']['#attributes'] = array('enctype' => 'multipart/form-data');

Nos, ez egyre inkább úgy néz ki, hogy baromság, mivel ezt az értéket a form -ra, és nem a form egy adott mezőjére kell megadni.

Szóval lett helyette ez:

$form['#attributes']['enctype'] = 'multipart/form-data';

Így viszont "elveszítem" a fájlnév értékét, sem a _validate(), sem a _submit() függvényben nem tudom lekérdezni. Egyszerűen a paraméterként használt változók nem tartalmaznak ilyen értéket, pedig ha ezt a form attributumot nem adom meg, akkor a _validate() -ban a $form_state['clicked_button']['#post']['files']['filename'];
simán visszaadja.

Szóval ha valaki esetleg képes segíteni, azt megköszönném, mert kezdek összezavarodni.

0
0
nevergone képe

Most már biztos, hogy én csinálok valamit rosszul, ugyanis elkezdtem a hibát keresni a file.inc állományban definiált file_save_upload() segítségével is.

Van a függvény kódjában egy ilyen:

if (isset($_FILES['files']) && $_FILES['files']['name'][$source] && is_uploaded_file($_FILES['files']['tmp_name'][$source]))

Ahogy elnézem, ez a feltétel nálam egyáltalán nem teljesül, és a $_FILES értéke is üres tömb, legalábbis a függvény kódjában kiiratva.

0
0
nevergone képe

Szóval továbbjutottam magamban.

Megy a feltöltés, működik szépen, de sem a _validate(), sem a _submit() függvényben nem tudom megszerezni a fájlnevet. Ha a _validate() -t nem használom, akkor fel tudok tölteni mindent. Továbbra is hiába iratom ki a változók értékeit a függvényekben, a fájlnév nincs benne, valami olyasmivel is jól kijönnék, ami a
file_save_upload ('filename', '', file_directory_temp()); -hoz hasonlóan megszerzi a megadott form-elemből a fájlnév értékét.

Szóval ez most elvégzi a feltöltést, ki tudnátok belőle varázsolni a fájlnevet?

/* hook_menu () implementacio */
function xy_import_menu ()  {
  $items['admin/xy'] = array (
    'title' => 'xy',
    'type' => MENU_CALLBACK,
    'page callback' => 'drupal_get_form',
    'page arguments' => array ('xy_import_admin'),
    'access arguments' => array('administer access'),
  );
  return $items;
}
 
/* admin oldal elkeszitese Form API -val*/
function xy_import_admin () {
  $form['filename'] = array(
    '#type' => 'file',
    '#title' => 'fajlnev',
    '#size' => 40,
  );
  $form['import'] = array(
    '#type' => 'submit',
    '#value' => t('Import'),
  );
  // ha ez kimarad, nem megy a fajlfeltoltes
  $form['#attributes']['enctype'] = 'multipart/form-data';
  return $form;
}
 
/* elkuldik az urlapot a rendszerbe */
function xy_import_admin_submit ($form_id, $form_values)  {
  $ertek=file_save_upload ('filename', '', file_directory_temp());
}

Ui.:
A

  print ('<pre>');
  print_r ($_FILES);
  print ('</pre>');

segített a fájlnévben (jó volt újra belelesni a file_save_upload() forrásába), de nem tudom, hogy ez mennyire használható.

Elnézést, hogy itt feleslegesen "spammelek", de gondoltam másokat is érdekelhet a aprobléma megoldása.

0
0
gyuri2012 képe

Érdekel..., én olvasom, csak értelmesen hozzászólni nem tudok sajnos. De szóval nekem hasznos.
Csak így tovább! :)

0
0
lili_ képe

elolvastam és a legutolsó nagyon jó volt nekem
működik:)
köszike

0
0

mini

RaptoR képe

Szia Nevergone!

A fájlfeltöltésnél én ott szívtam először, amikor ellenőrizni akartam, hogy megvan-e egyáltalán a fájl. Kiderült, hogy ezt nem úgy kell végezni, ahogy a többi űrlap elemét. A file_check_upload() függvény az, amivel meg kell nézetni a fájlokat. Ez már _validate()-nél is megy, visszatérési értéke egy objektum, amiben minden infó benne van a fájlról.

0
0