Witam, chciałbym sie dowiedzieć jak przesłać forma z plikiem przez ajax'a? korzystałem z jquery.forms.js, ale działają mi tak jedynie formy post/get
Nie da się.
Da się. Sposób polega na przekierowaniu <form> ( z atrybutem enctype="multipart/form-data" ) do ukrytej ramki pływającej, w której skrypt php odbierze plik. Ewentualnie możesz zrobić osobny formularz, który będzie przekierowywał nie do ramki, tylko do pliku; sam formularz natomiast wyświetlać w ramce pływającej.
Tylko to wtedy nie AJAX, a ajaxopodobne coś. AJAX używa XHR.
Inne pytanie, przesyłam tablice $_FILES w wartości $_POST['files_vars'] (nie pytajcie dlaczego, za bardzo to jest zagmatwane)
i teraz jak wczytuje z powrotem w docelowej funkcji $_FILES = $_POST['files_vars'] to nie działa mi funkcja move_upload_file, jest jakaś możliwość oszukania tej funkcji? (dodam ze w miedzyczasie jest przesyłana ajaxem ta tablica $_POST, dlatego is_upload_file nie traktuje tego pliku tak jak bym chciał)
Ty chcesz całą tablicę $_FILES
nadpisać tablicą $_POST['files_vars']
. Zrób sobie var_dump i zobacz jakie dane są przechowywane w $_FILES
po wrzuceniu pliku, a czym ty próbujesz to zastąpić.
Jest dobrze, wczesniej wpisuje do $_POST['files_vars'] całą tablice $_FILES, wysyłam to ajaxem, po czym odbieram i cala tablica jest tylko move_upload_file głupieje.
A w $_FILES
nie ma przypadkiem lokacji tymczasowej pliku - zdeka nieprzewidywalnej? Przepisuj indeksami:
$_FILES['file_name'] = $_POST['files_vars']['file_name']
To będziesz miał pewność że jest OK.
Wszystko jest tak samo, jest przepisane indeksami. Tablica $_FILES jest identyczna na starcie i na koncu
Tylko to wtedy nie AJAX, a ajaxopodobne coś. AJAX używa XHR.
Nieprawda. Gdzie jest powiedziane, że AJAX musi używać XHR? Wiesz w jakich okolicznościach po raz pierwszy publicznie padła nazwa AJAX? AJAX jest z definicji pomysłem na to jak ładować na stronę (lub na serwer) treści bez przeładowywania wszystkiego. Tyle!
http://pl.wikipedia.org/wiki/AJAX napisał(a)
AJAX (ang. Asynchronous JavaScript and XML, asynchroniczny JavaScript i XML)
Zgadzam się że to jest asynchroniczne, ale nie AJAX. Stwierdzenie, że asynchroniczny = AJAX wzięło się z tego, że niezorientowani w temacie nawet interaktywne menu i rich edytory "robią w ajaxie" (zobacz dział Newbie). Po samej nazwie widać do czego to jest. Asynchroniczny JavaScript i XML. Iframe chyba nie zostały zaprojektowane z myślą o słaniu XMLa, bardziej HTML.
wracając do tematu: "move_uploaded_file()" zadziała tylko w tym samym requeście, w którym został wysłany plik. po zakończeniu requesta pliki z nim związane, tymczasowo zapisane na serwerze, są usuwane.