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:
<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 /> <input type="text" maxlength="10" name="baner_start_time" class="form" value="" /><br /> Data zakończenie wyświetlania baneru: (Format: dd/MM/YYYY , np.: 31/03/2008)
<br /> <input type="text" name="baner_end_time" maxlength="10" class="form" value="" /><br /> Maxymalna liczba wyświetleń baneru:
<br /> <input type="text" name="baner_max_view" maxlength="7" class="form" value="" /><br /> <input type="text" name="baner_capping" maxlength="3" class="form" value="" /><br /> <input type="text" name="baner_desc" maxlength="250" class="form" value="" /><br /><br /> Położenie baneru na stronie:
<br /> <select name="baner_site" class="form"> <input type="file" size="107" name="upload" class="form" value="" /><br /> <input type="text" maxlength="3" name="baner_width" class="form" value="" /><br /> <input type="text" maxlength="3" name="baner_height" class="form" value="" /><br /> <input type="text" maxlength="250" name="baner_link" class="form" value="" /><br /> <select name="baner_active" class="form"> <input type="botton" value="Zapisz" name="save" class="button" onclick="sendForm('CP::AddNew');" /> <!-- FUNKCJA JAVASCRIPT -->
function sendForm( id )
{
advAJAX.submit(document.getElementById(id), {
onSuccess : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '' + convertHTML(obj.responseText) + ''; },
onLoading : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '
<div class="wait"><!-- --></div>'; },
onError : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '
<div class="error"><!-- --></div>'; }
});
}
Natomiast w PHP mam tego taką obsługę:
<?php
function _addNew()
{
$baner_path = saveUploaded( UPLOAD_IMAGE );
$_bst = explode( "/", parseData
( $_POST['baner_start_time'] ), 3
); $_bet = explode( "/", parseData
( $_POST['baner_end_time'] ), 3
);
$menu['baner_path'] = $baner_path;
$menu['baner_site'] = (int)parseData( $_POST['baner_site'] );
$menu['baner_ext'] = substr($baner_path, strrpos($baner_path, '.')); $menu['baner_start_time'] = mktime(0
,0
,0
,(int
)$_bst[1
],(int
)$_bst[0
],(int
)$_bst[2
]); $menu['baner_end_time'] = mktime(0
,0
,0
,(int
)$_bet[1
],(int
)$_bet[0
],(int
)$_bet[2
]); $menu['baner_active'] = (int
)((isset($_POST['baner_active'])) ? 1
: 0
); $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;
}
if(@file_exists($base_dir . '/' . $_FILES['upload']['name'])) {
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...