Witam,
Czy w ogóle jest możliwe ładowanie pliku z formularza po przez AJAX,
czy trzeba to robić zwykłą metoda (submit). AJAX wysyła metodą GET,
a normalny submit metoda POST.

Mam formularz który wygląda tak:
  1. <form id="CP::AddNew" method="post" action="myadmin.php?act=0&id=5">
  2. <input type="hidden" name="mode" value="ajax" />
  3. <input type="hidden" name="param" value="_addNew" />
  4. <input type="hidden" name="dir" value="baners" />
  5. Data rozpoczęcie wyświetlania baneru (Format: dd/MM/YYYY , np.: 31/03/2008):<br />
  6. <input type="text" maxlength="10" name="baner_start_time" class="form" value="" /><br />
  7. Data zakończenie wyświetlania baneru: (Format: dd/MM/YYYY , np.: 31/03/2008)<br />
  8. <input type="text" name="baner_end_time" maxlength="10" class="form" value="" /><br />
  9. Maxymalna liczba wyświetleń baneru:<br />
  10. <input type="text" name="baner_max_view" maxlength="7" class="form" value="" /><br />
  11. Baner capping:<br />
  12. <input type="text" name="baner_capping" maxlength="3" class="form" value="" /><br />
  13. Opis baneru (alt):<br />
  14. <input type="text" name="baner_desc" maxlength="250" class="form" value="" /><br /><br />
  15. Położenie baneru na stronie:<br />
  16. <select name="baner_site" class="form">
  17. <option value="0">-- brak --</option>
  18. <option value="1">top</option>
  19. <option value="2">bottom</option>
  20. </select><br />
  21. Dodaj Baner:<br />
  22. <input type="file" size="107" name="upload" class="form" value="" /><br />
  23. Szerokość Banera:<br />
  24. <input type="text" maxlength="3" name="baner_width" class="form" value="" /><br />
  25. Wysokość Banera:<br />
  26. <input type="text" maxlength="3" name="baner_height" class="form" value="" /><br />
  27. Link:<br />
  28. <input type="text" maxlength="250" name="baner_link" class="form" value="" /><br />
  29. Baner aktywny:<br />
  30. <select name="baner_active" class="form">
  31. <option value="0">NIE</option>
  32. <option value="1">TAK</option>
  33. </select><br />
  34. <div class="submit">
  35. <input type="botton" value="Zapisz" name="save" class="button" onclick="sendForm('CP::AddNew');" />
  36. </div>
  37. </form>
  38. <!-- FUNKCJA JAVASCRIPT -->
  39. function sendForm( id )
  40. {
  41. advAJAX.submit(document.getElementById(id), {
  42. onSuccess : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '' + convertHTML(obj.responseText) + ''; },
  43. onLoading : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '<div class="wait"><!-- --></div>'; },
  44. onError : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '<div class="error"><!-- --></div>'; }
  45. });
  46. }


Natomiast w PHP mam tego taką obsługę:
  1. <?php
  2. function _addNew()
  3. {
  4.  global $config, $lang, $sql;
  5.  
  6.  $baner_path = saveUploaded( UPLOAD_IMAGE );
  7.  $_bst = explode( "/", parseData( $_POST['baner_start_time'] ), 3);
  8.  $_bet = explode( "/", parseData( $_POST['baner_end_time'] ), 3); 
  9.  
  10.  $menu = array();
  11.  $menu['baner_path'] = $baner_path;
  12.  $menu['baner_site'] = (int)parseData( $_POST['baner_site'] );
  13.  $menu['baner_ext'] = substr($baner_path, strrpos($baner_path, '.'));
  14.  $menu['baner_start_time'] = mktime(0,0,0,(int)$_bst[1],(int)$_bst[0],(int)$_bst[2]);
  15.  $menu['baner_end_time'] = mktime(0,0,0,(int)$_bet[1],(int)$_bet[0],(int)$_bet[2]);
  16.  $menu['baner_active'] = (int)((isset($_POST['baner_active'])) ? 1 : 0);
  17.  $menu['baner_max_view'] = (int)parseData( $_POST['baner_max_view'] );
  18.  $menu['baner_capping'] = (int)parseData( $_POST['baner_capping'] );
  19.  $menu['baner_width'] = (int)parseData( $_POST['baner_width'] );
  20.  $menu['baner_height'] = (int)parseData( $_POST['baner_height'] );
  21.  $menu['baner_link'] = parseData( $_POST['baner_link'] );
  22.  $menu['baner_desc'] = parseData( $_POST['baner_desc'] );
  23.  
  24. if(!$sql->db_query( "INSERT INTO {$config['sql_prefix']}baners VALUES ('', '{$menu['baner_path']}', 
  25. '{$menu['baner_site']}', '{$menu['baner_ext']}', '{$menu['baner_start_time']}', '{$menu['baner_end_time']}', 
  26. '{$menu['baner_active']}', '', '{$menu['baner_max_view']}', '{$menu['baner_capping']}', '{$menu['baner_width']}', 
  27. '{$menu['baner_height']}', '{$menu['baner_link']}', '{$menu['baner_desc']}')" ))
  28. die($lang['sql_error']);
  29.  
  30. }
  31.  
  32. function saveUploaded( $type )
  33.  {
  34. global $lang;
  35.  
  36. $dir = parseData($_POST['dir']);
  37.  
  38. switch($type)
  39. {
  40.  case UPLOAD_IMAGE:
  41. $base_dir = './media/' . $dir;
  42. break;
  43.  default:
  44. return 1;
  45. break;
  46. }
  47.  
  48. if(!@is_uploaded_file( $_FILES['upload']['tmp_name'] ))
  49. {
  50. return 2;
  51. }
  52.  
  53. if(@file_exists($base_dir . '/' . $_FILES['upload']['name']))
  54. {
  55. return $lang['upload_exist'];
  56. }
  57.  
  58. if( !@move_uploaded_file( $_FILES['upload']['tmp_name'], $base_dir . '/' . $_FILES['upload']['name'] ) )
  59. {
  60. return 3;
  61. }
  62. @chmod($base_dir . '/' . $_FILES['upload']['name'], 0777);
  63. return $base_dir . '/' . $_FILES['upload']['name'];
  64.  }
  65. ?>


I do bazy trafia tam gdzie powinna być ścieżka do pliku wartość '2', więc wygląda na to że
plik nie zostaje załadowany z formularza na serwer:
  1. <?php
  2. if(!@is_uploaded_file( $_FILES['upload']['tmp_name'] ))
  3. {
  4. return 2;
  5. }
  6. ?>


Czy ktoś może mi pomóc, czy to wina AJAX'a że tablica $_FILES w ogóle nie istnieje w PHP,
czy może gdzieś jakaś składnia źle napisana , albo co gorsza jakaś literówka?
A może jest to spowodowane ze pierwotna funkcja odwołuje się do innej funkcji i ta druga
funkcja już nie widzie zmiennych odnoszących się do pliku?
Dodam że cała reszta zmiennych wysyłana przez formularz metoda GET, AJAX trafiają do
PHP, problem jest tylko z ładowaniem tego pliku przesyłanego przez ten formularz

Wielkie dzięki za pomoc,
Pozdrawiam...