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:
<form id="CP::AddNew" method="post" action="myadmin.php?act=0&id=5"> <input type="hidden" name="mode" value="ajax" /> <input type="hidden" name="param" value="_addNew" /> <input type="hidden" name="dir" value="baners" /> Data rozpoczęcie wyświetlania baneru (Format: dd/MM/YYYY , np.: 31/03/2008):<br /> Data zakończenie wyświetlania baneru: (Format: dd/MM/YYYY , np.: 31/03/2008)<br /> Maxymalna liczba wyświetleń baneru:<br /> Baner capping:<br /> Opis baneru (alt):<br /> Położenie baneru na stronie:<br /> <select name="baner_site" class="form"> Dodaj Baner:<br /> Szerokość Banera:<br /> Wysokość Banera:<br /> Link:<br /> Baner aktywny:<br /> <select name="baner_active" class="form"> <div class="submit"> <input type="botton" value="Zapisz" name="save" class="button" onclick="sendForm('CP::AddNew');" /> </div> </form> <!-- FUNKCJA JAVASCRIPT --> function sendForm( id ) { advAJAX.submit(document.getElementById(id), { onSuccess : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '' + convertHTML(obj.responseText) + ''; }, }); }
Natomiast w PHP mam tego taką obsługę:
<?php function _addNew() { $baner_path = saveUploaded( UPLOAD_IMAGE ); $menu['baner_path'] = $baner_path; $menu['baner_site'] = (int)parseData( $_POST['baner_site'] ); $menu['baner_max_view'] = (int)parseData( $_POST['baner_max_view'] ); $menu['baner_capping'] = (int)parseData( $_POST['baner_capping'] ); $menu['baner_width'] = (int)parseData( $_POST['baner_width'] ); $menu['baner_height'] = (int)parseData( $_POST['baner_height'] ); $menu['baner_link'] = parseData( $_POST['baner_link'] ); $menu['baner_desc'] = parseData( $_POST['baner_desc'] ); if(!$sql->db_query( "INSERT INTO {$config['sql_prefix']}baners VALUES ('', '{$menu['baner_path']}', '{$menu['baner_site']}', '{$menu['baner_ext']}', '{$menu['baner_start_time']}', '{$menu['baner_end_time']}', '{$menu['baner_active']}', '', '{$menu['baner_max_view']}', '{$menu['baner_capping']}', '{$menu['baner_width']}', '{$menu['baner_height']}', '{$menu['baner_link']}', '{$menu['baner_desc']}')" )) } function saveUploaded( $type ) { $dir = parseData($_POST['dir']); switch($type) { case UPLOAD_IMAGE: $base_dir = './media/' . $dir; break; default: return 1; break; } { return 2; } { return $lang['upload_exist']; } if( !@move_uploaded_file( $_FILES['upload']['tmp_name'], $base_dir . '/' . $_FILES['upload']['name'] ) ) { return 3; } @chmod($base_dir . '/' . $_FILES['upload']['name'], 0777); return $base_dir . '/' . $_FILES['upload']['name']; } ?>
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:
<?php { return 2; } ?>
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...